1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2e35e4d28SHila Gonen #ifndef __CFG80211_RDEV_OPS 3e35e4d28SHila Gonen #define __CFG80211_RDEV_OPS 4e35e4d28SHila Gonen 5e35e4d28SHila Gonen #include <linux/rtnetlink.h> 6e35e4d28SHila Gonen #include <net/cfg80211.h> 7e35e4d28SHila Gonen #include "core.h" 814e8a3c4SBeni Lev #include "trace.h" 9e35e4d28SHila Gonen 1081256969SStanislaw Gruszka static inline int rdev_suspend(struct cfg80211_registered_device *rdev, 1181256969SStanislaw Gruszka struct cfg80211_wowlan *wowlan) 12e35e4d28SHila Gonen { 1314e8a3c4SBeni Lev int ret; 1481256969SStanislaw Gruszka trace_rdev_suspend(&rdev->wiphy, wowlan); 1581256969SStanislaw Gruszka ret = rdev->ops->suspend(&rdev->wiphy, wowlan); 1614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 1714e8a3c4SBeni Lev return ret; 18e35e4d28SHila Gonen } 19e35e4d28SHila Gonen 20e35e4d28SHila Gonen static inline int rdev_resume(struct cfg80211_registered_device *rdev) 21e35e4d28SHila Gonen { 2214e8a3c4SBeni Lev int ret; 2314e8a3c4SBeni Lev trace_rdev_resume(&rdev->wiphy); 2414e8a3c4SBeni Lev ret = rdev->ops->resume(&rdev->wiphy); 2514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 2614e8a3c4SBeni Lev return ret; 27e35e4d28SHila Gonen } 28e35e4d28SHila Gonen 29e35e4d28SHila Gonen static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev, 30e35e4d28SHila Gonen bool enabled) 31e35e4d28SHila Gonen { 3214e8a3c4SBeni Lev trace_rdev_set_wakeup(&rdev->wiphy, enabled); 33e35e4d28SHila Gonen rdev->ops->set_wakeup(&rdev->wiphy, enabled); 3414e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 35e35e4d28SHila Gonen } 36e35e4d28SHila Gonen 37e35e4d28SHila Gonen static inline struct wireless_dev 38e35e4d28SHila Gonen *rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name, 396bab2e19STom Gundersen unsigned char name_assign_type, 40818a986eSJohannes Berg enum nl80211_iftype type, 41e35e4d28SHila Gonen struct vif_params *params) 42e35e4d28SHila Gonen { 4314e8a3c4SBeni Lev struct wireless_dev *ret; 4414e8a3c4SBeni Lev trace_rdev_add_virtual_intf(&rdev->wiphy, name, type); 456bab2e19STom Gundersen ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, name_assign_type, 46818a986eSJohannes Berg type, params); 4714e8a3c4SBeni Lev trace_rdev_return_wdev(&rdev->wiphy, ret); 4814e8a3c4SBeni Lev return ret; 49e35e4d28SHila Gonen } 50e35e4d28SHila Gonen 51e35e4d28SHila Gonen static inline int 52e35e4d28SHila Gonen rdev_del_virtual_intf(struct cfg80211_registered_device *rdev, 53e35e4d28SHila Gonen struct wireless_dev *wdev) 54e35e4d28SHila Gonen { 5514e8a3c4SBeni Lev int ret; 5614e8a3c4SBeni Lev trace_rdev_del_virtual_intf(&rdev->wiphy, wdev); 5714e8a3c4SBeni Lev ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev); 5814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 5914e8a3c4SBeni Lev return ret; 60e35e4d28SHila Gonen } 61e35e4d28SHila Gonen 62e35e4d28SHila Gonen static inline int 63e35e4d28SHila Gonen rdev_change_virtual_intf(struct cfg80211_registered_device *rdev, 64e35e4d28SHila Gonen struct net_device *dev, enum nl80211_iftype type, 65818a986eSJohannes Berg struct vif_params *params) 66e35e4d28SHila Gonen { 6714e8a3c4SBeni Lev int ret; 6814e8a3c4SBeni Lev trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 69818a986eSJohannes Berg ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, 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; 806cdd3979SAlexander Wetzel trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, 816cdd3979SAlexander Wetzel mac_addr, params->mode); 8214e8a3c4SBeni Lev ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise, 83e35e4d28SHila Gonen mac_addr, params); 8414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 8514e8a3c4SBeni Lev return ret; 86e35e4d28SHila Gonen } 87e35e4d28SHila Gonen 88e35e4d28SHila Gonen static inline int 89e35e4d28SHila Gonen rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev, 90e35e4d28SHila Gonen u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, 91e35e4d28SHila Gonen void (*callback)(void *cookie, struct key_params*)) 92e35e4d28SHila Gonen { 9314e8a3c4SBeni Lev int ret; 9414e8a3c4SBeni Lev trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 9514e8a3c4SBeni Lev ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise, 96e35e4d28SHila Gonen mac_addr, cookie, callback); 9714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 9814e8a3c4SBeni Lev return ret; 99e35e4d28SHila Gonen } 100e35e4d28SHila Gonen 101e35e4d28SHila Gonen static inline int rdev_del_key(struct cfg80211_registered_device *rdev, 102e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 103e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr) 104e35e4d28SHila Gonen { 10514e8a3c4SBeni Lev int ret; 10614e8a3c4SBeni Lev trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 10714e8a3c4SBeni Lev ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise, 108e35e4d28SHila Gonen mac_addr); 10914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 11014e8a3c4SBeni Lev return ret; 111e35e4d28SHila Gonen } 112e35e4d28SHila Gonen 113e35e4d28SHila Gonen static inline int 114e35e4d28SHila Gonen rdev_set_default_key(struct cfg80211_registered_device *rdev, 115e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, bool unicast, 116e35e4d28SHila Gonen bool multicast) 117e35e4d28SHila Gonen { 11814e8a3c4SBeni Lev int ret; 11914e8a3c4SBeni Lev trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index, 120e35e4d28SHila Gonen unicast, multicast); 12114e8a3c4SBeni Lev ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index, 12214e8a3c4SBeni Lev unicast, multicast); 12314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 12414e8a3c4SBeni Lev return ret; 125e35e4d28SHila Gonen } 126e35e4d28SHila Gonen 127e35e4d28SHila Gonen static inline int 128e35e4d28SHila Gonen rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev, 129e35e4d28SHila Gonen struct net_device *netdev, u8 key_index) 130e35e4d28SHila Gonen { 13114e8a3c4SBeni Lev int ret; 13214e8a3c4SBeni Lev trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index); 13314e8a3c4SBeni Lev ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, 134e35e4d28SHila Gonen key_index); 13514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 13614e8a3c4SBeni Lev return ret; 137e35e4d28SHila Gonen } 138e35e4d28SHila Gonen 139e35e4d28SHila Gonen static inline int rdev_start_ap(struct cfg80211_registered_device *rdev, 140e35e4d28SHila Gonen struct net_device *dev, 141e35e4d28SHila Gonen struct cfg80211_ap_settings *settings) 142e35e4d28SHila Gonen { 14314e8a3c4SBeni Lev int ret; 14414e8a3c4SBeni Lev trace_rdev_start_ap(&rdev->wiphy, dev, settings); 14514e8a3c4SBeni Lev ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 14614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 14714e8a3c4SBeni Lev return ret; 148e35e4d28SHila Gonen } 149e35e4d28SHila Gonen 150e35e4d28SHila Gonen static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev, 151e35e4d28SHila Gonen struct net_device *dev, 152e35e4d28SHila Gonen struct cfg80211_beacon_data *info) 153e35e4d28SHila Gonen { 15414e8a3c4SBeni Lev int ret; 15514e8a3c4SBeni Lev trace_rdev_change_beacon(&rdev->wiphy, dev, info); 15614e8a3c4SBeni Lev ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 15714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 15814e8a3c4SBeni Lev return ret; 159e35e4d28SHila Gonen } 160e35e4d28SHila Gonen 161e35e4d28SHila Gonen static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev, 162e35e4d28SHila Gonen struct net_device *dev) 163e35e4d28SHila Gonen { 16414e8a3c4SBeni Lev int ret; 16514e8a3c4SBeni Lev trace_rdev_stop_ap(&rdev->wiphy, dev); 16614e8a3c4SBeni Lev ret = rdev->ops->stop_ap(&rdev->wiphy, dev); 16714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 16814e8a3c4SBeni Lev return ret; 169e35e4d28SHila Gonen } 170e35e4d28SHila Gonen 171e35e4d28SHila Gonen static inline int rdev_add_station(struct cfg80211_registered_device *rdev, 172e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 173e35e4d28SHila Gonen struct station_parameters *params) 174e35e4d28SHila Gonen { 17514e8a3c4SBeni Lev int ret; 17614e8a3c4SBeni Lev trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 17714e8a3c4SBeni Lev ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 17814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 17914e8a3c4SBeni Lev return ret; 180e35e4d28SHila Gonen } 181e35e4d28SHila Gonen 182e35e4d28SHila Gonen static inline int rdev_del_station(struct cfg80211_registered_device *rdev, 18389c771e5SJouni Malinen struct net_device *dev, 18489c771e5SJouni Malinen struct station_del_parameters *params) 185e35e4d28SHila Gonen { 18614e8a3c4SBeni Lev int ret; 18789c771e5SJouni Malinen trace_rdev_del_station(&rdev->wiphy, dev, params); 18889c771e5SJouni Malinen ret = rdev->ops->del_station(&rdev->wiphy, dev, params); 18914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 19014e8a3c4SBeni Lev return ret; 191e35e4d28SHila Gonen } 192e35e4d28SHila Gonen 193e35e4d28SHila Gonen static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 194e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 195e35e4d28SHila Gonen struct station_parameters *params) 196e35e4d28SHila Gonen { 19714e8a3c4SBeni Lev int ret; 19814e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 19914e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 20014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 20114e8a3c4SBeni Lev return ret; 202e35e4d28SHila Gonen } 203e35e4d28SHila Gonen 204e35e4d28SHila Gonen static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 2057406353dSAntonio Quartulli struct net_device *dev, const u8 *mac, 206e35e4d28SHila Gonen struct station_info *sinfo) 207e35e4d28SHila Gonen { 20814e8a3c4SBeni Lev int ret; 20914e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 21014e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 21114e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 21214e8a3c4SBeni Lev return ret; 213e35e4d28SHila Gonen } 214e35e4d28SHila Gonen 215e35e4d28SHila Gonen static inline int rdev_dump_station(struct cfg80211_registered_device *rdev, 216e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *mac, 217e35e4d28SHila Gonen struct station_info *sinfo) 218e35e4d28SHila Gonen { 21914e8a3c4SBeni Lev int ret; 22014e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 22114e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 22214e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 22314e8a3c4SBeni Lev return ret; 224e35e4d28SHila Gonen } 225e35e4d28SHila Gonen 226e35e4d28SHila Gonen static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 227e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop) 228e35e4d28SHila Gonen { 22914e8a3c4SBeni Lev int ret; 23014e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 23114e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 23214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 23314e8a3c4SBeni Lev return ret; 234e35e4d28SHila Gonen } 235e35e4d28SHila Gonen 236e35e4d28SHila Gonen static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 237e35e4d28SHila Gonen struct net_device *dev, u8 *dst) 238e35e4d28SHila Gonen { 23914e8a3c4SBeni Lev int ret; 24014e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 24114e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 24214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 24314e8a3c4SBeni Lev return ret; 244e35e4d28SHila Gonen } 245e35e4d28SHila Gonen 246e35e4d28SHila Gonen static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 247e35e4d28SHila Gonen struct net_device *dev, u8 *dst, 248e35e4d28SHila Gonen u8 *next_hop) 249e35e4d28SHila Gonen { 25014e8a3c4SBeni Lev int ret; 25114e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 25214e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 25314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 25414e8a3c4SBeni Lev return ret; 255e35e4d28SHila Gonen } 256e35e4d28SHila Gonen 257e35e4d28SHila Gonen static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 258e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop, 259e35e4d28SHila Gonen struct mpath_info *pinfo) 260e35e4d28SHila Gonen { 26114e8a3c4SBeni Lev int ret; 26214e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 26314e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 26414e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 26514e8a3c4SBeni Lev return ret; 26614e8a3c4SBeni Lev 267e35e4d28SHila Gonen } 268e35e4d28SHila Gonen 26966be7d2bSHenning Rogge static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev, 27066be7d2bSHenning Rogge struct net_device *dev, u8 *dst, u8 *mpp, 27166be7d2bSHenning Rogge struct mpath_info *pinfo) 27266be7d2bSHenning Rogge { 27366be7d2bSHenning Rogge int ret; 27466be7d2bSHenning Rogge 27566be7d2bSHenning Rogge trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp); 27666be7d2bSHenning Rogge ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo); 27766be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 27866be7d2bSHenning Rogge return ret; 27966be7d2bSHenning Rogge } 28066be7d2bSHenning Rogge 281e35e4d28SHila Gonen static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 282e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *dst, 283e35e4d28SHila Gonen u8 *next_hop, struct mpath_info *pinfo) 284e35e4d28SHila Gonen 285e35e4d28SHila Gonen { 28614e8a3c4SBeni Lev int ret; 28714e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 28814e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 289e35e4d28SHila Gonen pinfo); 29014e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 29114e8a3c4SBeni Lev return ret; 292e35e4d28SHila Gonen } 293e35e4d28SHila Gonen 29466be7d2bSHenning Rogge static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev, 29566be7d2bSHenning Rogge struct net_device *dev, int idx, u8 *dst, 29666be7d2bSHenning Rogge u8 *mpp, struct mpath_info *pinfo) 29766be7d2bSHenning Rogge 29866be7d2bSHenning Rogge { 29966be7d2bSHenning Rogge int ret; 30066be7d2bSHenning Rogge 30166be7d2bSHenning Rogge trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp); 30266be7d2bSHenning Rogge ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo); 30366be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 30466be7d2bSHenning Rogge return ret; 30566be7d2bSHenning Rogge } 30666be7d2bSHenning Rogge 307e35e4d28SHila Gonen static inline int 308e35e4d28SHila Gonen rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 309e35e4d28SHila Gonen struct net_device *dev, struct mesh_config *conf) 310e35e4d28SHila Gonen { 31114e8a3c4SBeni Lev int ret; 31214e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 31314e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 31414e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 31514e8a3c4SBeni Lev return ret; 316e35e4d28SHila Gonen } 317e35e4d28SHila Gonen 318e35e4d28SHila Gonen static inline int 319e35e4d28SHila Gonen rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 320e35e4d28SHila Gonen struct net_device *dev, u32 mask, 321e35e4d28SHila Gonen const struct mesh_config *nconf) 322e35e4d28SHila Gonen { 32314e8a3c4SBeni Lev int ret; 32414e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 32514e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 32614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 32714e8a3c4SBeni Lev return ret; 328e35e4d28SHila Gonen } 329e35e4d28SHila Gonen 330e35e4d28SHila Gonen static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 331e35e4d28SHila Gonen struct net_device *dev, 332e35e4d28SHila Gonen const struct mesh_config *conf, 333e35e4d28SHila Gonen const struct mesh_setup *setup) 334e35e4d28SHila Gonen { 33514e8a3c4SBeni Lev int ret; 33614e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 33714e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 33814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 33914e8a3c4SBeni Lev return ret; 340e35e4d28SHila Gonen } 341e35e4d28SHila Gonen 342e35e4d28SHila Gonen 343e35e4d28SHila Gonen static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 344e35e4d28SHila Gonen struct net_device *dev) 345e35e4d28SHila Gonen { 34614e8a3c4SBeni Lev int ret; 34714e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 34814e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 34914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 35014e8a3c4SBeni Lev return ret; 351e35e4d28SHila Gonen } 352e35e4d28SHila Gonen 3536e0bd6c3SRostislav Lisovy static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev, 3546e0bd6c3SRostislav Lisovy struct net_device *dev, 3556e0bd6c3SRostislav Lisovy struct ocb_setup *setup) 3566e0bd6c3SRostislav Lisovy { 3576e0bd6c3SRostislav Lisovy int ret; 3586e0bd6c3SRostislav Lisovy trace_rdev_join_ocb(&rdev->wiphy, dev, setup); 3596e0bd6c3SRostislav Lisovy ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup); 3606e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3616e0bd6c3SRostislav Lisovy return ret; 3626e0bd6c3SRostislav Lisovy } 3636e0bd6c3SRostislav Lisovy 3646e0bd6c3SRostislav Lisovy static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev, 3656e0bd6c3SRostislav Lisovy struct net_device *dev) 3666e0bd6c3SRostislav Lisovy { 3676e0bd6c3SRostislav Lisovy int ret; 3686e0bd6c3SRostislav Lisovy trace_rdev_leave_ocb(&rdev->wiphy, dev); 3696e0bd6c3SRostislav Lisovy ret = rdev->ops->leave_ocb(&rdev->wiphy, dev); 3706e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3716e0bd6c3SRostislav Lisovy return ret; 3726e0bd6c3SRostislav Lisovy } 3736e0bd6c3SRostislav Lisovy 374e35e4d28SHila Gonen static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 375e35e4d28SHila Gonen struct net_device *dev, 376e35e4d28SHila Gonen struct bss_parameters *params) 377e35e4d28SHila Gonen 378e35e4d28SHila Gonen { 37914e8a3c4SBeni Lev int ret; 38014e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 38114e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 38214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 38314e8a3c4SBeni Lev return ret; 384e35e4d28SHila Gonen } 385e35e4d28SHila Gonen 386e35e4d28SHila Gonen static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 387e35e4d28SHila Gonen struct net_device *dev, 388e35e4d28SHila Gonen struct ieee80211_txq_params *params) 389e35e4d28SHila Gonen 390e35e4d28SHila Gonen { 39114e8a3c4SBeni Lev int ret; 39214e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 39314e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 39414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 39514e8a3c4SBeni Lev return ret; 396e35e4d28SHila Gonen } 397e35e4d28SHila Gonen 398e35e4d28SHila Gonen static inline int 399e35e4d28SHila Gonen rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 400e35e4d28SHila Gonen struct net_device *dev, 401e35e4d28SHila Gonen struct ieee80211_channel *chan) 402e35e4d28SHila Gonen { 40314e8a3c4SBeni Lev int ret; 40414e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 40514e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 40614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 40714e8a3c4SBeni Lev return ret; 408e35e4d28SHila Gonen } 409e35e4d28SHila Gonen 410e35e4d28SHila Gonen static inline int 411e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 412683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 413e35e4d28SHila Gonen { 41414e8a3c4SBeni Lev int ret; 415683b6d3bSJohannes Berg trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 416683b6d3bSJohannes Berg ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 41714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 41814e8a3c4SBeni Lev return ret; 419e35e4d28SHila Gonen } 420e35e4d28SHila Gonen 421e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 422e35e4d28SHila Gonen struct cfg80211_scan_request *request) 423e35e4d28SHila Gonen { 42414e8a3c4SBeni Lev int ret; 42514e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 42614e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 42714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 42814e8a3c4SBeni Lev return ret; 429e35e4d28SHila Gonen } 430e35e4d28SHila Gonen 43191d3ab46SVidyullatha Kanchanapally static inline void rdev_abort_scan(struct cfg80211_registered_device *rdev, 43291d3ab46SVidyullatha Kanchanapally struct wireless_dev *wdev) 43391d3ab46SVidyullatha Kanchanapally { 43491d3ab46SVidyullatha Kanchanapally trace_rdev_abort_scan(&rdev->wiphy, wdev); 43591d3ab46SVidyullatha Kanchanapally rdev->ops->abort_scan(&rdev->wiphy, wdev); 43691d3ab46SVidyullatha Kanchanapally trace_rdev_return_void(&rdev->wiphy); 43791d3ab46SVidyullatha Kanchanapally } 43891d3ab46SVidyullatha Kanchanapally 439e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 440e35e4d28SHila Gonen struct net_device *dev, 441e35e4d28SHila Gonen struct cfg80211_auth_request *req) 442e35e4d28SHila Gonen { 44314e8a3c4SBeni Lev int ret; 44414e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 44514e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 44614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 44714e8a3c4SBeni Lev return ret; 448e35e4d28SHila Gonen } 449e35e4d28SHila Gonen 450e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 451e35e4d28SHila Gonen struct net_device *dev, 452e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 453e35e4d28SHila Gonen { 45414e8a3c4SBeni Lev int ret; 45514e8a3c4SBeni Lev trace_rdev_assoc(&rdev->wiphy, dev, req); 45614e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 45714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 45814e8a3c4SBeni Lev return ret; 459e35e4d28SHila Gonen } 460e35e4d28SHila Gonen 461e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 462e35e4d28SHila Gonen struct net_device *dev, 463e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 464e35e4d28SHila Gonen { 46514e8a3c4SBeni Lev int ret; 46614e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 46714e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 46814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 46914e8a3c4SBeni Lev return ret; 470e35e4d28SHila Gonen } 471e35e4d28SHila Gonen 472e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 473e35e4d28SHila Gonen struct net_device *dev, 474e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 475e35e4d28SHila Gonen { 47614e8a3c4SBeni Lev int ret; 47714e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 47814e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 47914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 48014e8a3c4SBeni Lev return ret; 481e35e4d28SHila Gonen } 482e35e4d28SHila Gonen 483e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 484e35e4d28SHila Gonen struct net_device *dev, 485e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 486e35e4d28SHila Gonen { 48714e8a3c4SBeni Lev int ret; 48814e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 48914e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 49014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 49114e8a3c4SBeni Lev return ret; 492e35e4d28SHila Gonen } 493e35e4d28SHila Gonen 494088e8df8Svamsi krishna static inline int 495088e8df8Svamsi krishna rdev_update_connect_params(struct cfg80211_registered_device *rdev, 496088e8df8Svamsi krishna struct net_device *dev, 497088e8df8Svamsi krishna struct cfg80211_connect_params *sme, u32 changed) 498088e8df8Svamsi krishna { 499088e8df8Svamsi krishna int ret; 500088e8df8Svamsi krishna trace_rdev_update_connect_params(&rdev->wiphy, dev, sme, changed); 501088e8df8Svamsi krishna ret = rdev->ops->update_connect_params(&rdev->wiphy, dev, sme, changed); 502088e8df8Svamsi krishna trace_rdev_return_int(&rdev->wiphy, ret); 503088e8df8Svamsi krishna return ret; 504088e8df8Svamsi krishna } 505088e8df8Svamsi krishna 506e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 507e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 508e35e4d28SHila Gonen { 50914e8a3c4SBeni Lev int ret; 51014e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 51114e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 51214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 51314e8a3c4SBeni Lev return ret; 514e35e4d28SHila Gonen } 515e35e4d28SHila Gonen 516e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 517e35e4d28SHila Gonen struct net_device *dev, 518e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 519e35e4d28SHila Gonen { 52014e8a3c4SBeni Lev int ret; 52114e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 52214e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 52314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 52414e8a3c4SBeni Lev return ret; 525e35e4d28SHila Gonen } 526e35e4d28SHila Gonen 527e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 528e35e4d28SHila Gonen struct net_device *dev) 529e35e4d28SHila Gonen { 53014e8a3c4SBeni Lev int ret; 53114e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 53214e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 53314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 53414e8a3c4SBeni Lev return ret; 535e35e4d28SHila Gonen } 536e35e4d28SHila Gonen 537e35e4d28SHila Gonen static inline int 538e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 539e35e4d28SHila Gonen { 54014e8a3c4SBeni Lev int ret; 54124953de0SJohannes Berg 54224953de0SJohannes Berg if (!rdev->ops->set_wiphy_params) 54324953de0SJohannes Berg return -EOPNOTSUPP; 54424953de0SJohannes Berg 54514e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 54614e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 54714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 54814e8a3c4SBeni Lev return ret; 549e35e4d28SHila Gonen } 550e35e4d28SHila Gonen 551e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 552c8442118SJohannes Berg struct wireless_dev *wdev, 553e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 554e35e4d28SHila Gonen { 55514e8a3c4SBeni Lev int ret; 556c8442118SJohannes Berg trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 557c8442118SJohannes Berg ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 55814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 55914e8a3c4SBeni Lev return ret; 560e35e4d28SHila Gonen } 561e35e4d28SHila Gonen 562e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 563c8442118SJohannes Berg struct wireless_dev *wdev, int *dbm) 564e35e4d28SHila Gonen { 56514e8a3c4SBeni Lev int ret; 566c8442118SJohannes Berg trace_rdev_get_tx_power(&rdev->wiphy, wdev); 567c8442118SJohannes Berg ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 56814e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 56914e8a3c4SBeni Lev return ret; 570e35e4d28SHila Gonen } 571e35e4d28SHila Gonen 572e35e4d28SHila Gonen static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev, 573e35e4d28SHila Gonen struct net_device *dev, const u8 *addr) 574e35e4d28SHila Gonen { 57514e8a3c4SBeni Lev int ret; 57614e8a3c4SBeni Lev trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr); 57714e8a3c4SBeni Lev ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr); 57814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 57914e8a3c4SBeni Lev return ret; 580e35e4d28SHila Gonen } 581e35e4d28SHila Gonen 582ce0ce13aSMichael Braun static inline int 583ce0ce13aSMichael Braun rdev_set_multicast_to_unicast(struct cfg80211_registered_device *rdev, 584ce0ce13aSMichael Braun struct net_device *dev, 585ce0ce13aSMichael Braun const bool enabled) 586ce0ce13aSMichael Braun { 587ce0ce13aSMichael Braun int ret; 588ce0ce13aSMichael Braun trace_rdev_set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 589ce0ce13aSMichael Braun ret = rdev->ops->set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 590ce0ce13aSMichael Braun trace_rdev_return_int(&rdev->wiphy, ret); 591ce0ce13aSMichael Braun return ret; 592ce0ce13aSMichael Braun } 593ce0ce13aSMichael Braun 59452539ca8SToke Høiland-Jørgensen static inline int 59552539ca8SToke Høiland-Jørgensen rdev_get_txq_stats(struct cfg80211_registered_device *rdev, 59652539ca8SToke Høiland-Jørgensen struct wireless_dev *wdev, 59752539ca8SToke Høiland-Jørgensen struct cfg80211_txq_stats *txqstats) 59852539ca8SToke Høiland-Jørgensen { 59952539ca8SToke Høiland-Jørgensen int ret; 60052539ca8SToke Høiland-Jørgensen trace_rdev_get_txq_stats(&rdev->wiphy, wdev); 60152539ca8SToke Høiland-Jørgensen ret = rdev->ops->get_txq_stats(&rdev->wiphy, wdev, txqstats); 60252539ca8SToke Høiland-Jørgensen trace_rdev_return_int(&rdev->wiphy, ret); 60352539ca8SToke Høiland-Jørgensen return ret; 60452539ca8SToke Høiland-Jørgensen } 60552539ca8SToke Høiland-Jørgensen 606e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 607e35e4d28SHila Gonen { 60814e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 609e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 61014e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 611e35e4d28SHila Gonen } 612e35e4d28SHila Gonen 613e35e4d28SHila Gonen 614e35e4d28SHila Gonen #ifdef CONFIG_NL80211_TESTMODE 615e35e4d28SHila Gonen static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 616fc73f11fSDavid Spinadel struct wireless_dev *wdev, 617e35e4d28SHila Gonen void *data, int len) 618e35e4d28SHila Gonen { 61914e8a3c4SBeni Lev int ret; 620fc73f11fSDavid Spinadel trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 621fc73f11fSDavid Spinadel ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 62214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 62314e8a3c4SBeni Lev return ret; 624e35e4d28SHila Gonen } 625e35e4d28SHila Gonen 626e35e4d28SHila Gonen static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 627e35e4d28SHila Gonen struct sk_buff *skb, 628e35e4d28SHila Gonen struct netlink_callback *cb, void *data, 629e35e4d28SHila Gonen int len) 630e35e4d28SHila Gonen { 63114e8a3c4SBeni Lev int ret; 63214e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 63314e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 63414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 63514e8a3c4SBeni Lev return ret; 636e35e4d28SHila Gonen } 637e35e4d28SHila Gonen #endif 638e35e4d28SHila Gonen 639e35e4d28SHila Gonen static inline int 640e35e4d28SHila Gonen rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 641e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 642e35e4d28SHila Gonen const struct cfg80211_bitrate_mask *mask) 643e35e4d28SHila Gonen { 64414e8a3c4SBeni Lev int ret; 64514e8a3c4SBeni Lev trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 64614e8a3c4SBeni Lev ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 64714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 64814e8a3c4SBeni Lev return ret; 649e35e4d28SHila Gonen } 650e35e4d28SHila Gonen 651e35e4d28SHila Gonen static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 652e35e4d28SHila Gonen struct net_device *netdev, int idx, 653e35e4d28SHila Gonen struct survey_info *info) 654e35e4d28SHila Gonen { 65514e8a3c4SBeni Lev int ret; 65614e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 65714e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 65814e8a3c4SBeni Lev if (ret < 0) 65914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 66014e8a3c4SBeni Lev else 66114e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 66214e8a3c4SBeni Lev return ret; 663e35e4d28SHila Gonen } 664e35e4d28SHila Gonen 665e35e4d28SHila Gonen static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 666e35e4d28SHila Gonen struct net_device *netdev, 667e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 668e35e4d28SHila Gonen { 66914e8a3c4SBeni Lev int ret; 67014e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 67114e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 67214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 67314e8a3c4SBeni Lev return ret; 674e35e4d28SHila Gonen } 675e35e4d28SHila Gonen 676e35e4d28SHila Gonen static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 677e35e4d28SHila Gonen struct net_device *netdev, 678e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 679e35e4d28SHila Gonen { 68014e8a3c4SBeni Lev int ret; 68114e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 68214e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 68314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 68414e8a3c4SBeni Lev return ret; 685e35e4d28SHila Gonen } 686e35e4d28SHila Gonen 687e35e4d28SHila Gonen static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 688e35e4d28SHila Gonen struct net_device *netdev) 689e35e4d28SHila Gonen { 69014e8a3c4SBeni Lev int ret; 69114e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 69214e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 69314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 69414e8a3c4SBeni Lev return ret; 695e35e4d28SHila Gonen } 696e35e4d28SHila Gonen 697e35e4d28SHila Gonen static inline int 698e35e4d28SHila Gonen rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 699e35e4d28SHila Gonen struct wireless_dev *wdev, 700e35e4d28SHila Gonen struct ieee80211_channel *chan, 701e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 702e35e4d28SHila Gonen { 70314e8a3c4SBeni Lev int ret; 70442d97a59SJohannes Berg trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 70514e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 70642d97a59SJohannes Berg duration, cookie); 70714e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 70814e8a3c4SBeni Lev return ret; 709e35e4d28SHila Gonen } 710e35e4d28SHila Gonen 711e35e4d28SHila Gonen static inline int 712e35e4d28SHila Gonen rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 713e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 714e35e4d28SHila Gonen { 71514e8a3c4SBeni Lev int ret; 71614e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 71714e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 71814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 71914e8a3c4SBeni Lev return ret; 720e35e4d28SHila Gonen } 721e35e4d28SHila Gonen 722e35e4d28SHila Gonen static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 723e35e4d28SHila Gonen struct wireless_dev *wdev, 724b176e629SAndrei Otcheretianski struct cfg80211_mgmt_tx_params *params, 725b176e629SAndrei Otcheretianski u64 *cookie) 726e35e4d28SHila Gonen { 72714e8a3c4SBeni Lev int ret; 728b176e629SAndrei Otcheretianski trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 729b176e629SAndrei Otcheretianski ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 73014e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 73114e8a3c4SBeni Lev return ret; 732e35e4d28SHila Gonen } 733e35e4d28SHila Gonen 7342576a9acSDenis Kenzior static inline int rdev_tx_control_port(struct cfg80211_registered_device *rdev, 7352576a9acSDenis Kenzior struct net_device *dev, 7362576a9acSDenis Kenzior const void *buf, size_t len, 737*8d74a623SJohannes Berg const u8 *dest, __be16 proto, 738*8d74a623SJohannes Berg const bool noencrypt) 7392576a9acSDenis Kenzior { 7402576a9acSDenis Kenzior int ret; 7412576a9acSDenis Kenzior trace_rdev_tx_control_port(&rdev->wiphy, dev, buf, len, 742*8d74a623SJohannes Berg dest, proto, noencrypt); 7432576a9acSDenis Kenzior ret = rdev->ops->tx_control_port(&rdev->wiphy, dev, buf, len, 744*8d74a623SJohannes Berg dest, proto, noencrypt); 7452576a9acSDenis Kenzior trace_rdev_return_int(&rdev->wiphy, ret); 7462576a9acSDenis Kenzior return ret; 7472576a9acSDenis Kenzior } 7482576a9acSDenis Kenzior 749e35e4d28SHila Gonen static inline int 750e35e4d28SHila Gonen rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 751e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 752e35e4d28SHila Gonen { 75314e8a3c4SBeni Lev int ret; 75414e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 75514e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 75614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 75714e8a3c4SBeni Lev return ret; 758e35e4d28SHila Gonen } 759e35e4d28SHila Gonen 760e35e4d28SHila Gonen static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 761e35e4d28SHila Gonen struct net_device *dev, bool enabled, 762e35e4d28SHila Gonen int timeout) 763e35e4d28SHila Gonen { 76414e8a3c4SBeni Lev int ret; 76514e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 76614e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 76714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 76814e8a3c4SBeni Lev return ret; 769e35e4d28SHila Gonen } 770e35e4d28SHila Gonen 771e35e4d28SHila Gonen static inline int 772e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 773e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 774e35e4d28SHila Gonen { 77514e8a3c4SBeni Lev int ret; 77614e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 777e35e4d28SHila Gonen rssi_hyst); 77814e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 77914e8a3c4SBeni Lev rssi_hyst); 78014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 78114e8a3c4SBeni Lev return ret; 782e35e4d28SHila Gonen } 783e35e4d28SHila Gonen 784e35e4d28SHila Gonen static inline int 7854a4b8169SAndrew Zaborowski rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev, 7864a4b8169SAndrew Zaborowski struct net_device *dev, s32 low, s32 high) 7874a4b8169SAndrew Zaborowski { 7884a4b8169SAndrew Zaborowski int ret; 7894a4b8169SAndrew Zaborowski trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high); 7904a4b8169SAndrew Zaborowski ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev, 7914a4b8169SAndrew Zaborowski low, high); 7924a4b8169SAndrew Zaborowski trace_rdev_return_int(&rdev->wiphy, ret); 7934a4b8169SAndrew Zaborowski return ret; 7944a4b8169SAndrew Zaborowski } 7954a4b8169SAndrew Zaborowski 7964a4b8169SAndrew Zaborowski static inline int 797e35e4d28SHila Gonen rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 798e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 799e35e4d28SHila Gonen { 80014e8a3c4SBeni Lev int ret; 80114e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 80214e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 803e35e4d28SHila Gonen intvl); 80414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 80514e8a3c4SBeni Lev return ret; 806e35e4d28SHila Gonen } 807e35e4d28SHila Gonen 808e35e4d28SHila Gonen static inline void 809e35e4d28SHila Gonen rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev, 810e35e4d28SHila Gonen struct wireless_dev *wdev, u16 frame_type, bool reg) 811e35e4d28SHila Gonen { 81233d8783cSJohannes Berg might_sleep(); 81333d8783cSJohannes Berg 81414e8a3c4SBeni Lev trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 81514e8a3c4SBeni Lev rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 81614e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 817e35e4d28SHila Gonen } 818e35e4d28SHila Gonen 819e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 820e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 821e35e4d28SHila Gonen { 82214e8a3c4SBeni Lev int ret; 82314e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 82414e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 82514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 82614e8a3c4SBeni Lev return ret; 827e35e4d28SHila Gonen } 828e35e4d28SHila Gonen 829e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 830e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 831e35e4d28SHila Gonen { 83214e8a3c4SBeni Lev int ret; 83314e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 83414e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 83514e8a3c4SBeni Lev if (ret) 83614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 83714e8a3c4SBeni Lev else 83814e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 83914e8a3c4SBeni Lev *rx_ant); 84014e8a3c4SBeni Lev return ret; 841e35e4d28SHila Gonen } 842e35e4d28SHila Gonen 843e35e4d28SHila Gonen static inline int 844e35e4d28SHila Gonen rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 845e35e4d28SHila Gonen struct net_device *dev, 846e35e4d28SHila Gonen struct cfg80211_sched_scan_request *request) 847e35e4d28SHila Gonen { 84814e8a3c4SBeni Lev int ret; 849ca986ad9SArend Van Spriel trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid); 85014e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 85114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 85214e8a3c4SBeni Lev return ret; 853e35e4d28SHila Gonen } 854e35e4d28SHila Gonen 855e35e4d28SHila Gonen static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 8563a3ecf1dSArend Van Spriel struct net_device *dev, u64 reqid) 857e35e4d28SHila Gonen { 85814e8a3c4SBeni Lev int ret; 8593a3ecf1dSArend Van Spriel trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid); 8603a3ecf1dSArend Van Spriel ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid); 86114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 86214e8a3c4SBeni Lev return ret; 863e35e4d28SHila Gonen } 864e35e4d28SHila Gonen 865e35e4d28SHila Gonen static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 866e35e4d28SHila Gonen struct net_device *dev, 867e35e4d28SHila Gonen struct cfg80211_gtk_rekey_data *data) 868e35e4d28SHila Gonen { 86914e8a3c4SBeni Lev int ret; 87014e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 87114e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 87214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 87314e8a3c4SBeni Lev return ret; 874e35e4d28SHila Gonen } 875e35e4d28SHila Gonen 876e35e4d28SHila Gonen static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 877e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 878e35e4d28SHila Gonen u8 action_code, u8 dialog_token, 879df942e7bSSunil Dutt Undekari u16 status_code, u32 peer_capability, 88031fa97c5SArik Nemtsov bool initiator, const u8 *buf, size_t len) 881e35e4d28SHila Gonen { 88214e8a3c4SBeni Lev int ret; 88314e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 884df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 88531fa97c5SArik Nemtsov initiator, buf, len); 88614e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 887df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 88831fa97c5SArik Nemtsov initiator, buf, len); 88914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 89014e8a3c4SBeni Lev return ret; 891e35e4d28SHila Gonen } 892e35e4d28SHila Gonen 893e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 894e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 895e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 896e35e4d28SHila Gonen { 89714e8a3c4SBeni Lev int ret; 89814e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 89914e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 90014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 90114e8a3c4SBeni Lev return ret; 902e35e4d28SHila Gonen } 903e35e4d28SHila Gonen 904e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 905e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 906e35e4d28SHila Gonen u64 *cookie) 907e35e4d28SHila Gonen { 90814e8a3c4SBeni Lev int ret; 90914e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 91014e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 91114e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 91214e8a3c4SBeni Lev return ret; 913e35e4d28SHila Gonen } 914e35e4d28SHila Gonen 915e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 916e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 917e35e4d28SHila Gonen { 91814e8a3c4SBeni Lev int ret; 91914e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 92014e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 92114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 92214e8a3c4SBeni Lev return ret; 923e35e4d28SHila Gonen } 924e35e4d28SHila Gonen 925e35e4d28SHila Gonen static inline int 926683b6d3bSJohannes Berg rdev_get_channel(struct cfg80211_registered_device *rdev, 927683b6d3bSJohannes Berg struct wireless_dev *wdev, 928683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 929e35e4d28SHila Gonen { 930683b6d3bSJohannes Berg int ret; 931683b6d3bSJohannes Berg 93214e8a3c4SBeni Lev trace_rdev_get_channel(&rdev->wiphy, wdev); 933683b6d3bSJohannes Berg ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef); 934683b6d3bSJohannes Berg trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 935683b6d3bSJohannes Berg 93614e8a3c4SBeni Lev return ret; 937e35e4d28SHila Gonen } 938e35e4d28SHila Gonen 939eeb126e9SJohannes Berg static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 940eeb126e9SJohannes Berg struct wireless_dev *wdev) 941eeb126e9SJohannes Berg { 942eeb126e9SJohannes Berg int ret; 943eeb126e9SJohannes Berg 944eeb126e9SJohannes Berg trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 945eeb126e9SJohannes Berg ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 946eeb126e9SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 947eeb126e9SJohannes Berg return ret; 948eeb126e9SJohannes Berg } 949eeb126e9SJohannes Berg 950eeb126e9SJohannes Berg static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 951eeb126e9SJohannes Berg struct wireless_dev *wdev) 952eeb126e9SJohannes Berg { 953eeb126e9SJohannes Berg trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 954eeb126e9SJohannes Berg rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 955eeb126e9SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 956eeb126e9SJohannes Berg } 95777765eafSVasanthakumar Thiagarajan 958cb3b7d87SAyala Beker static inline int rdev_start_nan(struct cfg80211_registered_device *rdev, 959cb3b7d87SAyala Beker struct wireless_dev *wdev, 960cb3b7d87SAyala Beker struct cfg80211_nan_conf *conf) 961cb3b7d87SAyala Beker { 962cb3b7d87SAyala Beker int ret; 963cb3b7d87SAyala Beker 964cb3b7d87SAyala Beker trace_rdev_start_nan(&rdev->wiphy, wdev, conf); 965cb3b7d87SAyala Beker ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf); 966cb3b7d87SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 967cb3b7d87SAyala Beker return ret; 968cb3b7d87SAyala Beker } 969cb3b7d87SAyala Beker 970cb3b7d87SAyala Beker static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev, 971cb3b7d87SAyala Beker struct wireless_dev *wdev) 972cb3b7d87SAyala Beker { 973cb3b7d87SAyala Beker trace_rdev_stop_nan(&rdev->wiphy, wdev); 974cb3b7d87SAyala Beker rdev->ops->stop_nan(&rdev->wiphy, wdev); 975cb3b7d87SAyala Beker trace_rdev_return_void(&rdev->wiphy); 976cb3b7d87SAyala Beker } 977cb3b7d87SAyala Beker 978a442b761SAyala Beker static inline int 979a442b761SAyala Beker rdev_add_nan_func(struct cfg80211_registered_device *rdev, 980a442b761SAyala Beker struct wireless_dev *wdev, 981a442b761SAyala Beker struct cfg80211_nan_func *nan_func) 982a442b761SAyala Beker { 983a442b761SAyala Beker int ret; 984a442b761SAyala Beker 985a442b761SAyala Beker trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func); 986a442b761SAyala Beker ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func); 987a442b761SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 988a442b761SAyala Beker return ret; 989a442b761SAyala Beker } 990a442b761SAyala Beker 991a442b761SAyala Beker static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev, 992a442b761SAyala Beker struct wireless_dev *wdev, u64 cookie) 993a442b761SAyala Beker { 994a442b761SAyala Beker trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie); 995a442b761SAyala Beker rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie); 996a442b761SAyala Beker trace_rdev_return_void(&rdev->wiphy); 997a442b761SAyala Beker } 998a442b761SAyala Beker 999a5a9dcf2SAyala Beker static inline int 1000a5a9dcf2SAyala Beker rdev_nan_change_conf(struct cfg80211_registered_device *rdev, 1001a5a9dcf2SAyala Beker struct wireless_dev *wdev, 1002a5a9dcf2SAyala Beker struct cfg80211_nan_conf *conf, u32 changes) 1003a5a9dcf2SAyala Beker { 1004a5a9dcf2SAyala Beker int ret; 1005a5a9dcf2SAyala Beker 1006a5a9dcf2SAyala Beker trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes); 1007a5a9dcf2SAyala Beker if (rdev->ops->nan_change_conf) 1008a5a9dcf2SAyala Beker ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf, 1009a5a9dcf2SAyala Beker changes); 1010a5a9dcf2SAyala Beker else 1011a5a9dcf2SAyala Beker ret = -ENOTSUPP; 1012a5a9dcf2SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 1013a5a9dcf2SAyala Beker return ret; 1014a5a9dcf2SAyala Beker } 1015a5a9dcf2SAyala Beker 101677765eafSVasanthakumar Thiagarajan static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 101777765eafSVasanthakumar Thiagarajan struct net_device *dev, 101877765eafSVasanthakumar Thiagarajan struct cfg80211_acl_data *params) 101977765eafSVasanthakumar Thiagarajan { 102077765eafSVasanthakumar Thiagarajan int ret; 102177765eafSVasanthakumar Thiagarajan 102277765eafSVasanthakumar Thiagarajan trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 102377765eafSVasanthakumar Thiagarajan ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 102477765eafSVasanthakumar Thiagarajan trace_rdev_return_int(&rdev->wiphy, ret); 102577765eafSVasanthakumar Thiagarajan return ret; 102677765eafSVasanthakumar Thiagarajan } 1027355199e0SJouni Malinen 1028355199e0SJouni Malinen static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 1029355199e0SJouni Malinen struct net_device *dev, 1030355199e0SJouni Malinen struct cfg80211_update_ft_ies_params *ftie) 1031355199e0SJouni Malinen { 1032355199e0SJouni Malinen int ret; 1033355199e0SJouni Malinen 1034355199e0SJouni Malinen trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 1035355199e0SJouni Malinen ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 1036355199e0SJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1037355199e0SJouni Malinen return ret; 10385de17984SArend van Spriel } 10395de17984SArend van Spriel 10405de17984SArend van Spriel static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 10415de17984SArend van Spriel struct wireless_dev *wdev, 10425de17984SArend van Spriel enum nl80211_crit_proto_id protocol, 10435de17984SArend van Spriel u16 duration) 10445de17984SArend van Spriel { 10455de17984SArend van Spriel int ret; 10465de17984SArend van Spriel 10475de17984SArend van Spriel trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 10485de17984SArend van Spriel ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 10495de17984SArend van Spriel protocol, duration); 10505de17984SArend van Spriel trace_rdev_return_int(&rdev->wiphy, ret); 10515de17984SArend van Spriel return ret; 10525de17984SArend van Spriel } 10535de17984SArend van Spriel 10545de17984SArend van Spriel static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 10555de17984SArend van Spriel struct wireless_dev *wdev) 10565de17984SArend van Spriel { 10575de17984SArend van Spriel trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 10585de17984SArend van Spriel rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 10595de17984SArend van Spriel trace_rdev_return_void(&rdev->wiphy); 1060355199e0SJouni Malinen } 1061355199e0SJouni Malinen 106216ef1fe2SSimon Wunderlich static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 106316ef1fe2SSimon Wunderlich struct net_device *dev, 106416ef1fe2SSimon Wunderlich struct cfg80211_csa_settings *params) 106516ef1fe2SSimon Wunderlich { 106616ef1fe2SSimon Wunderlich int ret; 106716ef1fe2SSimon Wunderlich 106816ef1fe2SSimon Wunderlich trace_rdev_channel_switch(&rdev->wiphy, dev, params); 106916ef1fe2SSimon Wunderlich ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 107016ef1fe2SSimon Wunderlich trace_rdev_return_int(&rdev->wiphy, ret); 107116ef1fe2SSimon Wunderlich return ret; 107216ef1fe2SSimon Wunderlich } 107316ef1fe2SSimon Wunderlich 1074fa9ffc74SKyeyoon Park static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 1075fa9ffc74SKyeyoon Park struct net_device *dev, 1076fa9ffc74SKyeyoon Park struct cfg80211_qos_map *qos_map) 1077fa9ffc74SKyeyoon Park { 1078fa9ffc74SKyeyoon Park int ret = -EOPNOTSUPP; 1079fa9ffc74SKyeyoon Park 1080fa9ffc74SKyeyoon Park if (rdev->ops->set_qos_map) { 1081fa9ffc74SKyeyoon Park trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 1082fa9ffc74SKyeyoon Park ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 1083fa9ffc74SKyeyoon Park trace_rdev_return_int(&rdev->wiphy, ret); 1084fa9ffc74SKyeyoon Park } 1085fa9ffc74SKyeyoon Park 1086fa9ffc74SKyeyoon Park return ret; 1087fa9ffc74SKyeyoon Park } 1088fa9ffc74SKyeyoon Park 1089e16821bcSJouni Malinen static inline int 1090e16821bcSJouni Malinen rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 1091e16821bcSJouni Malinen struct net_device *dev, struct cfg80211_chan_def *chandef) 1092e16821bcSJouni Malinen { 1093e16821bcSJouni Malinen int ret; 1094e16821bcSJouni Malinen 1095e16821bcSJouni Malinen trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1096e16821bcSJouni Malinen ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1097e16821bcSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1098e16821bcSJouni Malinen 1099e16821bcSJouni Malinen return ret; 1100e16821bcSJouni Malinen } 1101e16821bcSJouni Malinen 1102960d01acSJohannes Berg static inline int 1103960d01acSJohannes Berg rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 1104960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer, 1105960d01acSJohannes Berg u8 user_prio, u16 admitted_time) 1106960d01acSJohannes Berg { 1107960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1108960d01acSJohannes Berg 1109960d01acSJohannes Berg trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1110960d01acSJohannes Berg user_prio, admitted_time); 1111960d01acSJohannes Berg if (rdev->ops->add_tx_ts) 1112960d01acSJohannes Berg ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1113960d01acSJohannes Berg user_prio, admitted_time); 1114960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1115960d01acSJohannes Berg 1116960d01acSJohannes Berg return ret; 1117960d01acSJohannes Berg } 1118960d01acSJohannes Berg 1119960d01acSJohannes Berg static inline int 1120960d01acSJohannes Berg rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 1121960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer) 1122960d01acSJohannes Berg { 1123960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1124960d01acSJohannes Berg 1125960d01acSJohannes Berg trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1126960d01acSJohannes Berg if (rdev->ops->del_tx_ts) 1127960d01acSJohannes Berg ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1128960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1129960d01acSJohannes Berg 1130960d01acSJohannes Berg return ret; 1131960d01acSJohannes Berg } 1132960d01acSJohannes Berg 11331057d35eSArik Nemtsov static inline int 11341057d35eSArik Nemtsov rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev, 11351057d35eSArik Nemtsov struct net_device *dev, const u8 *addr, 11361057d35eSArik Nemtsov u8 oper_class, struct cfg80211_chan_def *chandef) 11371057d35eSArik Nemtsov { 11381057d35eSArik Nemtsov int ret; 11391057d35eSArik Nemtsov 11401057d35eSArik Nemtsov trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class, 11411057d35eSArik Nemtsov chandef); 11421057d35eSArik Nemtsov ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr, 11431057d35eSArik Nemtsov oper_class, chandef); 11441057d35eSArik Nemtsov trace_rdev_return_int(&rdev->wiphy, ret); 11451057d35eSArik Nemtsov return ret; 11461057d35eSArik Nemtsov } 11471057d35eSArik Nemtsov 11481057d35eSArik Nemtsov static inline void 11491057d35eSArik Nemtsov rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev, 11501057d35eSArik Nemtsov struct net_device *dev, const u8 *addr) 11511057d35eSArik Nemtsov { 11521057d35eSArik Nemtsov trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11531057d35eSArik Nemtsov rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11541057d35eSArik Nemtsov trace_rdev_return_void(&rdev->wiphy); 11551057d35eSArik Nemtsov } 11561057d35eSArik Nemtsov 1157a1056b1bSIlan Peer static inline int 1158a1056b1bSIlan Peer rdev_start_radar_detection(struct cfg80211_registered_device *rdev, 1159a1056b1bSIlan Peer struct net_device *dev, 1160a1056b1bSIlan Peer struct cfg80211_chan_def *chandef, 1161a1056b1bSIlan Peer u32 cac_time_ms) 1162a1056b1bSIlan Peer { 1163a1056b1bSIlan Peer int ret = -ENOTSUPP; 1164a1056b1bSIlan Peer 1165a1056b1bSIlan Peer trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef, 1166a1056b1bSIlan Peer cac_time_ms); 1167a1056b1bSIlan Peer if (rdev->ops->start_radar_detection) 1168a1056b1bSIlan Peer ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev, 1169a1056b1bSIlan Peer chandef, cac_time_ms); 1170a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1171a1056b1bSIlan Peer return ret; 1172a1056b1bSIlan Peer } 1173a1056b1bSIlan Peer 117426ec17a1SOrr Mazor static inline void 117526ec17a1SOrr Mazor rdev_end_cac(struct cfg80211_registered_device *rdev, 117626ec17a1SOrr Mazor struct net_device *dev) 117726ec17a1SOrr Mazor { 117826ec17a1SOrr Mazor trace_rdev_end_cac(&rdev->wiphy, dev); 117926ec17a1SOrr Mazor if (rdev->ops->end_cac) 118026ec17a1SOrr Mazor rdev->ops->end_cac(&rdev->wiphy, dev); 118126ec17a1SOrr Mazor trace_rdev_return_void(&rdev->wiphy); 118226ec17a1SOrr Mazor } 118326ec17a1SOrr Mazor 1184a1056b1bSIlan Peer static inline int 1185a1056b1bSIlan Peer rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, 1186a1056b1bSIlan Peer struct net_device *dev, 118757fbcce3SJohannes Berg int mcast_rate[NUM_NL80211_BANDS]) 1188a1056b1bSIlan Peer { 1189a1056b1bSIlan Peer int ret = -ENOTSUPP; 1190a1056b1bSIlan Peer 1191a1056b1bSIlan Peer trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1192a1056b1bSIlan Peer if (rdev->ops->set_mcast_rate) 1193a1056b1bSIlan Peer ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1194a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1195a1056b1bSIlan Peer return ret; 1196a1056b1bSIlan Peer } 1197a1056b1bSIlan Peer 1198a1056b1bSIlan Peer static inline int 1199a1056b1bSIlan Peer rdev_set_coalesce(struct cfg80211_registered_device *rdev, 1200a1056b1bSIlan Peer struct cfg80211_coalesce *coalesce) 1201a1056b1bSIlan Peer { 1202a1056b1bSIlan Peer int ret = -ENOTSUPP; 1203a1056b1bSIlan Peer 1204a1056b1bSIlan Peer trace_rdev_set_coalesce(&rdev->wiphy, coalesce); 1205a1056b1bSIlan Peer if (rdev->ops->set_coalesce) 1206a1056b1bSIlan Peer ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce); 1207a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1208a1056b1bSIlan Peer return ret; 1209a1056b1bSIlan Peer } 12103a00df57SAvraham Stern 12113a00df57SAvraham Stern static inline int rdev_set_pmk(struct cfg80211_registered_device *rdev, 12123a00df57SAvraham Stern struct net_device *dev, 12133a00df57SAvraham Stern struct cfg80211_pmk_conf *pmk_conf) 12143a00df57SAvraham Stern { 12153a00df57SAvraham Stern int ret = -EOPNOTSUPP; 12163a00df57SAvraham Stern 12173a00df57SAvraham Stern trace_rdev_set_pmk(&rdev->wiphy, dev, pmk_conf); 12183a00df57SAvraham Stern if (rdev->ops->set_pmk) 12193a00df57SAvraham Stern ret = rdev->ops->set_pmk(&rdev->wiphy, dev, pmk_conf); 12203a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 12213a00df57SAvraham Stern return ret; 12223a00df57SAvraham Stern } 12233a00df57SAvraham Stern 12243a00df57SAvraham Stern static inline int rdev_del_pmk(struct cfg80211_registered_device *rdev, 12253a00df57SAvraham Stern struct net_device *dev, const u8 *aa) 12263a00df57SAvraham Stern { 12273a00df57SAvraham Stern int ret = -EOPNOTSUPP; 12283a00df57SAvraham Stern 12293a00df57SAvraham Stern trace_rdev_del_pmk(&rdev->wiphy, dev, aa); 12303a00df57SAvraham Stern if (rdev->ops->del_pmk) 12313a00df57SAvraham Stern ret = rdev->ops->del_pmk(&rdev->wiphy, dev, aa); 12323a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 12333a00df57SAvraham Stern return ret; 12343a00df57SAvraham Stern } 123540cbfa90SSrinivas Dasari 123640cbfa90SSrinivas Dasari static inline int 123740cbfa90SSrinivas Dasari rdev_external_auth(struct cfg80211_registered_device *rdev, 123840cbfa90SSrinivas Dasari struct net_device *dev, 123940cbfa90SSrinivas Dasari struct cfg80211_external_auth_params *params) 124040cbfa90SSrinivas Dasari { 124140cbfa90SSrinivas Dasari int ret = -EOPNOTSUPP; 124240cbfa90SSrinivas Dasari 124340cbfa90SSrinivas Dasari trace_rdev_external_auth(&rdev->wiphy, dev, params); 124440cbfa90SSrinivas Dasari if (rdev->ops->external_auth) 124540cbfa90SSrinivas Dasari ret = rdev->ops->external_auth(&rdev->wiphy, dev, params); 124640cbfa90SSrinivas Dasari trace_rdev_return_int(&rdev->wiphy, ret); 124740cbfa90SSrinivas Dasari return ret; 124840cbfa90SSrinivas Dasari } 124940cbfa90SSrinivas Dasari 125081e54d08SPradeep Kumar Chitrapu static inline int 125181e54d08SPradeep Kumar Chitrapu rdev_get_ftm_responder_stats(struct cfg80211_registered_device *rdev, 125281e54d08SPradeep Kumar Chitrapu struct net_device *dev, 125381e54d08SPradeep Kumar Chitrapu struct cfg80211_ftm_responder_stats *ftm_stats) 125481e54d08SPradeep Kumar Chitrapu { 125581e54d08SPradeep Kumar Chitrapu int ret = -EOPNOTSUPP; 125681e54d08SPradeep Kumar Chitrapu 125781e54d08SPradeep Kumar Chitrapu trace_rdev_get_ftm_responder_stats(&rdev->wiphy, dev, ftm_stats); 125881e54d08SPradeep Kumar Chitrapu if (rdev->ops->get_ftm_responder_stats) 125981e54d08SPradeep Kumar Chitrapu ret = rdev->ops->get_ftm_responder_stats(&rdev->wiphy, dev, 126081e54d08SPradeep Kumar Chitrapu ftm_stats); 126181e54d08SPradeep Kumar Chitrapu trace_rdev_return_int(&rdev->wiphy, ret); 126281e54d08SPradeep Kumar Chitrapu return ret; 126381e54d08SPradeep Kumar Chitrapu } 126481e54d08SPradeep Kumar Chitrapu 12659bb7e0f2SJohannes Berg static inline int 12669bb7e0f2SJohannes Berg rdev_start_pmsr(struct cfg80211_registered_device *rdev, 12679bb7e0f2SJohannes Berg struct wireless_dev *wdev, 12689bb7e0f2SJohannes Berg struct cfg80211_pmsr_request *request) 12699bb7e0f2SJohannes Berg { 12709bb7e0f2SJohannes Berg int ret = -EOPNOTSUPP; 12719bb7e0f2SJohannes Berg 12729bb7e0f2SJohannes Berg trace_rdev_start_pmsr(&rdev->wiphy, wdev, request->cookie); 12739bb7e0f2SJohannes Berg if (rdev->ops->start_pmsr) 12749bb7e0f2SJohannes Berg ret = rdev->ops->start_pmsr(&rdev->wiphy, wdev, request); 12759bb7e0f2SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 12769bb7e0f2SJohannes Berg return ret; 12779bb7e0f2SJohannes Berg } 12789bb7e0f2SJohannes Berg 12799bb7e0f2SJohannes Berg static inline void 12809bb7e0f2SJohannes Berg rdev_abort_pmsr(struct cfg80211_registered_device *rdev, 12819bb7e0f2SJohannes Berg struct wireless_dev *wdev, 12829bb7e0f2SJohannes Berg struct cfg80211_pmsr_request *request) 12839bb7e0f2SJohannes Berg { 12849bb7e0f2SJohannes Berg trace_rdev_abort_pmsr(&rdev->wiphy, wdev, request->cookie); 12859bb7e0f2SJohannes Berg if (rdev->ops->abort_pmsr) 12869bb7e0f2SJohannes Berg rdev->ops->abort_pmsr(&rdev->wiphy, wdev, request); 12879bb7e0f2SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 12889bb7e0f2SJohannes Berg } 12899bb7e0f2SJohannes Berg 1290cb74e977SSunil Dutt static inline int rdev_update_owe_info(struct cfg80211_registered_device *rdev, 1291cb74e977SSunil Dutt struct net_device *dev, 1292cb74e977SSunil Dutt struct cfg80211_update_owe_info *oweinfo) 1293cb74e977SSunil Dutt { 1294cb74e977SSunil Dutt int ret = -EOPNOTSUPP; 1295cb74e977SSunil Dutt 1296cb74e977SSunil Dutt trace_rdev_update_owe_info(&rdev->wiphy, dev, oweinfo); 1297cb74e977SSunil Dutt if (rdev->ops->update_owe_info) 1298cb74e977SSunil Dutt ret = rdev->ops->update_owe_info(&rdev->wiphy, dev, oweinfo); 1299cb74e977SSunil Dutt trace_rdev_return_int(&rdev->wiphy, ret); 1300cb74e977SSunil Dutt return ret; 1301cb74e977SSunil Dutt } 1302cb74e977SSunil Dutt 13035ab92e7fSRajkumar Manoharan static inline int 13045ab92e7fSRajkumar Manoharan rdev_probe_mesh_link(struct cfg80211_registered_device *rdev, 13055ab92e7fSRajkumar Manoharan struct net_device *dev, const u8 *dest, 13065ab92e7fSRajkumar Manoharan const void *buf, size_t len) 13075ab92e7fSRajkumar Manoharan { 13085ab92e7fSRajkumar Manoharan int ret; 13095ab92e7fSRajkumar Manoharan 13105ab92e7fSRajkumar Manoharan trace_rdev_probe_mesh_link(&rdev->wiphy, dev, dest, buf, len); 13115ab92e7fSRajkumar Manoharan ret = rdev->ops->probe_mesh_link(&rdev->wiphy, dev, buf, len); 13125ab92e7fSRajkumar Manoharan trace_rdev_return_int(&rdev->wiphy, ret); 13135ab92e7fSRajkumar Manoharan return ret; 13145ab92e7fSRajkumar Manoharan } 13155ab92e7fSRajkumar Manoharan 1316e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 1317