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, 38e35e4d28SHila Gonen enum nl80211_iftype type, u32 *flags, 39e35e4d28SHila Gonen struct vif_params *params) 40e35e4d28SHila Gonen { 4114e8a3c4SBeni Lev struct wireless_dev *ret; 4214e8a3c4SBeni Lev trace_rdev_add_virtual_intf(&rdev->wiphy, name, type); 4314e8a3c4SBeni Lev ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, type, flags, 44e35e4d28SHila Gonen params); 4514e8a3c4SBeni Lev trace_rdev_return_wdev(&rdev->wiphy, ret); 4614e8a3c4SBeni Lev return ret; 47e35e4d28SHila Gonen } 48e35e4d28SHila Gonen 49e35e4d28SHila Gonen static inline int 50e35e4d28SHila Gonen rdev_del_virtual_intf(struct cfg80211_registered_device *rdev, 51e35e4d28SHila Gonen struct wireless_dev *wdev) 52e35e4d28SHila Gonen { 5314e8a3c4SBeni Lev int ret; 5414e8a3c4SBeni Lev trace_rdev_del_virtual_intf(&rdev->wiphy, wdev); 5514e8a3c4SBeni Lev ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev); 5614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 5714e8a3c4SBeni Lev return ret; 58e35e4d28SHila Gonen } 59e35e4d28SHila Gonen 60e35e4d28SHila Gonen static inline int 61e35e4d28SHila Gonen rdev_change_virtual_intf(struct cfg80211_registered_device *rdev, 62e35e4d28SHila Gonen struct net_device *dev, enum nl80211_iftype type, 63e35e4d28SHila Gonen u32 *flags, struct vif_params *params) 64e35e4d28SHila Gonen { 6514e8a3c4SBeni Lev int ret; 6614e8a3c4SBeni Lev trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 6714e8a3c4SBeni Lev ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, flags, 68e35e4d28SHila Gonen 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, 181e35e4d28SHila Gonen struct net_device *dev, u8 *mac) 182e35e4d28SHila Gonen { 18314e8a3c4SBeni Lev int ret; 18414e8a3c4SBeni Lev trace_rdev_del_station(&rdev->wiphy, dev, mac); 18514e8a3c4SBeni Lev ret = rdev->ops->del_station(&rdev->wiphy, dev, mac); 18614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 18714e8a3c4SBeni Lev return ret; 188e35e4d28SHila Gonen } 189e35e4d28SHila Gonen 190e35e4d28SHila Gonen static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 191e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 192e35e4d28SHila Gonen struct station_parameters *params) 193e35e4d28SHila Gonen { 19414e8a3c4SBeni Lev int ret; 19514e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 19614e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 19714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 19814e8a3c4SBeni Lev return ret; 199e35e4d28SHila Gonen } 200e35e4d28SHila Gonen 201e35e4d28SHila Gonen static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 2027406353dSAntonio Quartulli struct net_device *dev, const u8 *mac, 203e35e4d28SHila Gonen struct station_info *sinfo) 204e35e4d28SHila Gonen { 20514e8a3c4SBeni Lev int ret; 20614e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 20714e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 20814e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 20914e8a3c4SBeni Lev return ret; 210e35e4d28SHila Gonen } 211e35e4d28SHila Gonen 212e35e4d28SHila Gonen static inline int rdev_dump_station(struct cfg80211_registered_device *rdev, 213e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *mac, 214e35e4d28SHila Gonen struct station_info *sinfo) 215e35e4d28SHila Gonen { 21614e8a3c4SBeni Lev int ret; 21714e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 21814e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 21914e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 22014e8a3c4SBeni Lev return ret; 221e35e4d28SHila Gonen } 222e35e4d28SHila Gonen 223e35e4d28SHila Gonen static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 224e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop) 225e35e4d28SHila Gonen { 22614e8a3c4SBeni Lev int ret; 22714e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 22814e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 22914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 23014e8a3c4SBeni Lev return ret; 231e35e4d28SHila Gonen } 232e35e4d28SHila Gonen 233e35e4d28SHila Gonen static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 234e35e4d28SHila Gonen struct net_device *dev, u8 *dst) 235e35e4d28SHila Gonen { 23614e8a3c4SBeni Lev int ret; 23714e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 23814e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 23914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 24014e8a3c4SBeni Lev return ret; 241e35e4d28SHila Gonen } 242e35e4d28SHila Gonen 243e35e4d28SHila Gonen static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 244e35e4d28SHila Gonen struct net_device *dev, u8 *dst, 245e35e4d28SHila Gonen u8 *next_hop) 246e35e4d28SHila Gonen { 24714e8a3c4SBeni Lev int ret; 24814e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 24914e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 25014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 25114e8a3c4SBeni Lev return ret; 252e35e4d28SHila Gonen } 253e35e4d28SHila Gonen 254e35e4d28SHila Gonen static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 255e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop, 256e35e4d28SHila Gonen struct mpath_info *pinfo) 257e35e4d28SHila Gonen { 25814e8a3c4SBeni Lev int ret; 25914e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 26014e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 26114e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 26214e8a3c4SBeni Lev return ret; 26314e8a3c4SBeni Lev 264e35e4d28SHila Gonen } 265e35e4d28SHila Gonen 266*66be7d2bSHenning Rogge static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev, 267*66be7d2bSHenning Rogge struct net_device *dev, u8 *dst, u8 *mpp, 268*66be7d2bSHenning Rogge struct mpath_info *pinfo) 269*66be7d2bSHenning Rogge { 270*66be7d2bSHenning Rogge int ret; 271*66be7d2bSHenning Rogge 272*66be7d2bSHenning Rogge trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp); 273*66be7d2bSHenning Rogge ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo); 274*66be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 275*66be7d2bSHenning Rogge return ret; 276*66be7d2bSHenning Rogge } 277*66be7d2bSHenning Rogge 278e35e4d28SHila Gonen static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 279e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *dst, 280e35e4d28SHila Gonen u8 *next_hop, struct mpath_info *pinfo) 281e35e4d28SHila Gonen 282e35e4d28SHila Gonen { 28314e8a3c4SBeni Lev int ret; 28414e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 28514e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 286e35e4d28SHila Gonen pinfo); 28714e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 28814e8a3c4SBeni Lev return ret; 289e35e4d28SHila Gonen } 290e35e4d28SHila Gonen 291*66be7d2bSHenning Rogge static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev, 292*66be7d2bSHenning Rogge struct net_device *dev, int idx, u8 *dst, 293*66be7d2bSHenning Rogge u8 *mpp, struct mpath_info *pinfo) 294*66be7d2bSHenning Rogge 295*66be7d2bSHenning Rogge { 296*66be7d2bSHenning Rogge int ret; 297*66be7d2bSHenning Rogge 298*66be7d2bSHenning Rogge trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp); 299*66be7d2bSHenning Rogge ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo); 300*66be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 301*66be7d2bSHenning Rogge return ret; 302*66be7d2bSHenning Rogge } 303*66be7d2bSHenning Rogge 304e35e4d28SHila Gonen static inline int 305e35e4d28SHila Gonen rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 306e35e4d28SHila Gonen struct net_device *dev, struct mesh_config *conf) 307e35e4d28SHila Gonen { 30814e8a3c4SBeni Lev int ret; 30914e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 31014e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 31114e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 31214e8a3c4SBeni Lev return ret; 313e35e4d28SHila Gonen } 314e35e4d28SHila Gonen 315e35e4d28SHila Gonen static inline int 316e35e4d28SHila Gonen rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 317e35e4d28SHila Gonen struct net_device *dev, u32 mask, 318e35e4d28SHila Gonen const struct mesh_config *nconf) 319e35e4d28SHila Gonen { 32014e8a3c4SBeni Lev int ret; 32114e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 32214e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 32314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 32414e8a3c4SBeni Lev return ret; 325e35e4d28SHila Gonen } 326e35e4d28SHila Gonen 327e35e4d28SHila Gonen static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 328e35e4d28SHila Gonen struct net_device *dev, 329e35e4d28SHila Gonen const struct mesh_config *conf, 330e35e4d28SHila Gonen const struct mesh_setup *setup) 331e35e4d28SHila Gonen { 33214e8a3c4SBeni Lev int ret; 33314e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 33414e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 33514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 33614e8a3c4SBeni Lev return ret; 337e35e4d28SHila Gonen } 338e35e4d28SHila Gonen 339e35e4d28SHila Gonen 340e35e4d28SHila Gonen static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 341e35e4d28SHila Gonen struct net_device *dev) 342e35e4d28SHila Gonen { 34314e8a3c4SBeni Lev int ret; 34414e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 34514e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 34614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 34714e8a3c4SBeni Lev return ret; 348e35e4d28SHila Gonen } 349e35e4d28SHila Gonen 350e35e4d28SHila Gonen static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 351e35e4d28SHila Gonen struct net_device *dev, 352e35e4d28SHila Gonen struct bss_parameters *params) 353e35e4d28SHila Gonen 354e35e4d28SHila Gonen { 35514e8a3c4SBeni Lev int ret; 35614e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 35714e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 35814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 35914e8a3c4SBeni Lev return ret; 360e35e4d28SHila Gonen } 361e35e4d28SHila Gonen 362e35e4d28SHila Gonen static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 363e35e4d28SHila Gonen struct net_device *dev, 364e35e4d28SHila Gonen struct ieee80211_txq_params *params) 365e35e4d28SHila Gonen 366e35e4d28SHila Gonen { 36714e8a3c4SBeni Lev int ret; 36814e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 36914e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 37014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 37114e8a3c4SBeni Lev return ret; 372e35e4d28SHila Gonen } 373e35e4d28SHila Gonen 374e35e4d28SHila Gonen static inline int 375e35e4d28SHila Gonen rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 376e35e4d28SHila Gonen struct net_device *dev, 377e35e4d28SHila Gonen struct ieee80211_channel *chan) 378e35e4d28SHila Gonen { 37914e8a3c4SBeni Lev int ret; 38014e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 38114e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 38214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 38314e8a3c4SBeni Lev return ret; 384e35e4d28SHila Gonen } 385e35e4d28SHila Gonen 386e35e4d28SHila Gonen static inline int 387e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 388683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 389e35e4d28SHila Gonen { 39014e8a3c4SBeni Lev int ret; 391683b6d3bSJohannes Berg trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 392683b6d3bSJohannes Berg ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 39314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 39414e8a3c4SBeni Lev return ret; 395e35e4d28SHila Gonen } 396e35e4d28SHila Gonen 397e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 398e35e4d28SHila Gonen struct cfg80211_scan_request *request) 399e35e4d28SHila Gonen { 40014e8a3c4SBeni Lev int ret; 40114e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 40214e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 40314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 40414e8a3c4SBeni Lev return ret; 405e35e4d28SHila Gonen } 406e35e4d28SHila Gonen 407e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 408e35e4d28SHila Gonen struct net_device *dev, 409e35e4d28SHila Gonen struct cfg80211_auth_request *req) 410e35e4d28SHila Gonen { 41114e8a3c4SBeni Lev int ret; 41214e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 41314e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 41414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 41514e8a3c4SBeni Lev return ret; 416e35e4d28SHila Gonen } 417e35e4d28SHila Gonen 418e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 419e35e4d28SHila Gonen struct net_device *dev, 420e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 421e35e4d28SHila Gonen { 42214e8a3c4SBeni Lev int ret; 42314e8a3c4SBeni Lev trace_rdev_assoc(&rdev->wiphy, dev, req); 42414e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 42514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 42614e8a3c4SBeni Lev return ret; 427e35e4d28SHila Gonen } 428e35e4d28SHila Gonen 429e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 430e35e4d28SHila Gonen struct net_device *dev, 431e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 432e35e4d28SHila Gonen { 43314e8a3c4SBeni Lev int ret; 43414e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 43514e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 43614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 43714e8a3c4SBeni Lev return ret; 438e35e4d28SHila Gonen } 439e35e4d28SHila Gonen 440e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 441e35e4d28SHila Gonen struct net_device *dev, 442e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 443e35e4d28SHila Gonen { 44414e8a3c4SBeni Lev int ret; 44514e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 44614e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 44714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 44814e8a3c4SBeni Lev return ret; 449e35e4d28SHila Gonen } 450e35e4d28SHila Gonen 451e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 452e35e4d28SHila Gonen struct net_device *dev, 453e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 454e35e4d28SHila Gonen { 45514e8a3c4SBeni Lev int ret; 45614e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 45714e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 45814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 45914e8a3c4SBeni Lev return ret; 460e35e4d28SHila Gonen } 461e35e4d28SHila Gonen 462e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 463e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 464e35e4d28SHila Gonen { 46514e8a3c4SBeni Lev int ret; 46614e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 46714e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 46814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 46914e8a3c4SBeni Lev return ret; 470e35e4d28SHila Gonen } 471e35e4d28SHila Gonen 472e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 473e35e4d28SHila Gonen struct net_device *dev, 474e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 475e35e4d28SHila Gonen { 47614e8a3c4SBeni Lev int ret; 47714e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 47814e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 47914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 48014e8a3c4SBeni Lev return ret; 481e35e4d28SHila Gonen } 482e35e4d28SHila Gonen 483e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 484e35e4d28SHila Gonen struct net_device *dev) 485e35e4d28SHila Gonen { 48614e8a3c4SBeni Lev int ret; 48714e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 48814e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 48914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 49014e8a3c4SBeni Lev return ret; 491e35e4d28SHila Gonen } 492e35e4d28SHila Gonen 493e35e4d28SHila Gonen static inline int 494e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 495e35e4d28SHila Gonen { 49614e8a3c4SBeni Lev int ret; 49714e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 49814e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 49914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 50014e8a3c4SBeni Lev return ret; 501e35e4d28SHila Gonen } 502e35e4d28SHila Gonen 503e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 504c8442118SJohannes Berg struct wireless_dev *wdev, 505e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 506e35e4d28SHila Gonen { 50714e8a3c4SBeni Lev int ret; 508c8442118SJohannes Berg trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 509c8442118SJohannes Berg ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 51014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 51114e8a3c4SBeni Lev return ret; 512e35e4d28SHila Gonen } 513e35e4d28SHila Gonen 514e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 515c8442118SJohannes Berg struct wireless_dev *wdev, int *dbm) 516e35e4d28SHila Gonen { 51714e8a3c4SBeni Lev int ret; 518c8442118SJohannes Berg trace_rdev_get_tx_power(&rdev->wiphy, wdev); 519c8442118SJohannes Berg ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 52014e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 52114e8a3c4SBeni Lev return ret; 522e35e4d28SHila Gonen } 523e35e4d28SHila Gonen 524e35e4d28SHila Gonen static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev, 525e35e4d28SHila Gonen struct net_device *dev, const u8 *addr) 526e35e4d28SHila Gonen { 52714e8a3c4SBeni Lev int ret; 52814e8a3c4SBeni Lev trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr); 52914e8a3c4SBeni Lev ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr); 53014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 53114e8a3c4SBeni Lev return ret; 532e35e4d28SHila Gonen } 533e35e4d28SHila Gonen 534e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 535e35e4d28SHila Gonen { 53614e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 537e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 53814e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 539e35e4d28SHila Gonen } 540e35e4d28SHila Gonen 541e35e4d28SHila Gonen 542e35e4d28SHila Gonen #ifdef CONFIG_NL80211_TESTMODE 543e35e4d28SHila Gonen static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 544fc73f11fSDavid Spinadel struct wireless_dev *wdev, 545e35e4d28SHila Gonen void *data, int len) 546e35e4d28SHila Gonen { 54714e8a3c4SBeni Lev int ret; 548fc73f11fSDavid Spinadel trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 549fc73f11fSDavid Spinadel ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 55014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 55114e8a3c4SBeni Lev return ret; 552e35e4d28SHila Gonen } 553e35e4d28SHila Gonen 554e35e4d28SHila Gonen static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 555e35e4d28SHila Gonen struct sk_buff *skb, 556e35e4d28SHila Gonen struct netlink_callback *cb, void *data, 557e35e4d28SHila Gonen int len) 558e35e4d28SHila Gonen { 55914e8a3c4SBeni Lev int ret; 56014e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 56114e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 56214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 56314e8a3c4SBeni Lev return ret; 564e35e4d28SHila Gonen } 565e35e4d28SHila Gonen #endif 566e35e4d28SHila Gonen 567e35e4d28SHila Gonen static inline int 568e35e4d28SHila Gonen rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 569e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 570e35e4d28SHila Gonen const struct cfg80211_bitrate_mask *mask) 571e35e4d28SHila Gonen { 57214e8a3c4SBeni Lev int ret; 57314e8a3c4SBeni Lev trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 57414e8a3c4SBeni Lev ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 57514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 57614e8a3c4SBeni Lev return ret; 577e35e4d28SHila Gonen } 578e35e4d28SHila Gonen 579e35e4d28SHila Gonen static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 580e35e4d28SHila Gonen struct net_device *netdev, int idx, 581e35e4d28SHila Gonen struct survey_info *info) 582e35e4d28SHila Gonen { 58314e8a3c4SBeni Lev int ret; 58414e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 58514e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 58614e8a3c4SBeni Lev if (ret < 0) 58714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 58814e8a3c4SBeni Lev else 58914e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 59014e8a3c4SBeni Lev return ret; 591e35e4d28SHila Gonen } 592e35e4d28SHila Gonen 593e35e4d28SHila Gonen static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 594e35e4d28SHila Gonen struct net_device *netdev, 595e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 596e35e4d28SHila Gonen { 59714e8a3c4SBeni Lev int ret; 59814e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 59914e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 60014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 60114e8a3c4SBeni Lev return ret; 602e35e4d28SHila Gonen } 603e35e4d28SHila Gonen 604e35e4d28SHila Gonen static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 605e35e4d28SHila Gonen struct net_device *netdev, 606e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 607e35e4d28SHila Gonen { 60814e8a3c4SBeni Lev int ret; 60914e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 61014e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 61114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 61214e8a3c4SBeni Lev return ret; 613e35e4d28SHila Gonen } 614e35e4d28SHila Gonen 615e35e4d28SHila Gonen static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 616e35e4d28SHila Gonen struct net_device *netdev) 617e35e4d28SHila Gonen { 61814e8a3c4SBeni Lev int ret; 61914e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 62014e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 62114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 62214e8a3c4SBeni Lev return ret; 623e35e4d28SHila Gonen } 624e35e4d28SHila Gonen 625e35e4d28SHila Gonen static inline int 626e35e4d28SHila Gonen rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 627e35e4d28SHila Gonen struct wireless_dev *wdev, 628e35e4d28SHila Gonen struct ieee80211_channel *chan, 629e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 630e35e4d28SHila Gonen { 63114e8a3c4SBeni Lev int ret; 63242d97a59SJohannes Berg trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 63314e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 63442d97a59SJohannes Berg duration, cookie); 63514e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 63614e8a3c4SBeni Lev return ret; 637e35e4d28SHila Gonen } 638e35e4d28SHila Gonen 639e35e4d28SHila Gonen static inline int 640e35e4d28SHila Gonen rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 641e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 642e35e4d28SHila Gonen { 64314e8a3c4SBeni Lev int ret; 64414e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 64514e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 64614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 64714e8a3c4SBeni Lev return ret; 648e35e4d28SHila Gonen } 649e35e4d28SHila Gonen 650e35e4d28SHila Gonen static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 651e35e4d28SHila Gonen struct wireless_dev *wdev, 652b176e629SAndrei Otcheretianski struct cfg80211_mgmt_tx_params *params, 653b176e629SAndrei Otcheretianski u64 *cookie) 654e35e4d28SHila Gonen { 65514e8a3c4SBeni Lev int ret; 656b176e629SAndrei Otcheretianski trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 657b176e629SAndrei Otcheretianski ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 65814e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 65914e8a3c4SBeni Lev return ret; 660e35e4d28SHila Gonen } 661e35e4d28SHila Gonen 662e35e4d28SHila Gonen static inline int 663e35e4d28SHila Gonen rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 664e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 665e35e4d28SHila Gonen { 66614e8a3c4SBeni Lev int ret; 66714e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 66814e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 66914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 67014e8a3c4SBeni Lev return ret; 671e35e4d28SHila Gonen } 672e35e4d28SHila Gonen 673e35e4d28SHila Gonen static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 674e35e4d28SHila Gonen struct net_device *dev, bool enabled, 675e35e4d28SHila Gonen int timeout) 676e35e4d28SHila Gonen { 67714e8a3c4SBeni Lev int ret; 67814e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 67914e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 68014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 68114e8a3c4SBeni Lev return ret; 682e35e4d28SHila Gonen } 683e35e4d28SHila Gonen 684e35e4d28SHila Gonen static inline int 685e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 686e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 687e35e4d28SHila Gonen { 68814e8a3c4SBeni Lev int ret; 68914e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 690e35e4d28SHila Gonen rssi_hyst); 69114e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 69214e8a3c4SBeni Lev rssi_hyst); 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_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 699e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 700e35e4d28SHila Gonen { 70114e8a3c4SBeni Lev int ret; 70214e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 70314e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 704e35e4d28SHila Gonen intvl); 70514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 70614e8a3c4SBeni Lev return ret; 707e35e4d28SHila Gonen } 708e35e4d28SHila Gonen 709e35e4d28SHila Gonen static inline void 710e35e4d28SHila Gonen rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev, 711e35e4d28SHila Gonen struct wireless_dev *wdev, u16 frame_type, bool reg) 712e35e4d28SHila Gonen { 71314e8a3c4SBeni Lev trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 71414e8a3c4SBeni Lev rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 71514e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 716e35e4d28SHila Gonen } 717e35e4d28SHila Gonen 718e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 719e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 720e35e4d28SHila Gonen { 72114e8a3c4SBeni Lev int ret; 72214e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 72314e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 72414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 72514e8a3c4SBeni Lev return ret; 726e35e4d28SHila Gonen } 727e35e4d28SHila Gonen 728e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 729e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 730e35e4d28SHila Gonen { 73114e8a3c4SBeni Lev int ret; 73214e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 73314e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 73414e8a3c4SBeni Lev if (ret) 73514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 73614e8a3c4SBeni Lev else 73714e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 73814e8a3c4SBeni Lev *rx_ant); 73914e8a3c4SBeni Lev return ret; 740e35e4d28SHila Gonen } 741e35e4d28SHila Gonen 742e35e4d28SHila Gonen static inline int 743e35e4d28SHila Gonen rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 744e35e4d28SHila Gonen struct net_device *dev, 745e35e4d28SHila Gonen struct cfg80211_sched_scan_request *request) 746e35e4d28SHila Gonen { 74714e8a3c4SBeni Lev int ret; 74814e8a3c4SBeni Lev trace_rdev_sched_scan_start(&rdev->wiphy, dev, request); 74914e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 75014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 75114e8a3c4SBeni Lev return ret; 752e35e4d28SHila Gonen } 753e35e4d28SHila Gonen 754e35e4d28SHila Gonen static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 755e35e4d28SHila Gonen struct net_device *dev) 756e35e4d28SHila Gonen { 75714e8a3c4SBeni Lev int ret; 75814e8a3c4SBeni Lev trace_rdev_sched_scan_stop(&rdev->wiphy, dev); 75914e8a3c4SBeni Lev ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev); 76014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 76114e8a3c4SBeni Lev return ret; 762e35e4d28SHila Gonen } 763e35e4d28SHila Gonen 764e35e4d28SHila Gonen static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 765e35e4d28SHila Gonen struct net_device *dev, 766e35e4d28SHila Gonen struct cfg80211_gtk_rekey_data *data) 767e35e4d28SHila Gonen { 76814e8a3c4SBeni Lev int ret; 76914e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 77014e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 77114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 77214e8a3c4SBeni Lev return ret; 773e35e4d28SHila Gonen } 774e35e4d28SHila Gonen 775e35e4d28SHila Gonen static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 776e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 777e35e4d28SHila Gonen u8 action_code, u8 dialog_token, 778df942e7bSSunil Dutt Undekari u16 status_code, u32 peer_capability, 77931fa97c5SArik Nemtsov bool initiator, const u8 *buf, size_t len) 780e35e4d28SHila Gonen { 78114e8a3c4SBeni Lev int ret; 78214e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 783df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 78431fa97c5SArik Nemtsov initiator, buf, len); 78514e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 786df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 78731fa97c5SArik Nemtsov initiator, buf, len); 78814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 78914e8a3c4SBeni Lev return ret; 790e35e4d28SHila Gonen } 791e35e4d28SHila Gonen 792e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 793e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 794e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 795e35e4d28SHila Gonen { 79614e8a3c4SBeni Lev int ret; 79714e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 79814e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 79914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 80014e8a3c4SBeni Lev return ret; 801e35e4d28SHila Gonen } 802e35e4d28SHila Gonen 803e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 804e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 805e35e4d28SHila Gonen u64 *cookie) 806e35e4d28SHila Gonen { 80714e8a3c4SBeni Lev int ret; 80814e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 80914e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 81014e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 81114e8a3c4SBeni Lev return ret; 812e35e4d28SHila Gonen } 813e35e4d28SHila Gonen 814e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 815e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 816e35e4d28SHila Gonen { 81714e8a3c4SBeni Lev int ret; 81814e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 81914e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 82014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 82114e8a3c4SBeni Lev return ret; 822e35e4d28SHila Gonen } 823e35e4d28SHila Gonen 824e35e4d28SHila Gonen static inline int 825683b6d3bSJohannes Berg rdev_get_channel(struct cfg80211_registered_device *rdev, 826683b6d3bSJohannes Berg struct wireless_dev *wdev, 827683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 828e35e4d28SHila Gonen { 829683b6d3bSJohannes Berg int ret; 830683b6d3bSJohannes Berg 83114e8a3c4SBeni Lev trace_rdev_get_channel(&rdev->wiphy, wdev); 832683b6d3bSJohannes Berg ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef); 833683b6d3bSJohannes Berg trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 834683b6d3bSJohannes Berg 83514e8a3c4SBeni Lev return ret; 836e35e4d28SHila Gonen } 837e35e4d28SHila Gonen 838eeb126e9SJohannes Berg static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 839eeb126e9SJohannes Berg struct wireless_dev *wdev) 840eeb126e9SJohannes Berg { 841eeb126e9SJohannes Berg int ret; 842eeb126e9SJohannes Berg 843eeb126e9SJohannes Berg trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 844eeb126e9SJohannes Berg ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 845eeb126e9SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 846eeb126e9SJohannes Berg return ret; 847eeb126e9SJohannes Berg } 848eeb126e9SJohannes Berg 849eeb126e9SJohannes Berg static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 850eeb126e9SJohannes Berg struct wireless_dev *wdev) 851eeb126e9SJohannes Berg { 852eeb126e9SJohannes Berg trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 853eeb126e9SJohannes Berg rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 854eeb126e9SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 855eeb126e9SJohannes Berg } 85677765eafSVasanthakumar Thiagarajan 85777765eafSVasanthakumar Thiagarajan static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 85877765eafSVasanthakumar Thiagarajan struct net_device *dev, 85977765eafSVasanthakumar Thiagarajan struct cfg80211_acl_data *params) 86077765eafSVasanthakumar Thiagarajan { 86177765eafSVasanthakumar Thiagarajan int ret; 86277765eafSVasanthakumar Thiagarajan 86377765eafSVasanthakumar Thiagarajan trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 86477765eafSVasanthakumar Thiagarajan ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 86577765eafSVasanthakumar Thiagarajan trace_rdev_return_int(&rdev->wiphy, ret); 86677765eafSVasanthakumar Thiagarajan return ret; 86777765eafSVasanthakumar Thiagarajan } 868355199e0SJouni Malinen 869355199e0SJouni Malinen static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 870355199e0SJouni Malinen struct net_device *dev, 871355199e0SJouni Malinen struct cfg80211_update_ft_ies_params *ftie) 872355199e0SJouni Malinen { 873355199e0SJouni Malinen int ret; 874355199e0SJouni Malinen 875355199e0SJouni Malinen trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 876355199e0SJouni Malinen ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 877355199e0SJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 878355199e0SJouni Malinen return ret; 8795de17984SArend van Spriel } 8805de17984SArend van Spriel 8815de17984SArend van Spriel static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 8825de17984SArend van Spriel struct wireless_dev *wdev, 8835de17984SArend van Spriel enum nl80211_crit_proto_id protocol, 8845de17984SArend van Spriel u16 duration) 8855de17984SArend van Spriel { 8865de17984SArend van Spriel int ret; 8875de17984SArend van Spriel 8885de17984SArend van Spriel trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 8895de17984SArend van Spriel ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 8905de17984SArend van Spriel protocol, duration); 8915de17984SArend van Spriel trace_rdev_return_int(&rdev->wiphy, ret); 8925de17984SArend van Spriel return ret; 8935de17984SArend van Spriel } 8945de17984SArend van Spriel 8955de17984SArend van Spriel static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 8965de17984SArend van Spriel struct wireless_dev *wdev) 8975de17984SArend van Spriel { 8985de17984SArend van Spriel trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 8995de17984SArend van Spriel rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 9005de17984SArend van Spriel trace_rdev_return_void(&rdev->wiphy); 901355199e0SJouni Malinen } 902355199e0SJouni Malinen 90316ef1fe2SSimon Wunderlich static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 90416ef1fe2SSimon Wunderlich struct net_device *dev, 90516ef1fe2SSimon Wunderlich struct cfg80211_csa_settings *params) 90616ef1fe2SSimon Wunderlich { 90716ef1fe2SSimon Wunderlich int ret; 90816ef1fe2SSimon Wunderlich 90916ef1fe2SSimon Wunderlich trace_rdev_channel_switch(&rdev->wiphy, dev, params); 91016ef1fe2SSimon Wunderlich ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 91116ef1fe2SSimon Wunderlich trace_rdev_return_int(&rdev->wiphy, ret); 91216ef1fe2SSimon Wunderlich return ret; 91316ef1fe2SSimon Wunderlich } 91416ef1fe2SSimon Wunderlich 915fa9ffc74SKyeyoon Park static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 916fa9ffc74SKyeyoon Park struct net_device *dev, 917fa9ffc74SKyeyoon Park struct cfg80211_qos_map *qos_map) 918fa9ffc74SKyeyoon Park { 919fa9ffc74SKyeyoon Park int ret = -EOPNOTSUPP; 920fa9ffc74SKyeyoon Park 921fa9ffc74SKyeyoon Park if (rdev->ops->set_qos_map) { 922fa9ffc74SKyeyoon Park trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 923fa9ffc74SKyeyoon Park ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 924fa9ffc74SKyeyoon Park trace_rdev_return_int(&rdev->wiphy, ret); 925fa9ffc74SKyeyoon Park } 926fa9ffc74SKyeyoon Park 927fa9ffc74SKyeyoon Park return ret; 928fa9ffc74SKyeyoon Park } 929fa9ffc74SKyeyoon Park 930e16821bcSJouni Malinen static inline int 931e16821bcSJouni Malinen rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 932e16821bcSJouni Malinen struct net_device *dev, struct cfg80211_chan_def *chandef) 933e16821bcSJouni Malinen { 934e16821bcSJouni Malinen int ret; 935e16821bcSJouni Malinen 936e16821bcSJouni Malinen trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef); 937e16821bcSJouni Malinen ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef); 938e16821bcSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 939e16821bcSJouni Malinen 940e16821bcSJouni Malinen return ret; 941e16821bcSJouni Malinen } 942e16821bcSJouni Malinen 943960d01acSJohannes Berg static inline int 944960d01acSJohannes Berg rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 945960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer, 946960d01acSJohannes Berg u8 user_prio, u16 admitted_time) 947960d01acSJohannes Berg { 948960d01acSJohannes Berg int ret = -EOPNOTSUPP; 949960d01acSJohannes Berg 950960d01acSJohannes Berg trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 951960d01acSJohannes Berg user_prio, admitted_time); 952960d01acSJohannes Berg if (rdev->ops->add_tx_ts) 953960d01acSJohannes Berg ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 954960d01acSJohannes Berg user_prio, admitted_time); 955960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 956960d01acSJohannes Berg 957960d01acSJohannes Berg return ret; 958960d01acSJohannes Berg } 959960d01acSJohannes Berg 960960d01acSJohannes Berg static inline int 961960d01acSJohannes Berg rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 962960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer) 963960d01acSJohannes Berg { 964960d01acSJohannes Berg int ret = -EOPNOTSUPP; 965960d01acSJohannes Berg 966960d01acSJohannes Berg trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 967960d01acSJohannes Berg if (rdev->ops->del_tx_ts) 968960d01acSJohannes Berg ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 969960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 970960d01acSJohannes Berg 971960d01acSJohannes Berg return ret; 972960d01acSJohannes Berg } 973960d01acSJohannes Berg 974e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 975