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, 39818a986eSJohannes Berg enum nl80211_iftype type, 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, 45818a986eSJohannes Berg type, 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, 64818a986eSJohannes Berg struct vif_params *params) 65e35e4d28SHila Gonen { 6614e8a3c4SBeni Lev int ret; 6714e8a3c4SBeni Lev trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 68818a986eSJohannes Berg ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, params); 6914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 7014e8a3c4SBeni Lev return ret; 71e35e4d28SHila Gonen } 72e35e4d28SHila Gonen 73e35e4d28SHila Gonen static inline int rdev_add_key(struct cfg80211_registered_device *rdev, 74e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 75e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr, 76e35e4d28SHila Gonen struct key_params *params) 77e35e4d28SHila Gonen { 7814e8a3c4SBeni Lev int ret; 7914e8a3c4SBeni Lev trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 8014e8a3c4SBeni Lev ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise, 81e35e4d28SHila Gonen mac_addr, params); 8214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 8314e8a3c4SBeni Lev return ret; 84e35e4d28SHila Gonen } 85e35e4d28SHila Gonen 86e35e4d28SHila Gonen static inline int 87e35e4d28SHila Gonen rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev, 88e35e4d28SHila Gonen u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, 89e35e4d28SHila Gonen void (*callback)(void *cookie, struct key_params*)) 90e35e4d28SHila Gonen { 9114e8a3c4SBeni Lev int ret; 9214e8a3c4SBeni Lev trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 9314e8a3c4SBeni Lev ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise, 94e35e4d28SHila Gonen mac_addr, cookie, callback); 9514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 9614e8a3c4SBeni Lev return ret; 97e35e4d28SHila Gonen } 98e35e4d28SHila Gonen 99e35e4d28SHila Gonen static inline int rdev_del_key(struct cfg80211_registered_device *rdev, 100e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 101e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr) 102e35e4d28SHila Gonen { 10314e8a3c4SBeni Lev int ret; 10414e8a3c4SBeni Lev trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 10514e8a3c4SBeni Lev ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise, 106e35e4d28SHila Gonen mac_addr); 10714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 10814e8a3c4SBeni Lev return ret; 109e35e4d28SHila Gonen } 110e35e4d28SHila Gonen 111e35e4d28SHila Gonen static inline int 112e35e4d28SHila Gonen rdev_set_default_key(struct cfg80211_registered_device *rdev, 113e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, bool unicast, 114e35e4d28SHila Gonen bool multicast) 115e35e4d28SHila Gonen { 11614e8a3c4SBeni Lev int ret; 11714e8a3c4SBeni Lev trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index, 118e35e4d28SHila Gonen unicast, multicast); 11914e8a3c4SBeni Lev ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index, 12014e8a3c4SBeni Lev unicast, multicast); 12114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 12214e8a3c4SBeni Lev return ret; 123e35e4d28SHila Gonen } 124e35e4d28SHila Gonen 125e35e4d28SHila Gonen static inline int 126e35e4d28SHila Gonen rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev, 127e35e4d28SHila Gonen struct net_device *netdev, u8 key_index) 128e35e4d28SHila Gonen { 12914e8a3c4SBeni Lev int ret; 13014e8a3c4SBeni Lev trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index); 13114e8a3c4SBeni Lev ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, 132e35e4d28SHila Gonen key_index); 13314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 13414e8a3c4SBeni Lev return ret; 135e35e4d28SHila Gonen } 136e35e4d28SHila Gonen 137e35e4d28SHila Gonen static inline int rdev_start_ap(struct cfg80211_registered_device *rdev, 138e35e4d28SHila Gonen struct net_device *dev, 139e35e4d28SHila Gonen struct cfg80211_ap_settings *settings) 140e35e4d28SHila Gonen { 14114e8a3c4SBeni Lev int ret; 14214e8a3c4SBeni Lev trace_rdev_start_ap(&rdev->wiphy, dev, settings); 14314e8a3c4SBeni Lev ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 14414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 14514e8a3c4SBeni Lev return ret; 146e35e4d28SHila Gonen } 147e35e4d28SHila Gonen 148e35e4d28SHila Gonen static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev, 149e35e4d28SHila Gonen struct net_device *dev, 150e35e4d28SHila Gonen struct cfg80211_beacon_data *info) 151e35e4d28SHila Gonen { 15214e8a3c4SBeni Lev int ret; 15314e8a3c4SBeni Lev trace_rdev_change_beacon(&rdev->wiphy, dev, info); 15414e8a3c4SBeni Lev ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 15514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 15614e8a3c4SBeni Lev return ret; 157e35e4d28SHila Gonen } 158e35e4d28SHila Gonen 159e35e4d28SHila Gonen static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev, 160e35e4d28SHila Gonen struct net_device *dev) 161e35e4d28SHila Gonen { 16214e8a3c4SBeni Lev int ret; 16314e8a3c4SBeni Lev trace_rdev_stop_ap(&rdev->wiphy, dev); 16414e8a3c4SBeni Lev ret = rdev->ops->stop_ap(&rdev->wiphy, dev); 16514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 16614e8a3c4SBeni Lev return ret; 167e35e4d28SHila Gonen } 168e35e4d28SHila Gonen 169e35e4d28SHila Gonen static inline int rdev_add_station(struct cfg80211_registered_device *rdev, 170e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 171e35e4d28SHila Gonen struct station_parameters *params) 172e35e4d28SHila Gonen { 17314e8a3c4SBeni Lev int ret; 17414e8a3c4SBeni Lev trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 17514e8a3c4SBeni Lev ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 17614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 17714e8a3c4SBeni Lev return ret; 178e35e4d28SHila Gonen } 179e35e4d28SHila Gonen 180e35e4d28SHila Gonen static inline int rdev_del_station(struct cfg80211_registered_device *rdev, 18189c771e5SJouni Malinen struct net_device *dev, 18289c771e5SJouni Malinen struct station_del_parameters *params) 183e35e4d28SHila Gonen { 18414e8a3c4SBeni Lev int ret; 18589c771e5SJouni Malinen trace_rdev_del_station(&rdev->wiphy, dev, params); 18689c771e5SJouni Malinen ret = rdev->ops->del_station(&rdev->wiphy, dev, params); 18714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 18814e8a3c4SBeni Lev return ret; 189e35e4d28SHila Gonen } 190e35e4d28SHila Gonen 191e35e4d28SHila Gonen static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 192e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 193e35e4d28SHila Gonen struct station_parameters *params) 194e35e4d28SHila Gonen { 19514e8a3c4SBeni Lev int ret; 19614e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 19714e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 19814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 19914e8a3c4SBeni Lev return ret; 200e35e4d28SHila Gonen } 201e35e4d28SHila Gonen 202e35e4d28SHila Gonen static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 2037406353dSAntonio Quartulli struct net_device *dev, const u8 *mac, 204e35e4d28SHila Gonen struct station_info *sinfo) 205e35e4d28SHila Gonen { 20614e8a3c4SBeni Lev int ret; 20714e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 20814e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 20914e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 21014e8a3c4SBeni Lev return ret; 211e35e4d28SHila Gonen } 212e35e4d28SHila Gonen 213e35e4d28SHila Gonen static inline int rdev_dump_station(struct cfg80211_registered_device *rdev, 214e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *mac, 215e35e4d28SHila Gonen struct station_info *sinfo) 216e35e4d28SHila Gonen { 21714e8a3c4SBeni Lev int ret; 21814e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 21914e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 22014e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 22114e8a3c4SBeni Lev return ret; 222e35e4d28SHila Gonen } 223e35e4d28SHila Gonen 224e35e4d28SHila Gonen static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 225e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop) 226e35e4d28SHila Gonen { 22714e8a3c4SBeni Lev int ret; 22814e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 22914e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 23014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 23114e8a3c4SBeni Lev return ret; 232e35e4d28SHila Gonen } 233e35e4d28SHila Gonen 234e35e4d28SHila Gonen static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 235e35e4d28SHila Gonen struct net_device *dev, u8 *dst) 236e35e4d28SHila Gonen { 23714e8a3c4SBeni Lev int ret; 23814e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 23914e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 24014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 24114e8a3c4SBeni Lev return ret; 242e35e4d28SHila Gonen } 243e35e4d28SHila Gonen 244e35e4d28SHila Gonen static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 245e35e4d28SHila Gonen struct net_device *dev, u8 *dst, 246e35e4d28SHila Gonen u8 *next_hop) 247e35e4d28SHila Gonen { 24814e8a3c4SBeni Lev int ret; 24914e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 25014e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 25114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 25214e8a3c4SBeni Lev return ret; 253e35e4d28SHila Gonen } 254e35e4d28SHila Gonen 255e35e4d28SHila Gonen static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 256e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop, 257e35e4d28SHila Gonen struct mpath_info *pinfo) 258e35e4d28SHila Gonen { 25914e8a3c4SBeni Lev int ret; 26014e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 26114e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 26214e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 26314e8a3c4SBeni Lev return ret; 26414e8a3c4SBeni Lev 265e35e4d28SHila Gonen } 266e35e4d28SHila Gonen 26766be7d2bSHenning Rogge static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev, 26866be7d2bSHenning Rogge struct net_device *dev, u8 *dst, u8 *mpp, 26966be7d2bSHenning Rogge struct mpath_info *pinfo) 27066be7d2bSHenning Rogge { 27166be7d2bSHenning Rogge int ret; 27266be7d2bSHenning Rogge 27366be7d2bSHenning Rogge trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp); 27466be7d2bSHenning Rogge ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo); 27566be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 27666be7d2bSHenning Rogge return ret; 27766be7d2bSHenning Rogge } 27866be7d2bSHenning Rogge 279e35e4d28SHila Gonen static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 280e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *dst, 281e35e4d28SHila Gonen u8 *next_hop, struct mpath_info *pinfo) 282e35e4d28SHila Gonen 283e35e4d28SHila Gonen { 28414e8a3c4SBeni Lev int ret; 28514e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 28614e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 287e35e4d28SHila Gonen pinfo); 28814e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 28914e8a3c4SBeni Lev return ret; 290e35e4d28SHila Gonen } 291e35e4d28SHila Gonen 29266be7d2bSHenning Rogge static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev, 29366be7d2bSHenning Rogge struct net_device *dev, int idx, u8 *dst, 29466be7d2bSHenning Rogge u8 *mpp, struct mpath_info *pinfo) 29566be7d2bSHenning Rogge 29666be7d2bSHenning Rogge { 29766be7d2bSHenning Rogge int ret; 29866be7d2bSHenning Rogge 29966be7d2bSHenning Rogge trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp); 30066be7d2bSHenning Rogge ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo); 30166be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 30266be7d2bSHenning Rogge return ret; 30366be7d2bSHenning Rogge } 30466be7d2bSHenning Rogge 305e35e4d28SHila Gonen static inline int 306e35e4d28SHila Gonen rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 307e35e4d28SHila Gonen struct net_device *dev, struct mesh_config *conf) 308e35e4d28SHila Gonen { 30914e8a3c4SBeni Lev int ret; 31014e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 31114e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 31214e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 31314e8a3c4SBeni Lev return ret; 314e35e4d28SHila Gonen } 315e35e4d28SHila Gonen 316e35e4d28SHila Gonen static inline int 317e35e4d28SHila Gonen rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 318e35e4d28SHila Gonen struct net_device *dev, u32 mask, 319e35e4d28SHila Gonen const struct mesh_config *nconf) 320e35e4d28SHila Gonen { 32114e8a3c4SBeni Lev int ret; 32214e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 32314e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 32414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 32514e8a3c4SBeni Lev return ret; 326e35e4d28SHila Gonen } 327e35e4d28SHila Gonen 328e35e4d28SHila Gonen static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 329e35e4d28SHila Gonen struct net_device *dev, 330e35e4d28SHila Gonen const struct mesh_config *conf, 331e35e4d28SHila Gonen const struct mesh_setup *setup) 332e35e4d28SHila Gonen { 33314e8a3c4SBeni Lev int ret; 33414e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 33514e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 33614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 33714e8a3c4SBeni Lev return ret; 338e35e4d28SHila Gonen } 339e35e4d28SHila Gonen 340e35e4d28SHila Gonen 341e35e4d28SHila Gonen static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 342e35e4d28SHila Gonen struct net_device *dev) 343e35e4d28SHila Gonen { 34414e8a3c4SBeni Lev int ret; 34514e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 34614e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 34714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 34814e8a3c4SBeni Lev return ret; 349e35e4d28SHila Gonen } 350e35e4d28SHila Gonen 3516e0bd6c3SRostislav Lisovy static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev, 3526e0bd6c3SRostislav Lisovy struct net_device *dev, 3536e0bd6c3SRostislav Lisovy struct ocb_setup *setup) 3546e0bd6c3SRostislav Lisovy { 3556e0bd6c3SRostislav Lisovy int ret; 3566e0bd6c3SRostislav Lisovy trace_rdev_join_ocb(&rdev->wiphy, dev, setup); 3576e0bd6c3SRostislav Lisovy ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup); 3586e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3596e0bd6c3SRostislav Lisovy return ret; 3606e0bd6c3SRostislav Lisovy } 3616e0bd6c3SRostislav Lisovy 3626e0bd6c3SRostislav Lisovy static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev, 3636e0bd6c3SRostislav Lisovy struct net_device *dev) 3646e0bd6c3SRostislav Lisovy { 3656e0bd6c3SRostislav Lisovy int ret; 3666e0bd6c3SRostislav Lisovy trace_rdev_leave_ocb(&rdev->wiphy, dev); 3676e0bd6c3SRostislav Lisovy ret = rdev->ops->leave_ocb(&rdev->wiphy, dev); 3686e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3696e0bd6c3SRostislav Lisovy return ret; 3706e0bd6c3SRostislav Lisovy } 3716e0bd6c3SRostislav Lisovy 372e35e4d28SHila Gonen static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 373e35e4d28SHila Gonen struct net_device *dev, 374e35e4d28SHila Gonen struct bss_parameters *params) 375e35e4d28SHila Gonen 376e35e4d28SHila Gonen { 37714e8a3c4SBeni Lev int ret; 37814e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 37914e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 38014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 38114e8a3c4SBeni Lev return ret; 382e35e4d28SHila Gonen } 383e35e4d28SHila Gonen 384e35e4d28SHila Gonen static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 385e35e4d28SHila Gonen struct net_device *dev, 386e35e4d28SHila Gonen struct ieee80211_txq_params *params) 387e35e4d28SHila Gonen 388e35e4d28SHila Gonen { 38914e8a3c4SBeni Lev int ret; 39014e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 39114e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 39214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 39314e8a3c4SBeni Lev return ret; 394e35e4d28SHila Gonen } 395e35e4d28SHila Gonen 396e35e4d28SHila Gonen static inline int 397e35e4d28SHila Gonen rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 398e35e4d28SHila Gonen struct net_device *dev, 399e35e4d28SHila Gonen struct ieee80211_channel *chan) 400e35e4d28SHila Gonen { 40114e8a3c4SBeni Lev int ret; 40214e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 40314e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 40414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 40514e8a3c4SBeni Lev return ret; 406e35e4d28SHila Gonen } 407e35e4d28SHila Gonen 408e35e4d28SHila Gonen static inline int 409e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 410683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 411e35e4d28SHila Gonen { 41214e8a3c4SBeni Lev int ret; 413683b6d3bSJohannes Berg trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 414683b6d3bSJohannes Berg ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 41514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 41614e8a3c4SBeni Lev return ret; 417e35e4d28SHila Gonen } 418e35e4d28SHila Gonen 419e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 420e35e4d28SHila Gonen struct cfg80211_scan_request *request) 421e35e4d28SHila Gonen { 42214e8a3c4SBeni Lev int ret; 42314e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 42414e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 42514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 42614e8a3c4SBeni Lev return ret; 427e35e4d28SHila Gonen } 428e35e4d28SHila Gonen 42991d3ab46SVidyullatha Kanchanapally static inline void rdev_abort_scan(struct cfg80211_registered_device *rdev, 43091d3ab46SVidyullatha Kanchanapally struct wireless_dev *wdev) 43191d3ab46SVidyullatha Kanchanapally { 43291d3ab46SVidyullatha Kanchanapally trace_rdev_abort_scan(&rdev->wiphy, wdev); 43391d3ab46SVidyullatha Kanchanapally rdev->ops->abort_scan(&rdev->wiphy, wdev); 43491d3ab46SVidyullatha Kanchanapally trace_rdev_return_void(&rdev->wiphy); 43591d3ab46SVidyullatha Kanchanapally } 43691d3ab46SVidyullatha Kanchanapally 437e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 438e35e4d28SHila Gonen struct net_device *dev, 439e35e4d28SHila Gonen struct cfg80211_auth_request *req) 440e35e4d28SHila Gonen { 44114e8a3c4SBeni Lev int ret; 44214e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 44314e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 44414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 44514e8a3c4SBeni Lev return ret; 446e35e4d28SHila Gonen } 447e35e4d28SHila Gonen 448e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 449e35e4d28SHila Gonen struct net_device *dev, 450e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 451e35e4d28SHila Gonen { 45214e8a3c4SBeni Lev int ret; 45314e8a3c4SBeni Lev trace_rdev_assoc(&rdev->wiphy, dev, req); 45414e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 45514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 45614e8a3c4SBeni Lev return ret; 457e35e4d28SHila Gonen } 458e35e4d28SHila Gonen 459e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 460e35e4d28SHila Gonen struct net_device *dev, 461e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 462e35e4d28SHila Gonen { 46314e8a3c4SBeni Lev int ret; 46414e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 46514e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 46614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 46714e8a3c4SBeni Lev return ret; 468e35e4d28SHila Gonen } 469e35e4d28SHila Gonen 470e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 471e35e4d28SHila Gonen struct net_device *dev, 472e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 473e35e4d28SHila Gonen { 47414e8a3c4SBeni Lev int ret; 47514e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 47614e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 47714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 47814e8a3c4SBeni Lev return ret; 479e35e4d28SHila Gonen } 480e35e4d28SHila Gonen 481e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 482e35e4d28SHila Gonen struct net_device *dev, 483e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 484e35e4d28SHila Gonen { 48514e8a3c4SBeni Lev int ret; 48614e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 48714e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 48814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 48914e8a3c4SBeni Lev return ret; 490e35e4d28SHila Gonen } 491e35e4d28SHila Gonen 492088e8df8Svamsi krishna static inline int 493088e8df8Svamsi krishna rdev_update_connect_params(struct cfg80211_registered_device *rdev, 494088e8df8Svamsi krishna struct net_device *dev, 495088e8df8Svamsi krishna struct cfg80211_connect_params *sme, u32 changed) 496088e8df8Svamsi krishna { 497088e8df8Svamsi krishna int ret; 498088e8df8Svamsi krishna trace_rdev_update_connect_params(&rdev->wiphy, dev, sme, changed); 499088e8df8Svamsi krishna ret = rdev->ops->update_connect_params(&rdev->wiphy, dev, sme, changed); 500088e8df8Svamsi krishna trace_rdev_return_int(&rdev->wiphy, ret); 501088e8df8Svamsi krishna return ret; 502088e8df8Svamsi krishna } 503088e8df8Svamsi krishna 504e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 505e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 506e35e4d28SHila Gonen { 50714e8a3c4SBeni Lev int ret; 50814e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 50914e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 51014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 51114e8a3c4SBeni Lev return ret; 512e35e4d28SHila Gonen } 513e35e4d28SHila Gonen 514e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 515e35e4d28SHila Gonen struct net_device *dev, 516e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 517e35e4d28SHila Gonen { 51814e8a3c4SBeni Lev int ret; 51914e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 52014e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 52114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 52214e8a3c4SBeni Lev return ret; 523e35e4d28SHila Gonen } 524e35e4d28SHila Gonen 525e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 526e35e4d28SHila Gonen struct net_device *dev) 527e35e4d28SHila Gonen { 52814e8a3c4SBeni Lev int ret; 52914e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 53014e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 53114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 53214e8a3c4SBeni Lev return ret; 533e35e4d28SHila Gonen } 534e35e4d28SHila Gonen 535e35e4d28SHila Gonen static inline int 536e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 537e35e4d28SHila Gonen { 53814e8a3c4SBeni Lev int ret; 53914e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 54014e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 54114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 54214e8a3c4SBeni Lev return ret; 543e35e4d28SHila Gonen } 544e35e4d28SHila Gonen 545e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 546c8442118SJohannes Berg struct wireless_dev *wdev, 547e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 548e35e4d28SHila Gonen { 54914e8a3c4SBeni Lev int ret; 550c8442118SJohannes Berg trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 551c8442118SJohannes Berg ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 55214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 55314e8a3c4SBeni Lev return ret; 554e35e4d28SHila Gonen } 555e35e4d28SHila Gonen 556e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 557c8442118SJohannes Berg struct wireless_dev *wdev, int *dbm) 558e35e4d28SHila Gonen { 55914e8a3c4SBeni Lev int ret; 560c8442118SJohannes Berg trace_rdev_get_tx_power(&rdev->wiphy, wdev); 561c8442118SJohannes Berg ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 56214e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 56314e8a3c4SBeni Lev return ret; 564e35e4d28SHila Gonen } 565e35e4d28SHila Gonen 566e35e4d28SHila Gonen static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev, 567e35e4d28SHila Gonen struct net_device *dev, const u8 *addr) 568e35e4d28SHila Gonen { 56914e8a3c4SBeni Lev int ret; 57014e8a3c4SBeni Lev trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr); 57114e8a3c4SBeni Lev ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr); 57214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 57314e8a3c4SBeni Lev return ret; 574e35e4d28SHila Gonen } 575e35e4d28SHila Gonen 576ce0ce13aSMichael Braun static inline int 577ce0ce13aSMichael Braun rdev_set_multicast_to_unicast(struct cfg80211_registered_device *rdev, 578ce0ce13aSMichael Braun struct net_device *dev, 579ce0ce13aSMichael Braun const bool enabled) 580ce0ce13aSMichael Braun { 581ce0ce13aSMichael Braun int ret; 582ce0ce13aSMichael Braun trace_rdev_set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 583ce0ce13aSMichael Braun ret = rdev->ops->set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 584ce0ce13aSMichael Braun trace_rdev_return_int(&rdev->wiphy, ret); 585ce0ce13aSMichael Braun return ret; 586ce0ce13aSMichael Braun } 587ce0ce13aSMichael Braun 588e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 589e35e4d28SHila Gonen { 59014e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 591e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 59214e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 593e35e4d28SHila Gonen } 594e35e4d28SHila Gonen 595e35e4d28SHila Gonen 596e35e4d28SHila Gonen #ifdef CONFIG_NL80211_TESTMODE 597e35e4d28SHila Gonen static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 598fc73f11fSDavid Spinadel struct wireless_dev *wdev, 599e35e4d28SHila Gonen void *data, int len) 600e35e4d28SHila Gonen { 60114e8a3c4SBeni Lev int ret; 602fc73f11fSDavid Spinadel trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 603fc73f11fSDavid Spinadel ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 60414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 60514e8a3c4SBeni Lev return ret; 606e35e4d28SHila Gonen } 607e35e4d28SHila Gonen 608e35e4d28SHila Gonen static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 609e35e4d28SHila Gonen struct sk_buff *skb, 610e35e4d28SHila Gonen struct netlink_callback *cb, void *data, 611e35e4d28SHila Gonen int len) 612e35e4d28SHila Gonen { 61314e8a3c4SBeni Lev int ret; 61414e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 61514e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 61614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 61714e8a3c4SBeni Lev return ret; 618e35e4d28SHila Gonen } 619e35e4d28SHila Gonen #endif 620e35e4d28SHila Gonen 621e35e4d28SHila Gonen static inline int 622e35e4d28SHila Gonen rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 623e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 624e35e4d28SHila Gonen const struct cfg80211_bitrate_mask *mask) 625e35e4d28SHila Gonen { 62614e8a3c4SBeni Lev int ret; 62714e8a3c4SBeni Lev trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 62814e8a3c4SBeni Lev ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 62914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 63014e8a3c4SBeni Lev return ret; 631e35e4d28SHila Gonen } 632e35e4d28SHila Gonen 633e35e4d28SHila Gonen static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 634e35e4d28SHila Gonen struct net_device *netdev, int idx, 635e35e4d28SHila Gonen struct survey_info *info) 636e35e4d28SHila Gonen { 63714e8a3c4SBeni Lev int ret; 63814e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 63914e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 64014e8a3c4SBeni Lev if (ret < 0) 64114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 64214e8a3c4SBeni Lev else 64314e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 64414e8a3c4SBeni Lev return ret; 645e35e4d28SHila Gonen } 646e35e4d28SHila Gonen 647e35e4d28SHila Gonen static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 648e35e4d28SHila Gonen struct net_device *netdev, 649e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 650e35e4d28SHila Gonen { 65114e8a3c4SBeni Lev int ret; 65214e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 65314e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 65414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 65514e8a3c4SBeni Lev return ret; 656e35e4d28SHila Gonen } 657e35e4d28SHila Gonen 658e35e4d28SHila Gonen static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 659e35e4d28SHila Gonen struct net_device *netdev, 660e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 661e35e4d28SHila Gonen { 66214e8a3c4SBeni Lev int ret; 66314e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 66414e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 66514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 66614e8a3c4SBeni Lev return ret; 667e35e4d28SHila Gonen } 668e35e4d28SHila Gonen 669e35e4d28SHila Gonen static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 670e35e4d28SHila Gonen struct net_device *netdev) 671e35e4d28SHila Gonen { 67214e8a3c4SBeni Lev int ret; 67314e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 67414e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 67514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 67614e8a3c4SBeni Lev return ret; 677e35e4d28SHila Gonen } 678e35e4d28SHila Gonen 679e35e4d28SHila Gonen static inline int 680e35e4d28SHila Gonen rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 681e35e4d28SHila Gonen struct wireless_dev *wdev, 682e35e4d28SHila Gonen struct ieee80211_channel *chan, 683e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 684e35e4d28SHila Gonen { 68514e8a3c4SBeni Lev int ret; 68642d97a59SJohannes Berg trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 68714e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 68842d97a59SJohannes Berg duration, 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_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 695e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 696e35e4d28SHila Gonen { 69714e8a3c4SBeni Lev int ret; 69814e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 69914e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&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_mgmt_tx(struct cfg80211_registered_device *rdev, 705e35e4d28SHila Gonen struct wireless_dev *wdev, 706b176e629SAndrei Otcheretianski struct cfg80211_mgmt_tx_params *params, 707b176e629SAndrei Otcheretianski u64 *cookie) 708e35e4d28SHila Gonen { 70914e8a3c4SBeni Lev int ret; 710b176e629SAndrei Otcheretianski trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 711b176e629SAndrei Otcheretianski ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 71214e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 71314e8a3c4SBeni Lev return ret; 714e35e4d28SHila Gonen } 715e35e4d28SHila Gonen 716e35e4d28SHila Gonen static inline int 717e35e4d28SHila Gonen rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 718e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 719e35e4d28SHila Gonen { 72014e8a3c4SBeni Lev int ret; 72114e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 72214e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 72314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 72414e8a3c4SBeni Lev return ret; 725e35e4d28SHila Gonen } 726e35e4d28SHila Gonen 727e35e4d28SHila Gonen static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 728e35e4d28SHila Gonen struct net_device *dev, bool enabled, 729e35e4d28SHila Gonen int timeout) 730e35e4d28SHila Gonen { 73114e8a3c4SBeni Lev int ret; 73214e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 73314e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 73414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 73514e8a3c4SBeni Lev return ret; 736e35e4d28SHila Gonen } 737e35e4d28SHila Gonen 738e35e4d28SHila Gonen static inline int 739e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 740e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 741e35e4d28SHila Gonen { 74214e8a3c4SBeni Lev int ret; 74314e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 744e35e4d28SHila Gonen rssi_hyst); 74514e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 74614e8a3c4SBeni Lev rssi_hyst); 74714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 74814e8a3c4SBeni Lev return ret; 749e35e4d28SHila Gonen } 750e35e4d28SHila Gonen 751e35e4d28SHila Gonen static inline int 7524a4b8169SAndrew Zaborowski rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev, 7534a4b8169SAndrew Zaborowski struct net_device *dev, s32 low, s32 high) 7544a4b8169SAndrew Zaborowski { 7554a4b8169SAndrew Zaborowski int ret; 7564a4b8169SAndrew Zaborowski trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high); 7574a4b8169SAndrew Zaborowski ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev, 7584a4b8169SAndrew Zaborowski low, high); 7594a4b8169SAndrew Zaborowski trace_rdev_return_int(&rdev->wiphy, ret); 7604a4b8169SAndrew Zaborowski return ret; 7614a4b8169SAndrew Zaborowski } 7624a4b8169SAndrew Zaborowski 7634a4b8169SAndrew Zaborowski static inline int 764e35e4d28SHila Gonen rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 765e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 766e35e4d28SHila Gonen { 76714e8a3c4SBeni Lev int ret; 76814e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 76914e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 770e35e4d28SHila Gonen intvl); 77114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 77214e8a3c4SBeni Lev return ret; 773e35e4d28SHila Gonen } 774e35e4d28SHila Gonen 775e35e4d28SHila Gonen static inline void 776e35e4d28SHila Gonen rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev, 777e35e4d28SHila Gonen struct wireless_dev *wdev, u16 frame_type, bool reg) 778e35e4d28SHila Gonen { 77933d8783cSJohannes Berg might_sleep(); 78033d8783cSJohannes Berg 78114e8a3c4SBeni Lev trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 78214e8a3c4SBeni Lev rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 78314e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 784e35e4d28SHila Gonen } 785e35e4d28SHila Gonen 786e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 787e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 788e35e4d28SHila Gonen { 78914e8a3c4SBeni Lev int ret; 79014e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 79114e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 79214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 79314e8a3c4SBeni Lev return ret; 794e35e4d28SHila Gonen } 795e35e4d28SHila Gonen 796e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 797e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 798e35e4d28SHila Gonen { 79914e8a3c4SBeni Lev int ret; 80014e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 80114e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 80214e8a3c4SBeni Lev if (ret) 80314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 80414e8a3c4SBeni Lev else 80514e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 80614e8a3c4SBeni Lev *rx_ant); 80714e8a3c4SBeni Lev return ret; 808e35e4d28SHila Gonen } 809e35e4d28SHila Gonen 810e35e4d28SHila Gonen static inline int 811e35e4d28SHila Gonen rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 812e35e4d28SHila Gonen struct net_device *dev, 813e35e4d28SHila Gonen struct cfg80211_sched_scan_request *request) 814e35e4d28SHila Gonen { 81514e8a3c4SBeni Lev int ret; 816ca986ad9SArend Van Spriel trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid); 81714e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 81814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 81914e8a3c4SBeni Lev return ret; 820e35e4d28SHila Gonen } 821e35e4d28SHila Gonen 822e35e4d28SHila Gonen static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 8233a3ecf1dSArend Van Spriel struct net_device *dev, u64 reqid) 824e35e4d28SHila Gonen { 82514e8a3c4SBeni Lev int ret; 8263a3ecf1dSArend Van Spriel trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid); 8273a3ecf1dSArend Van Spriel ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid); 82814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 82914e8a3c4SBeni Lev return ret; 830e35e4d28SHila Gonen } 831e35e4d28SHila Gonen 832e35e4d28SHila Gonen static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 833e35e4d28SHila Gonen struct net_device *dev, 834e35e4d28SHila Gonen struct cfg80211_gtk_rekey_data *data) 835e35e4d28SHila Gonen { 83614e8a3c4SBeni Lev int ret; 83714e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 83814e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 83914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 84014e8a3c4SBeni Lev return ret; 841e35e4d28SHila Gonen } 842e35e4d28SHila Gonen 843e35e4d28SHila Gonen static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 844e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 845e35e4d28SHila Gonen u8 action_code, u8 dialog_token, 846df942e7bSSunil Dutt Undekari u16 status_code, u32 peer_capability, 84731fa97c5SArik Nemtsov bool initiator, const u8 *buf, size_t len) 848e35e4d28SHila Gonen { 84914e8a3c4SBeni Lev int ret; 85014e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 851df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 85231fa97c5SArik Nemtsov initiator, buf, len); 85314e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 854df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 85531fa97c5SArik Nemtsov initiator, buf, len); 85614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 85714e8a3c4SBeni Lev return ret; 858e35e4d28SHila Gonen } 859e35e4d28SHila Gonen 860e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 861e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 862e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 863e35e4d28SHila Gonen { 86414e8a3c4SBeni Lev int ret; 86514e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 86614e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 86714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 86814e8a3c4SBeni Lev return ret; 869e35e4d28SHila Gonen } 870e35e4d28SHila Gonen 871e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 872e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 873e35e4d28SHila Gonen u64 *cookie) 874e35e4d28SHila Gonen { 87514e8a3c4SBeni Lev int ret; 87614e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 87714e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 87814e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 87914e8a3c4SBeni Lev return ret; 880e35e4d28SHila Gonen } 881e35e4d28SHila Gonen 882e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 883e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 884e35e4d28SHila Gonen { 88514e8a3c4SBeni Lev int ret; 88614e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 88714e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 88814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 88914e8a3c4SBeni Lev return ret; 890e35e4d28SHila Gonen } 891e35e4d28SHila Gonen 892e35e4d28SHila Gonen static inline int 893683b6d3bSJohannes Berg rdev_get_channel(struct cfg80211_registered_device *rdev, 894683b6d3bSJohannes Berg struct wireless_dev *wdev, 895683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 896e35e4d28SHila Gonen { 897683b6d3bSJohannes Berg int ret; 898683b6d3bSJohannes Berg 89914e8a3c4SBeni Lev trace_rdev_get_channel(&rdev->wiphy, wdev); 900683b6d3bSJohannes Berg ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef); 901683b6d3bSJohannes Berg trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 902683b6d3bSJohannes Berg 90314e8a3c4SBeni Lev return ret; 904e35e4d28SHila Gonen } 905e35e4d28SHila Gonen 906eeb126e9SJohannes Berg static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 907eeb126e9SJohannes Berg struct wireless_dev *wdev) 908eeb126e9SJohannes Berg { 909eeb126e9SJohannes Berg int ret; 910eeb126e9SJohannes Berg 911eeb126e9SJohannes Berg trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 912eeb126e9SJohannes Berg ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 913eeb126e9SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 914eeb126e9SJohannes Berg return ret; 915eeb126e9SJohannes Berg } 916eeb126e9SJohannes Berg 917eeb126e9SJohannes Berg static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 918eeb126e9SJohannes Berg struct wireless_dev *wdev) 919eeb126e9SJohannes Berg { 920eeb126e9SJohannes Berg trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 921eeb126e9SJohannes Berg rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 922eeb126e9SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 923eeb126e9SJohannes Berg } 92477765eafSVasanthakumar Thiagarajan 925cb3b7d87SAyala Beker static inline int rdev_start_nan(struct cfg80211_registered_device *rdev, 926cb3b7d87SAyala Beker struct wireless_dev *wdev, 927cb3b7d87SAyala Beker struct cfg80211_nan_conf *conf) 928cb3b7d87SAyala Beker { 929cb3b7d87SAyala Beker int ret; 930cb3b7d87SAyala Beker 931cb3b7d87SAyala Beker trace_rdev_start_nan(&rdev->wiphy, wdev, conf); 932cb3b7d87SAyala Beker ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf); 933cb3b7d87SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 934cb3b7d87SAyala Beker return ret; 935cb3b7d87SAyala Beker } 936cb3b7d87SAyala Beker 937cb3b7d87SAyala Beker static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev, 938cb3b7d87SAyala Beker struct wireless_dev *wdev) 939cb3b7d87SAyala Beker { 940cb3b7d87SAyala Beker trace_rdev_stop_nan(&rdev->wiphy, wdev); 941cb3b7d87SAyala Beker rdev->ops->stop_nan(&rdev->wiphy, wdev); 942cb3b7d87SAyala Beker trace_rdev_return_void(&rdev->wiphy); 943cb3b7d87SAyala Beker } 944cb3b7d87SAyala Beker 945a442b761SAyala Beker static inline int 946a442b761SAyala Beker rdev_add_nan_func(struct cfg80211_registered_device *rdev, 947a442b761SAyala Beker struct wireless_dev *wdev, 948a442b761SAyala Beker struct cfg80211_nan_func *nan_func) 949a442b761SAyala Beker { 950a442b761SAyala Beker int ret; 951a442b761SAyala Beker 952a442b761SAyala Beker trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func); 953a442b761SAyala Beker ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func); 954a442b761SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 955a442b761SAyala Beker return ret; 956a442b761SAyala Beker } 957a442b761SAyala Beker 958a442b761SAyala Beker static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev, 959a442b761SAyala Beker struct wireless_dev *wdev, u64 cookie) 960a442b761SAyala Beker { 961a442b761SAyala Beker trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie); 962a442b761SAyala Beker rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie); 963a442b761SAyala Beker trace_rdev_return_void(&rdev->wiphy); 964a442b761SAyala Beker } 965a442b761SAyala Beker 966a5a9dcf2SAyala Beker static inline int 967a5a9dcf2SAyala Beker rdev_nan_change_conf(struct cfg80211_registered_device *rdev, 968a5a9dcf2SAyala Beker struct wireless_dev *wdev, 969a5a9dcf2SAyala Beker struct cfg80211_nan_conf *conf, u32 changes) 970a5a9dcf2SAyala Beker { 971a5a9dcf2SAyala Beker int ret; 972a5a9dcf2SAyala Beker 973a5a9dcf2SAyala Beker trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes); 974a5a9dcf2SAyala Beker if (rdev->ops->nan_change_conf) 975a5a9dcf2SAyala Beker ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf, 976a5a9dcf2SAyala Beker changes); 977a5a9dcf2SAyala Beker else 978a5a9dcf2SAyala Beker ret = -ENOTSUPP; 979a5a9dcf2SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 980a5a9dcf2SAyala Beker return ret; 981a5a9dcf2SAyala Beker } 982a5a9dcf2SAyala Beker 98377765eafSVasanthakumar Thiagarajan static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 98477765eafSVasanthakumar Thiagarajan struct net_device *dev, 98577765eafSVasanthakumar Thiagarajan struct cfg80211_acl_data *params) 98677765eafSVasanthakumar Thiagarajan { 98777765eafSVasanthakumar Thiagarajan int ret; 98877765eafSVasanthakumar Thiagarajan 98977765eafSVasanthakumar Thiagarajan trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 99077765eafSVasanthakumar Thiagarajan ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 99177765eafSVasanthakumar Thiagarajan trace_rdev_return_int(&rdev->wiphy, ret); 99277765eafSVasanthakumar Thiagarajan return ret; 99377765eafSVasanthakumar Thiagarajan } 994355199e0SJouni Malinen 995355199e0SJouni Malinen static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 996355199e0SJouni Malinen struct net_device *dev, 997355199e0SJouni Malinen struct cfg80211_update_ft_ies_params *ftie) 998355199e0SJouni Malinen { 999355199e0SJouni Malinen int ret; 1000355199e0SJouni Malinen 1001355199e0SJouni Malinen trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 1002355199e0SJouni Malinen ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 1003355199e0SJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1004355199e0SJouni Malinen return ret; 10055de17984SArend van Spriel } 10065de17984SArend van Spriel 10075de17984SArend van Spriel static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 10085de17984SArend van Spriel struct wireless_dev *wdev, 10095de17984SArend van Spriel enum nl80211_crit_proto_id protocol, 10105de17984SArend van Spriel u16 duration) 10115de17984SArend van Spriel { 10125de17984SArend van Spriel int ret; 10135de17984SArend van Spriel 10145de17984SArend van Spriel trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 10155de17984SArend van Spriel ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 10165de17984SArend van Spriel protocol, duration); 10175de17984SArend van Spriel trace_rdev_return_int(&rdev->wiphy, ret); 10185de17984SArend van Spriel return ret; 10195de17984SArend van Spriel } 10205de17984SArend van Spriel 10215de17984SArend van Spriel static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 10225de17984SArend van Spriel struct wireless_dev *wdev) 10235de17984SArend van Spriel { 10245de17984SArend van Spriel trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 10255de17984SArend van Spriel rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 10265de17984SArend van Spriel trace_rdev_return_void(&rdev->wiphy); 1027355199e0SJouni Malinen } 1028355199e0SJouni Malinen 102916ef1fe2SSimon Wunderlich static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 103016ef1fe2SSimon Wunderlich struct net_device *dev, 103116ef1fe2SSimon Wunderlich struct cfg80211_csa_settings *params) 103216ef1fe2SSimon Wunderlich { 103316ef1fe2SSimon Wunderlich int ret; 103416ef1fe2SSimon Wunderlich 103516ef1fe2SSimon Wunderlich trace_rdev_channel_switch(&rdev->wiphy, dev, params); 103616ef1fe2SSimon Wunderlich ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 103716ef1fe2SSimon Wunderlich trace_rdev_return_int(&rdev->wiphy, ret); 103816ef1fe2SSimon Wunderlich return ret; 103916ef1fe2SSimon Wunderlich } 104016ef1fe2SSimon Wunderlich 1041fa9ffc74SKyeyoon Park static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 1042fa9ffc74SKyeyoon Park struct net_device *dev, 1043fa9ffc74SKyeyoon Park struct cfg80211_qos_map *qos_map) 1044fa9ffc74SKyeyoon Park { 1045fa9ffc74SKyeyoon Park int ret = -EOPNOTSUPP; 1046fa9ffc74SKyeyoon Park 1047fa9ffc74SKyeyoon Park if (rdev->ops->set_qos_map) { 1048fa9ffc74SKyeyoon Park trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 1049fa9ffc74SKyeyoon Park ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 1050fa9ffc74SKyeyoon Park trace_rdev_return_int(&rdev->wiphy, ret); 1051fa9ffc74SKyeyoon Park } 1052fa9ffc74SKyeyoon Park 1053fa9ffc74SKyeyoon Park return ret; 1054fa9ffc74SKyeyoon Park } 1055fa9ffc74SKyeyoon Park 1056e16821bcSJouni Malinen static inline int 1057e16821bcSJouni Malinen rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 1058e16821bcSJouni Malinen struct net_device *dev, struct cfg80211_chan_def *chandef) 1059e16821bcSJouni Malinen { 1060e16821bcSJouni Malinen int ret; 1061e16821bcSJouni Malinen 1062e16821bcSJouni Malinen trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1063e16821bcSJouni Malinen ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1064e16821bcSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1065e16821bcSJouni Malinen 1066e16821bcSJouni Malinen return ret; 1067e16821bcSJouni Malinen } 1068e16821bcSJouni Malinen 1069960d01acSJohannes Berg static inline int 1070960d01acSJohannes Berg rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 1071960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer, 1072960d01acSJohannes Berg u8 user_prio, u16 admitted_time) 1073960d01acSJohannes Berg { 1074960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1075960d01acSJohannes Berg 1076960d01acSJohannes Berg trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1077960d01acSJohannes Berg user_prio, admitted_time); 1078960d01acSJohannes Berg if (rdev->ops->add_tx_ts) 1079960d01acSJohannes Berg ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1080960d01acSJohannes Berg user_prio, admitted_time); 1081960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1082960d01acSJohannes Berg 1083960d01acSJohannes Berg return ret; 1084960d01acSJohannes Berg } 1085960d01acSJohannes Berg 1086960d01acSJohannes Berg static inline int 1087960d01acSJohannes Berg rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 1088960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer) 1089960d01acSJohannes Berg { 1090960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1091960d01acSJohannes Berg 1092960d01acSJohannes Berg trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1093960d01acSJohannes Berg if (rdev->ops->del_tx_ts) 1094960d01acSJohannes Berg ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1095960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1096960d01acSJohannes Berg 1097960d01acSJohannes Berg return ret; 1098960d01acSJohannes Berg } 1099960d01acSJohannes Berg 11001057d35eSArik Nemtsov static inline int 11011057d35eSArik Nemtsov rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev, 11021057d35eSArik Nemtsov struct net_device *dev, const u8 *addr, 11031057d35eSArik Nemtsov u8 oper_class, struct cfg80211_chan_def *chandef) 11041057d35eSArik Nemtsov { 11051057d35eSArik Nemtsov int ret; 11061057d35eSArik Nemtsov 11071057d35eSArik Nemtsov trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class, 11081057d35eSArik Nemtsov chandef); 11091057d35eSArik Nemtsov ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr, 11101057d35eSArik Nemtsov oper_class, chandef); 11111057d35eSArik Nemtsov trace_rdev_return_int(&rdev->wiphy, ret); 11121057d35eSArik Nemtsov return ret; 11131057d35eSArik Nemtsov } 11141057d35eSArik Nemtsov 11151057d35eSArik Nemtsov static inline void 11161057d35eSArik Nemtsov rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev, 11171057d35eSArik Nemtsov struct net_device *dev, const u8 *addr) 11181057d35eSArik Nemtsov { 11191057d35eSArik Nemtsov trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11201057d35eSArik Nemtsov rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11211057d35eSArik Nemtsov trace_rdev_return_void(&rdev->wiphy); 11221057d35eSArik Nemtsov } 11231057d35eSArik Nemtsov 1124a1056b1bSIlan Peer static inline int 1125a1056b1bSIlan Peer rdev_start_radar_detection(struct cfg80211_registered_device *rdev, 1126a1056b1bSIlan Peer struct net_device *dev, 1127a1056b1bSIlan Peer struct cfg80211_chan_def *chandef, 1128a1056b1bSIlan Peer u32 cac_time_ms) 1129a1056b1bSIlan Peer { 1130a1056b1bSIlan Peer int ret = -ENOTSUPP; 1131a1056b1bSIlan Peer 1132a1056b1bSIlan Peer trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef, 1133a1056b1bSIlan Peer cac_time_ms); 1134a1056b1bSIlan Peer if (rdev->ops->start_radar_detection) 1135a1056b1bSIlan Peer ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev, 1136a1056b1bSIlan Peer chandef, cac_time_ms); 1137a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1138a1056b1bSIlan Peer return ret; 1139a1056b1bSIlan Peer } 1140a1056b1bSIlan Peer 1141a1056b1bSIlan Peer static inline int 1142a1056b1bSIlan Peer rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, 1143a1056b1bSIlan Peer struct net_device *dev, 114457fbcce3SJohannes Berg int mcast_rate[NUM_NL80211_BANDS]) 1145a1056b1bSIlan Peer { 1146a1056b1bSIlan Peer int ret = -ENOTSUPP; 1147a1056b1bSIlan Peer 1148a1056b1bSIlan Peer trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1149a1056b1bSIlan Peer if (rdev->ops->set_mcast_rate) 1150a1056b1bSIlan Peer ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1151a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1152a1056b1bSIlan Peer return ret; 1153a1056b1bSIlan Peer } 1154a1056b1bSIlan Peer 1155a1056b1bSIlan Peer static inline int 1156a1056b1bSIlan Peer rdev_set_coalesce(struct cfg80211_registered_device *rdev, 1157a1056b1bSIlan Peer struct cfg80211_coalesce *coalesce) 1158a1056b1bSIlan Peer { 1159a1056b1bSIlan Peer int ret = -ENOTSUPP; 1160a1056b1bSIlan Peer 1161a1056b1bSIlan Peer trace_rdev_set_coalesce(&rdev->wiphy, coalesce); 1162a1056b1bSIlan Peer if (rdev->ops->set_coalesce) 1163a1056b1bSIlan Peer ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce); 1164a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1165a1056b1bSIlan Peer return ret; 1166a1056b1bSIlan Peer } 1167*3a00df57SAvraham Stern 1168*3a00df57SAvraham Stern static inline int rdev_set_pmk(struct cfg80211_registered_device *rdev, 1169*3a00df57SAvraham Stern struct net_device *dev, 1170*3a00df57SAvraham Stern struct cfg80211_pmk_conf *pmk_conf) 1171*3a00df57SAvraham Stern { 1172*3a00df57SAvraham Stern int ret = -EOPNOTSUPP; 1173*3a00df57SAvraham Stern 1174*3a00df57SAvraham Stern trace_rdev_set_pmk(&rdev->wiphy, dev, pmk_conf); 1175*3a00df57SAvraham Stern if (rdev->ops->set_pmk) 1176*3a00df57SAvraham Stern ret = rdev->ops->set_pmk(&rdev->wiphy, dev, pmk_conf); 1177*3a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 1178*3a00df57SAvraham Stern return ret; 1179*3a00df57SAvraham Stern } 1180*3a00df57SAvraham Stern 1181*3a00df57SAvraham Stern static inline int rdev_del_pmk(struct cfg80211_registered_device *rdev, 1182*3a00df57SAvraham Stern struct net_device *dev, const u8 *aa) 1183*3a00df57SAvraham Stern { 1184*3a00df57SAvraham Stern int ret = -EOPNOTSUPP; 1185*3a00df57SAvraham Stern 1186*3a00df57SAvraham Stern trace_rdev_del_pmk(&rdev->wiphy, dev, aa); 1187*3a00df57SAvraham Stern if (rdev->ops->del_pmk) 1188*3a00df57SAvraham Stern ret = rdev->ops->del_pmk(&rdev->wiphy, dev, aa); 1189*3a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 1190*3a00df57SAvraham Stern return ret; 1191*3a00df57SAvraham Stern } 1192e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 1193