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 9e35e4d28SHila Gonen static inline int rdev_suspend(struct cfg80211_registered_device *rdev) 10e35e4d28SHila Gonen { 1114e8a3c4SBeni Lev int ret; 1214e8a3c4SBeni Lev trace_rdev_suspend(&rdev->wiphy, rdev->wowlan); 1314e8a3c4SBeni Lev ret = rdev->ops->suspend(&rdev->wiphy, rdev->wowlan); 1414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 1514e8a3c4SBeni Lev return ret; 16e35e4d28SHila Gonen } 17e35e4d28SHila Gonen 18e35e4d28SHila Gonen static inline int rdev_resume(struct cfg80211_registered_device *rdev) 19e35e4d28SHila Gonen { 2014e8a3c4SBeni Lev int ret; 2114e8a3c4SBeni Lev trace_rdev_resume(&rdev->wiphy); 2214e8a3c4SBeni Lev ret = rdev->ops->resume(&rdev->wiphy); 2314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 2414e8a3c4SBeni Lev return ret; 25e35e4d28SHila Gonen } 26e35e4d28SHila Gonen 27e35e4d28SHila Gonen static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev, 28e35e4d28SHila Gonen bool enabled) 29e35e4d28SHila Gonen { 3014e8a3c4SBeni Lev trace_rdev_set_wakeup(&rdev->wiphy, enabled); 31e35e4d28SHila Gonen rdev->ops->set_wakeup(&rdev->wiphy, enabled); 3214e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 33e35e4d28SHila Gonen } 34e35e4d28SHila Gonen 35e35e4d28SHila Gonen static inline struct wireless_dev 36e35e4d28SHila Gonen *rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name, 37e35e4d28SHila Gonen enum nl80211_iftype type, u32 *flags, 38e35e4d28SHila Gonen struct vif_params *params) 39e35e4d28SHila Gonen { 4014e8a3c4SBeni Lev struct wireless_dev *ret; 4114e8a3c4SBeni Lev trace_rdev_add_virtual_intf(&rdev->wiphy, name, type); 4214e8a3c4SBeni Lev ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, type, flags, 43e35e4d28SHila Gonen params); 4414e8a3c4SBeni Lev trace_rdev_return_wdev(&rdev->wiphy, ret); 4514e8a3c4SBeni Lev return ret; 46e35e4d28SHila Gonen } 47e35e4d28SHila Gonen 48e35e4d28SHila Gonen static inline int 49e35e4d28SHila Gonen rdev_del_virtual_intf(struct cfg80211_registered_device *rdev, 50e35e4d28SHila Gonen struct wireless_dev *wdev) 51e35e4d28SHila Gonen { 5214e8a3c4SBeni Lev int ret; 5314e8a3c4SBeni Lev trace_rdev_del_virtual_intf(&rdev->wiphy, wdev); 5414e8a3c4SBeni Lev ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev); 5514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 5614e8a3c4SBeni Lev return ret; 57e35e4d28SHila Gonen } 58e35e4d28SHila Gonen 59e35e4d28SHila Gonen static inline int 60e35e4d28SHila Gonen rdev_change_virtual_intf(struct cfg80211_registered_device *rdev, 61e35e4d28SHila Gonen struct net_device *dev, enum nl80211_iftype type, 62e35e4d28SHila Gonen u32 *flags, struct vif_params *params) 63e35e4d28SHila Gonen { 6414e8a3c4SBeni Lev int ret; 6514e8a3c4SBeni Lev trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 6614e8a3c4SBeni Lev ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, flags, 67e35e4d28SHila Gonen params); 6814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 6914e8a3c4SBeni Lev return ret; 70e35e4d28SHila Gonen } 71e35e4d28SHila Gonen 72e35e4d28SHila Gonen static inline int rdev_add_key(struct cfg80211_registered_device *rdev, 73e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 74e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr, 75e35e4d28SHila Gonen struct key_params *params) 76e35e4d28SHila Gonen { 7714e8a3c4SBeni Lev int ret; 7814e8a3c4SBeni Lev trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 7914e8a3c4SBeni Lev ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise, 80e35e4d28SHila Gonen mac_addr, params); 8114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 8214e8a3c4SBeni Lev return ret; 83e35e4d28SHila Gonen } 84e35e4d28SHila Gonen 85e35e4d28SHila Gonen static inline int 86e35e4d28SHila Gonen rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev, 87e35e4d28SHila Gonen u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, 88e35e4d28SHila Gonen void (*callback)(void *cookie, struct key_params*)) 89e35e4d28SHila Gonen { 9014e8a3c4SBeni Lev int ret; 9114e8a3c4SBeni Lev trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 9214e8a3c4SBeni Lev ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise, 93e35e4d28SHila Gonen mac_addr, cookie, callback); 9414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 9514e8a3c4SBeni Lev return ret; 96e35e4d28SHila Gonen } 97e35e4d28SHila Gonen 98e35e4d28SHila Gonen static inline int rdev_del_key(struct cfg80211_registered_device *rdev, 99e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 100e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr) 101e35e4d28SHila Gonen { 10214e8a3c4SBeni Lev int ret; 10314e8a3c4SBeni Lev trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 10414e8a3c4SBeni Lev ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise, 105e35e4d28SHila Gonen mac_addr); 10614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 10714e8a3c4SBeni Lev return ret; 108e35e4d28SHila Gonen } 109e35e4d28SHila Gonen 110e35e4d28SHila Gonen static inline int 111e35e4d28SHila Gonen rdev_set_default_key(struct cfg80211_registered_device *rdev, 112e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, bool unicast, 113e35e4d28SHila Gonen bool multicast) 114e35e4d28SHila Gonen { 11514e8a3c4SBeni Lev int ret; 11614e8a3c4SBeni Lev trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index, 117e35e4d28SHila Gonen unicast, multicast); 11814e8a3c4SBeni Lev ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index, 11914e8a3c4SBeni Lev unicast, multicast); 12014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 12114e8a3c4SBeni Lev return ret; 122e35e4d28SHila Gonen } 123e35e4d28SHila Gonen 124e35e4d28SHila Gonen static inline int 125e35e4d28SHila Gonen rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev, 126e35e4d28SHila Gonen struct net_device *netdev, u8 key_index) 127e35e4d28SHila Gonen { 12814e8a3c4SBeni Lev int ret; 12914e8a3c4SBeni Lev trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index); 13014e8a3c4SBeni Lev ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, 131e35e4d28SHila Gonen key_index); 13214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 13314e8a3c4SBeni Lev return ret; 134e35e4d28SHila Gonen } 135e35e4d28SHila Gonen 136e35e4d28SHila Gonen static inline int rdev_start_ap(struct cfg80211_registered_device *rdev, 137e35e4d28SHila Gonen struct net_device *dev, 138e35e4d28SHila Gonen struct cfg80211_ap_settings *settings) 139e35e4d28SHila Gonen { 14014e8a3c4SBeni Lev int ret; 14114e8a3c4SBeni Lev trace_rdev_start_ap(&rdev->wiphy, dev, settings); 14214e8a3c4SBeni Lev ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 14314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 14414e8a3c4SBeni Lev return ret; 145e35e4d28SHila Gonen } 146e35e4d28SHila Gonen 147e35e4d28SHila Gonen static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev, 148e35e4d28SHila Gonen struct net_device *dev, 149e35e4d28SHila Gonen struct cfg80211_beacon_data *info) 150e35e4d28SHila Gonen { 15114e8a3c4SBeni Lev int ret; 15214e8a3c4SBeni Lev trace_rdev_change_beacon(&rdev->wiphy, dev, info); 15314e8a3c4SBeni Lev ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 15414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 15514e8a3c4SBeni Lev return ret; 156e35e4d28SHila Gonen } 157e35e4d28SHila Gonen 158e35e4d28SHila Gonen static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev, 159e35e4d28SHila Gonen struct net_device *dev) 160e35e4d28SHila Gonen { 16114e8a3c4SBeni Lev int ret; 16214e8a3c4SBeni Lev trace_rdev_stop_ap(&rdev->wiphy, dev); 16314e8a3c4SBeni Lev ret = rdev->ops->stop_ap(&rdev->wiphy, dev); 16414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 16514e8a3c4SBeni Lev return ret; 166e35e4d28SHila Gonen } 167e35e4d28SHila Gonen 168e35e4d28SHila Gonen static inline int rdev_add_station(struct cfg80211_registered_device *rdev, 169e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 170e35e4d28SHila Gonen struct station_parameters *params) 171e35e4d28SHila Gonen { 17214e8a3c4SBeni Lev int ret; 17314e8a3c4SBeni Lev trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 17414e8a3c4SBeni Lev ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 17514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 17614e8a3c4SBeni Lev return ret; 177e35e4d28SHila Gonen } 178e35e4d28SHila Gonen 179e35e4d28SHila Gonen static inline int rdev_del_station(struct cfg80211_registered_device *rdev, 180e35e4d28SHila Gonen struct net_device *dev, u8 *mac) 181e35e4d28SHila Gonen { 18214e8a3c4SBeni Lev int ret; 18314e8a3c4SBeni Lev trace_rdev_del_station(&rdev->wiphy, dev, mac); 18414e8a3c4SBeni Lev ret = rdev->ops->del_station(&rdev->wiphy, dev, mac); 18514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 18614e8a3c4SBeni Lev return ret; 187e35e4d28SHila Gonen } 188e35e4d28SHila Gonen 189e35e4d28SHila Gonen static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 190e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 191e35e4d28SHila Gonen struct station_parameters *params) 192e35e4d28SHila Gonen { 19314e8a3c4SBeni Lev int ret; 19414e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 19514e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 19614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 19714e8a3c4SBeni Lev return ret; 198e35e4d28SHila Gonen } 199e35e4d28SHila Gonen 200e35e4d28SHila Gonen static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 201e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 202e35e4d28SHila Gonen struct station_info *sinfo) 203e35e4d28SHila Gonen { 20414e8a3c4SBeni Lev int ret; 20514e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 20614e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 20714e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 20814e8a3c4SBeni Lev return ret; 209e35e4d28SHila Gonen } 210e35e4d28SHila Gonen 211e35e4d28SHila Gonen static inline int rdev_dump_station(struct cfg80211_registered_device *rdev, 212e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *mac, 213e35e4d28SHila Gonen struct station_info *sinfo) 214e35e4d28SHila Gonen { 21514e8a3c4SBeni Lev int ret; 21614e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 21714e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 21814e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 21914e8a3c4SBeni Lev return ret; 220e35e4d28SHila Gonen } 221e35e4d28SHila Gonen 222e35e4d28SHila Gonen static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 223e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop) 224e35e4d28SHila Gonen { 22514e8a3c4SBeni Lev int ret; 22614e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 22714e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 22814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 22914e8a3c4SBeni Lev return ret; 230e35e4d28SHila Gonen } 231e35e4d28SHila Gonen 232e35e4d28SHila Gonen static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 233e35e4d28SHila Gonen struct net_device *dev, u8 *dst) 234e35e4d28SHila Gonen { 23514e8a3c4SBeni Lev int ret; 23614e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 23714e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 23814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 23914e8a3c4SBeni Lev return ret; 240e35e4d28SHila Gonen } 241e35e4d28SHila Gonen 242e35e4d28SHila Gonen static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 243e35e4d28SHila Gonen struct net_device *dev, u8 *dst, 244e35e4d28SHila Gonen u8 *next_hop) 245e35e4d28SHila Gonen { 24614e8a3c4SBeni Lev int ret; 24714e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 24814e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 24914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 25014e8a3c4SBeni Lev return ret; 251e35e4d28SHila Gonen } 252e35e4d28SHila Gonen 253e35e4d28SHila Gonen static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 254e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop, 255e35e4d28SHila Gonen struct mpath_info *pinfo) 256e35e4d28SHila Gonen { 25714e8a3c4SBeni Lev int ret; 25814e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 25914e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 26014e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 26114e8a3c4SBeni Lev return ret; 26214e8a3c4SBeni Lev 263e35e4d28SHila Gonen } 264e35e4d28SHila Gonen 265e35e4d28SHila Gonen static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 266e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *dst, 267e35e4d28SHila Gonen u8 *next_hop, struct mpath_info *pinfo) 268e35e4d28SHila Gonen 269e35e4d28SHila Gonen { 27014e8a3c4SBeni Lev int ret; 27114e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 27214e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 273e35e4d28SHila Gonen pinfo); 27414e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 27514e8a3c4SBeni Lev return ret; 276e35e4d28SHila Gonen } 277e35e4d28SHila Gonen 278e35e4d28SHila Gonen static inline int 279e35e4d28SHila Gonen rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 280e35e4d28SHila Gonen struct net_device *dev, struct mesh_config *conf) 281e35e4d28SHila Gonen { 28214e8a3c4SBeni Lev int ret; 28314e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 28414e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 28514e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 28614e8a3c4SBeni Lev return ret; 287e35e4d28SHila Gonen } 288e35e4d28SHila Gonen 289e35e4d28SHila Gonen static inline int 290e35e4d28SHila Gonen rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 291e35e4d28SHila Gonen struct net_device *dev, u32 mask, 292e35e4d28SHila Gonen const struct mesh_config *nconf) 293e35e4d28SHila Gonen { 29414e8a3c4SBeni Lev int ret; 29514e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 29614e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 29714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 29814e8a3c4SBeni Lev return ret; 299e35e4d28SHila Gonen } 300e35e4d28SHila Gonen 301e35e4d28SHila Gonen static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 302e35e4d28SHila Gonen struct net_device *dev, 303e35e4d28SHila Gonen const struct mesh_config *conf, 304e35e4d28SHila Gonen const struct mesh_setup *setup) 305e35e4d28SHila Gonen { 30614e8a3c4SBeni Lev int ret; 30714e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 30814e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 30914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 31014e8a3c4SBeni Lev return ret; 311e35e4d28SHila Gonen } 312e35e4d28SHila Gonen 313e35e4d28SHila Gonen 314e35e4d28SHila Gonen static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 315e35e4d28SHila Gonen struct net_device *dev) 316e35e4d28SHila Gonen { 31714e8a3c4SBeni Lev int ret; 31814e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 31914e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 32014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 32114e8a3c4SBeni Lev return ret; 322e35e4d28SHila Gonen } 323e35e4d28SHila Gonen 324e35e4d28SHila Gonen static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 325e35e4d28SHila Gonen struct net_device *dev, 326e35e4d28SHila Gonen struct bss_parameters *params) 327e35e4d28SHila Gonen 328e35e4d28SHila Gonen { 32914e8a3c4SBeni Lev int ret; 33014e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 33114e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 33214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 33314e8a3c4SBeni Lev return ret; 334e35e4d28SHila Gonen } 335e35e4d28SHila Gonen 336e35e4d28SHila Gonen static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 337e35e4d28SHila Gonen struct net_device *dev, 338e35e4d28SHila Gonen struct ieee80211_txq_params *params) 339e35e4d28SHila Gonen 340e35e4d28SHila Gonen { 34114e8a3c4SBeni Lev int ret; 34214e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 34314e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 34414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 34514e8a3c4SBeni Lev return ret; 346e35e4d28SHila Gonen } 347e35e4d28SHila Gonen 348e35e4d28SHila Gonen static inline int 349e35e4d28SHila Gonen rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 350e35e4d28SHila Gonen struct net_device *dev, 351e35e4d28SHila Gonen struct ieee80211_channel *chan) 352e35e4d28SHila Gonen { 35314e8a3c4SBeni Lev int ret; 35414e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 35514e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 35614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 35714e8a3c4SBeni Lev return ret; 358e35e4d28SHila Gonen } 359e35e4d28SHila Gonen 360e35e4d28SHila Gonen static inline int 361e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 362683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 363e35e4d28SHila Gonen { 36414e8a3c4SBeni Lev int ret; 365683b6d3bSJohannes Berg trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 366683b6d3bSJohannes Berg ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 36714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 36814e8a3c4SBeni Lev return ret; 369e35e4d28SHila Gonen } 370e35e4d28SHila Gonen 371e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 372e35e4d28SHila Gonen struct cfg80211_scan_request *request) 373e35e4d28SHila Gonen { 37414e8a3c4SBeni Lev int ret; 37514e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 37614e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 37714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 37814e8a3c4SBeni Lev return ret; 379e35e4d28SHila Gonen } 380e35e4d28SHila Gonen 381e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 382e35e4d28SHila Gonen struct net_device *dev, 383e35e4d28SHila Gonen struct cfg80211_auth_request *req) 384e35e4d28SHila Gonen { 38514e8a3c4SBeni Lev int ret; 38614e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 38714e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 38814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 38914e8a3c4SBeni Lev return ret; 390e35e4d28SHila Gonen } 391e35e4d28SHila Gonen 392e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 393e35e4d28SHila Gonen struct net_device *dev, 394e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 395e35e4d28SHila Gonen { 39614e8a3c4SBeni Lev int ret; 39714e8a3c4SBeni Lev trace_rdev_assoc(&rdev->wiphy, dev, req); 39814e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 39914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 40014e8a3c4SBeni Lev return ret; 401e35e4d28SHila Gonen } 402e35e4d28SHila Gonen 403e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 404e35e4d28SHila Gonen struct net_device *dev, 405e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 406e35e4d28SHila Gonen { 40714e8a3c4SBeni Lev int ret; 40814e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 40914e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 41014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 41114e8a3c4SBeni Lev return ret; 412e35e4d28SHila Gonen } 413e35e4d28SHila Gonen 414e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 415e35e4d28SHila Gonen struct net_device *dev, 416e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 417e35e4d28SHila Gonen { 41814e8a3c4SBeni Lev int ret; 41914e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 42014e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 42114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 42214e8a3c4SBeni Lev return ret; 423e35e4d28SHila Gonen } 424e35e4d28SHila Gonen 425e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 426e35e4d28SHila Gonen struct net_device *dev, 427e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 428e35e4d28SHila Gonen { 42914e8a3c4SBeni Lev int ret; 43014e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 43114e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 43214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 43314e8a3c4SBeni Lev return ret; 434e35e4d28SHila Gonen } 435e35e4d28SHila Gonen 436e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 437e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 438e35e4d28SHila Gonen { 43914e8a3c4SBeni Lev int ret; 44014e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 44114e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 44214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 44314e8a3c4SBeni Lev return ret; 444e35e4d28SHila Gonen } 445e35e4d28SHila Gonen 446e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 447e35e4d28SHila Gonen struct net_device *dev, 448e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 449e35e4d28SHila Gonen { 45014e8a3c4SBeni Lev int ret; 45114e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 45214e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 45314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 45414e8a3c4SBeni Lev return ret; 455e35e4d28SHila Gonen } 456e35e4d28SHila Gonen 457e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 458e35e4d28SHila Gonen struct net_device *dev) 459e35e4d28SHila Gonen { 46014e8a3c4SBeni Lev int ret; 46114e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 46214e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 46314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 46414e8a3c4SBeni Lev return ret; 465e35e4d28SHila Gonen } 466e35e4d28SHila Gonen 467e35e4d28SHila Gonen static inline int 468e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 469e35e4d28SHila Gonen { 47014e8a3c4SBeni Lev int ret; 47114e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 47214e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 47314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 47414e8a3c4SBeni Lev return ret; 475e35e4d28SHila Gonen } 476e35e4d28SHila Gonen 477e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 478c8442118SJohannes Berg struct wireless_dev *wdev, 479e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 480e35e4d28SHila Gonen { 48114e8a3c4SBeni Lev int ret; 482c8442118SJohannes Berg trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 483c8442118SJohannes Berg ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 48414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 48514e8a3c4SBeni Lev return ret; 486e35e4d28SHila Gonen } 487e35e4d28SHila Gonen 488e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 489c8442118SJohannes Berg struct wireless_dev *wdev, int *dbm) 490e35e4d28SHila Gonen { 49114e8a3c4SBeni Lev int ret; 492c8442118SJohannes Berg trace_rdev_get_tx_power(&rdev->wiphy, wdev); 493c8442118SJohannes Berg ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 49414e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 49514e8a3c4SBeni Lev return ret; 496e35e4d28SHila Gonen } 497e35e4d28SHila Gonen 498e35e4d28SHila Gonen static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev, 499e35e4d28SHila Gonen struct net_device *dev, const u8 *addr) 500e35e4d28SHila Gonen { 50114e8a3c4SBeni Lev int ret; 50214e8a3c4SBeni Lev trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr); 50314e8a3c4SBeni Lev ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr); 50414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 50514e8a3c4SBeni Lev return ret; 506e35e4d28SHila Gonen } 507e35e4d28SHila Gonen 508e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 509e35e4d28SHila Gonen { 51014e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 511e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 51214e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 513e35e4d28SHila Gonen } 514e35e4d28SHila Gonen 515e35e4d28SHila Gonen 516e35e4d28SHila Gonen #ifdef CONFIG_NL80211_TESTMODE 517e35e4d28SHila Gonen static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 518e35e4d28SHila Gonen void *data, int len) 519e35e4d28SHila Gonen { 52014e8a3c4SBeni Lev int ret; 52114e8a3c4SBeni Lev trace_rdev_testmode_cmd(&rdev->wiphy); 52214e8a3c4SBeni Lev ret = rdev->ops->testmode_cmd(&rdev->wiphy, data, len); 52314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 52414e8a3c4SBeni Lev return ret; 525e35e4d28SHila Gonen } 526e35e4d28SHila Gonen 527e35e4d28SHila Gonen static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 528e35e4d28SHila Gonen struct sk_buff *skb, 529e35e4d28SHila Gonen struct netlink_callback *cb, void *data, 530e35e4d28SHila Gonen int len) 531e35e4d28SHila Gonen { 53214e8a3c4SBeni Lev int ret; 53314e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 53414e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 53514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 53614e8a3c4SBeni Lev return ret; 537e35e4d28SHila Gonen } 538e35e4d28SHila Gonen #endif 539e35e4d28SHila Gonen 540e35e4d28SHila Gonen static inline int 541e35e4d28SHila Gonen rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 542e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 543e35e4d28SHila Gonen const struct cfg80211_bitrate_mask *mask) 544e35e4d28SHila Gonen { 54514e8a3c4SBeni Lev int ret; 54614e8a3c4SBeni Lev trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 54714e8a3c4SBeni Lev ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 54814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 54914e8a3c4SBeni Lev return ret; 550e35e4d28SHila Gonen } 551e35e4d28SHila Gonen 552e35e4d28SHila Gonen static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 553e35e4d28SHila Gonen struct net_device *netdev, int idx, 554e35e4d28SHila Gonen struct survey_info *info) 555e35e4d28SHila Gonen { 55614e8a3c4SBeni Lev int ret; 55714e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 55814e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 55914e8a3c4SBeni Lev if (ret < 0) 56014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 56114e8a3c4SBeni Lev else 56214e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 56314e8a3c4SBeni Lev return ret; 564e35e4d28SHila Gonen } 565e35e4d28SHila Gonen 566e35e4d28SHila Gonen static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 567e35e4d28SHila Gonen struct net_device *netdev, 568e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 569e35e4d28SHila Gonen { 57014e8a3c4SBeni Lev int ret; 57114e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 57214e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 57314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 57414e8a3c4SBeni Lev return ret; 575e35e4d28SHila Gonen } 576e35e4d28SHila Gonen 577e35e4d28SHila Gonen static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 578e35e4d28SHila Gonen struct net_device *netdev, 579e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 580e35e4d28SHila Gonen { 58114e8a3c4SBeni Lev int ret; 58214e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 58314e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 58414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 58514e8a3c4SBeni Lev return ret; 586e35e4d28SHila Gonen } 587e35e4d28SHila Gonen 588e35e4d28SHila Gonen static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 589e35e4d28SHila Gonen struct net_device *netdev) 590e35e4d28SHila Gonen { 59114e8a3c4SBeni Lev int ret; 59214e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 59314e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 59414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 59514e8a3c4SBeni Lev return ret; 596e35e4d28SHila Gonen } 597e35e4d28SHila Gonen 598e35e4d28SHila Gonen static inline int 599e35e4d28SHila Gonen rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 600e35e4d28SHila Gonen struct wireless_dev *wdev, 601e35e4d28SHila Gonen struct ieee80211_channel *chan, 602e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 603e35e4d28SHila Gonen { 60414e8a3c4SBeni Lev int ret; 60542d97a59SJohannes Berg trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 60614e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 60742d97a59SJohannes Berg duration, cookie); 60814e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 60914e8a3c4SBeni Lev return ret; 610e35e4d28SHila Gonen } 611e35e4d28SHila Gonen 612e35e4d28SHila Gonen static inline int 613e35e4d28SHila Gonen rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 614e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 615e35e4d28SHila Gonen { 61614e8a3c4SBeni Lev int ret; 61714e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 61814e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 61914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 62014e8a3c4SBeni Lev return ret; 621e35e4d28SHila Gonen } 622e35e4d28SHila Gonen 623e35e4d28SHila Gonen static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 624e35e4d28SHila Gonen struct wireless_dev *wdev, 625e35e4d28SHila Gonen struct ieee80211_channel *chan, bool offchan, 62642d97a59SJohannes Berg unsigned int wait, const u8 *buf, size_t len, 62742d97a59SJohannes Berg bool no_cck, bool dont_wait_for_ack, u64 *cookie) 628e35e4d28SHila Gonen { 62914e8a3c4SBeni Lev int ret; 63042d97a59SJohannes Berg trace_rdev_mgmt_tx(&rdev->wiphy, wdev, chan, offchan, 63142d97a59SJohannes Berg wait, no_cck, dont_wait_for_ack); 63214e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, chan, offchan, 63342d97a59SJohannes Berg wait, buf, len, no_cck, 63442d97a59SJohannes Berg dont_wait_for_ack, 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_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 641e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 642e35e4d28SHila Gonen { 64314e8a3c4SBeni Lev int ret; 64414e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 64514e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&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_set_power_mgmt(struct cfg80211_registered_device *rdev, 651e35e4d28SHila Gonen struct net_device *dev, bool enabled, 652e35e4d28SHila Gonen int timeout) 653e35e4d28SHila Gonen { 65414e8a3c4SBeni Lev int ret; 65514e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 65614e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 65714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 65814e8a3c4SBeni Lev return ret; 659e35e4d28SHila Gonen } 660e35e4d28SHila Gonen 661e35e4d28SHila Gonen static inline int 662e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 663e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 664e35e4d28SHila Gonen { 66514e8a3c4SBeni Lev int ret; 66614e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 667e35e4d28SHila Gonen rssi_hyst); 66814e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 66914e8a3c4SBeni Lev rssi_hyst); 67014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 67114e8a3c4SBeni Lev return ret; 672e35e4d28SHila Gonen } 673e35e4d28SHila Gonen 674e35e4d28SHila Gonen static inline int 675e35e4d28SHila Gonen rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 676e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 677e35e4d28SHila Gonen { 67814e8a3c4SBeni Lev int ret; 67914e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 68014e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 681e35e4d28SHila Gonen intvl); 68214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 68314e8a3c4SBeni Lev return ret; 684e35e4d28SHila Gonen } 685e35e4d28SHila Gonen 686e35e4d28SHila Gonen static inline void 687e35e4d28SHila Gonen rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev, 688e35e4d28SHila Gonen struct wireless_dev *wdev, u16 frame_type, bool reg) 689e35e4d28SHila Gonen { 69014e8a3c4SBeni Lev trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 69114e8a3c4SBeni Lev rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 69214e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 693e35e4d28SHila Gonen } 694e35e4d28SHila Gonen 695e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 696e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 697e35e4d28SHila Gonen { 69814e8a3c4SBeni Lev int ret; 69914e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 70014e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 70114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 70214e8a3c4SBeni Lev return ret; 703e35e4d28SHila Gonen } 704e35e4d28SHila Gonen 705e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 706e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 707e35e4d28SHila Gonen { 70814e8a3c4SBeni Lev int ret; 70914e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 71014e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 71114e8a3c4SBeni Lev if (ret) 71214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 71314e8a3c4SBeni Lev else 71414e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 71514e8a3c4SBeni Lev *rx_ant); 71614e8a3c4SBeni Lev return ret; 717e35e4d28SHila Gonen } 718e35e4d28SHila Gonen 719e35e4d28SHila Gonen static inline int rdev_set_ringparam(struct cfg80211_registered_device *rdev, 720e35e4d28SHila Gonen u32 tx, u32 rx) 721e35e4d28SHila Gonen { 72214e8a3c4SBeni Lev int ret; 72314e8a3c4SBeni Lev trace_rdev_set_ringparam(&rdev->wiphy, tx, rx); 72414e8a3c4SBeni Lev ret = rdev->ops->set_ringparam(&rdev->wiphy, tx, rx); 72514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 72614e8a3c4SBeni Lev return ret; 727e35e4d28SHila Gonen } 728e35e4d28SHila Gonen 729e35e4d28SHila Gonen static inline void rdev_get_ringparam(struct cfg80211_registered_device *rdev, 730e35e4d28SHila Gonen u32 *tx, u32 *tx_max, u32 *rx, 731e35e4d28SHila Gonen u32 *rx_max) 732e35e4d28SHila Gonen { 73314e8a3c4SBeni Lev trace_rdev_get_ringparam(&rdev->wiphy); 734e35e4d28SHila Gonen rdev->ops->get_ringparam(&rdev->wiphy, tx, tx_max, rx, rx_max); 73514e8a3c4SBeni Lev trace_rdev_return_void_tx_rx(&rdev->wiphy, *tx, *tx_max, *rx, *rx_max); 736e35e4d28SHila Gonen } 737e35e4d28SHila Gonen 738e35e4d28SHila Gonen static inline int 739e35e4d28SHila Gonen rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 740e35e4d28SHila Gonen struct net_device *dev, 741e35e4d28SHila Gonen struct cfg80211_sched_scan_request *request) 742e35e4d28SHila Gonen { 74314e8a3c4SBeni Lev int ret; 74414e8a3c4SBeni Lev trace_rdev_sched_scan_start(&rdev->wiphy, dev, request); 74514e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 74614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 74714e8a3c4SBeni Lev return ret; 748e35e4d28SHila Gonen } 749e35e4d28SHila Gonen 750e35e4d28SHila Gonen static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 751e35e4d28SHila Gonen struct net_device *dev) 752e35e4d28SHila Gonen { 75314e8a3c4SBeni Lev int ret; 75414e8a3c4SBeni Lev trace_rdev_sched_scan_stop(&rdev->wiphy, dev); 75514e8a3c4SBeni Lev ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev); 75614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 75714e8a3c4SBeni Lev return ret; 758e35e4d28SHila Gonen } 759e35e4d28SHila Gonen 760e35e4d28SHila Gonen static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 761e35e4d28SHila Gonen struct net_device *dev, 762e35e4d28SHila Gonen struct cfg80211_gtk_rekey_data *data) 763e35e4d28SHila Gonen { 76414e8a3c4SBeni Lev int ret; 76514e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 76614e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 76714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 76814e8a3c4SBeni Lev return ret; 769e35e4d28SHila Gonen } 770e35e4d28SHila Gonen 771e35e4d28SHila Gonen static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 772e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 773e35e4d28SHila Gonen u8 action_code, u8 dialog_token, 774e35e4d28SHila Gonen u16 status_code, const u8 *buf, size_t len) 775e35e4d28SHila Gonen { 77614e8a3c4SBeni Lev int ret; 77714e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 778e35e4d28SHila Gonen dialog_token, status_code, buf, len); 77914e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 78014e8a3c4SBeni Lev dialog_token, status_code, buf, len); 78114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 78214e8a3c4SBeni Lev return ret; 783e35e4d28SHila Gonen } 784e35e4d28SHila Gonen 785e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 786e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 787e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 788e35e4d28SHila Gonen { 78914e8a3c4SBeni Lev int ret; 79014e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 79114e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 79214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 79314e8a3c4SBeni Lev return ret; 794e35e4d28SHila Gonen } 795e35e4d28SHila Gonen 796e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 797e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 798e35e4d28SHila Gonen u64 *cookie) 799e35e4d28SHila Gonen { 80014e8a3c4SBeni Lev int ret; 80114e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 80214e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 80314e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 80414e8a3c4SBeni Lev return ret; 805e35e4d28SHila Gonen } 806e35e4d28SHila Gonen 807e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 808e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 809e35e4d28SHila Gonen { 81014e8a3c4SBeni Lev int ret; 81114e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 81214e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 81314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 81414e8a3c4SBeni Lev return ret; 815e35e4d28SHila Gonen } 816e35e4d28SHila Gonen 817e35e4d28SHila Gonen static inline int 818e35e4d28SHila Gonen rdev_get_et_sset_count(struct cfg80211_registered_device *rdev, 819e35e4d28SHila Gonen struct net_device *dev, int sset) 820e35e4d28SHila Gonen { 82114e8a3c4SBeni Lev int ret; 82214e8a3c4SBeni Lev trace_rdev_get_et_sset_count(&rdev->wiphy, dev, sset); 82314e8a3c4SBeni Lev ret = rdev->ops->get_et_sset_count(&rdev->wiphy, dev, sset); 82414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 82514e8a3c4SBeni Lev return ret; 826e35e4d28SHila Gonen } 827e35e4d28SHila Gonen 828e35e4d28SHila Gonen static inline void rdev_get_et_stats(struct cfg80211_registered_device *rdev, 829e35e4d28SHila Gonen struct net_device *dev, 830e35e4d28SHila Gonen struct ethtool_stats *stats, u64 *data) 831e35e4d28SHila Gonen { 83214e8a3c4SBeni Lev trace_rdev_get_et_stats(&rdev->wiphy, dev); 833e35e4d28SHila Gonen rdev->ops->get_et_stats(&rdev->wiphy, dev, stats, data); 83414e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 835e35e4d28SHila Gonen } 836e35e4d28SHila Gonen 837e35e4d28SHila Gonen static inline void rdev_get_et_strings(struct cfg80211_registered_device *rdev, 838e35e4d28SHila Gonen struct net_device *dev, u32 sset, 839e35e4d28SHila Gonen u8 *data) 840e35e4d28SHila Gonen { 84114e8a3c4SBeni Lev trace_rdev_get_et_strings(&rdev->wiphy, dev, sset); 842e35e4d28SHila Gonen rdev->ops->get_et_strings(&rdev->wiphy, dev, sset, data); 84314e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 844e35e4d28SHila Gonen } 845e35e4d28SHila Gonen 846683b6d3bSJohannes Berg static inline int 847683b6d3bSJohannes Berg rdev_get_channel(struct cfg80211_registered_device *rdev, 848683b6d3bSJohannes Berg struct wireless_dev *wdev, 849683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 850e35e4d28SHila Gonen { 851683b6d3bSJohannes Berg int ret; 852683b6d3bSJohannes Berg 85314e8a3c4SBeni Lev trace_rdev_get_channel(&rdev->wiphy, wdev); 854683b6d3bSJohannes Berg ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef); 855683b6d3bSJohannes Berg trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 856683b6d3bSJohannes Berg 85714e8a3c4SBeni Lev return ret; 858e35e4d28SHila Gonen } 859e35e4d28SHila Gonen 860eeb126e9SJohannes Berg static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 861eeb126e9SJohannes Berg struct wireless_dev *wdev) 862eeb126e9SJohannes Berg { 863eeb126e9SJohannes Berg int ret; 864eeb126e9SJohannes Berg 865eeb126e9SJohannes Berg trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 866eeb126e9SJohannes Berg ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 867eeb126e9SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 868eeb126e9SJohannes Berg return ret; 869eeb126e9SJohannes Berg } 870eeb126e9SJohannes Berg 871eeb126e9SJohannes Berg static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 872eeb126e9SJohannes Berg struct wireless_dev *wdev) 873eeb126e9SJohannes Berg { 874eeb126e9SJohannes Berg trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 875eeb126e9SJohannes Berg rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 876eeb126e9SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 877eeb126e9SJohannes Berg } 87877765eafSVasanthakumar Thiagarajan 87977765eafSVasanthakumar Thiagarajan static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 88077765eafSVasanthakumar Thiagarajan struct net_device *dev, 88177765eafSVasanthakumar Thiagarajan struct cfg80211_acl_data *params) 88277765eafSVasanthakumar Thiagarajan { 88377765eafSVasanthakumar Thiagarajan int ret; 88477765eafSVasanthakumar Thiagarajan 88577765eafSVasanthakumar Thiagarajan trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 88677765eafSVasanthakumar Thiagarajan ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 88777765eafSVasanthakumar Thiagarajan trace_rdev_return_int(&rdev->wiphy, ret); 88877765eafSVasanthakumar Thiagarajan return ret; 88977765eafSVasanthakumar Thiagarajan } 890*355199e0SJouni Malinen 891*355199e0SJouni Malinen static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 892*355199e0SJouni Malinen struct net_device *dev, 893*355199e0SJouni Malinen struct cfg80211_update_ft_ies_params *ftie) 894*355199e0SJouni Malinen { 895*355199e0SJouni Malinen int ret; 896*355199e0SJouni Malinen 897*355199e0SJouni Malinen trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 898*355199e0SJouni Malinen ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 899*355199e0SJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 900*355199e0SJouni Malinen return ret; 901*355199e0SJouni Malinen } 902*355199e0SJouni Malinen 903e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 904