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" 7*14e8a3c4SBeni Lev #include "trace.h" 8e35e4d28SHila Gonen 9e35e4d28SHila Gonen static inline int rdev_suspend(struct cfg80211_registered_device *rdev) 10e35e4d28SHila Gonen { 11*14e8a3c4SBeni Lev int ret; 12*14e8a3c4SBeni Lev trace_rdev_suspend(&rdev->wiphy, rdev->wowlan); 13*14e8a3c4SBeni Lev ret = rdev->ops->suspend(&rdev->wiphy, rdev->wowlan); 14*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 15*14e8a3c4SBeni Lev return ret; 16e35e4d28SHila Gonen } 17e35e4d28SHila Gonen 18e35e4d28SHila Gonen static inline int rdev_resume(struct cfg80211_registered_device *rdev) 19e35e4d28SHila Gonen { 20*14e8a3c4SBeni Lev int ret; 21*14e8a3c4SBeni Lev trace_rdev_resume(&rdev->wiphy); 22*14e8a3c4SBeni Lev ret = rdev->ops->resume(&rdev->wiphy); 23*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 24*14e8a3c4SBeni 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 { 30*14e8a3c4SBeni Lev trace_rdev_set_wakeup(&rdev->wiphy, enabled); 31e35e4d28SHila Gonen rdev->ops->set_wakeup(&rdev->wiphy, enabled); 32*14e8a3c4SBeni 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 { 40*14e8a3c4SBeni Lev struct wireless_dev *ret; 41*14e8a3c4SBeni Lev trace_rdev_add_virtual_intf(&rdev->wiphy, name, type); 42*14e8a3c4SBeni Lev ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, type, flags, 43e35e4d28SHila Gonen params); 44*14e8a3c4SBeni Lev trace_rdev_return_wdev(&rdev->wiphy, ret); 45*14e8a3c4SBeni 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 { 52*14e8a3c4SBeni Lev int ret; 53*14e8a3c4SBeni Lev trace_rdev_del_virtual_intf(&rdev->wiphy, wdev); 54*14e8a3c4SBeni Lev ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev); 55*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 56*14e8a3c4SBeni 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 { 64*14e8a3c4SBeni Lev int ret; 65*14e8a3c4SBeni Lev trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 66*14e8a3c4SBeni Lev ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, flags, 67e35e4d28SHila Gonen params); 68*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 69*14e8a3c4SBeni 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 { 77*14e8a3c4SBeni Lev int ret; 78*14e8a3c4SBeni Lev trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 79*14e8a3c4SBeni Lev ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise, 80e35e4d28SHila Gonen mac_addr, params); 81*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 82*14e8a3c4SBeni 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 { 90*14e8a3c4SBeni Lev int ret; 91*14e8a3c4SBeni Lev trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 92*14e8a3c4SBeni Lev ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise, 93e35e4d28SHila Gonen mac_addr, cookie, callback); 94*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 95*14e8a3c4SBeni 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 { 102*14e8a3c4SBeni Lev int ret; 103*14e8a3c4SBeni Lev trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 104*14e8a3c4SBeni Lev ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise, 105e35e4d28SHila Gonen mac_addr); 106*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 107*14e8a3c4SBeni 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 { 115*14e8a3c4SBeni Lev int ret; 116*14e8a3c4SBeni Lev trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index, 117e35e4d28SHila Gonen unicast, multicast); 118*14e8a3c4SBeni Lev ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index, 119*14e8a3c4SBeni Lev unicast, multicast); 120*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 121*14e8a3c4SBeni 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 { 128*14e8a3c4SBeni Lev int ret; 129*14e8a3c4SBeni Lev trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index); 130*14e8a3c4SBeni Lev ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, 131e35e4d28SHila Gonen key_index); 132*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 133*14e8a3c4SBeni 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 { 140*14e8a3c4SBeni Lev int ret; 141*14e8a3c4SBeni Lev trace_rdev_start_ap(&rdev->wiphy, dev, settings); 142*14e8a3c4SBeni Lev ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 143*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 144*14e8a3c4SBeni 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 { 151*14e8a3c4SBeni Lev int ret; 152*14e8a3c4SBeni Lev trace_rdev_change_beacon(&rdev->wiphy, dev, info); 153*14e8a3c4SBeni Lev ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 154*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 155*14e8a3c4SBeni 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 { 161*14e8a3c4SBeni Lev int ret; 162*14e8a3c4SBeni Lev trace_rdev_stop_ap(&rdev->wiphy, dev); 163*14e8a3c4SBeni Lev ret = rdev->ops->stop_ap(&rdev->wiphy, dev); 164*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 165*14e8a3c4SBeni 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 { 172*14e8a3c4SBeni Lev int ret; 173*14e8a3c4SBeni Lev trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 174*14e8a3c4SBeni Lev ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 175*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 176*14e8a3c4SBeni 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 { 182*14e8a3c4SBeni Lev int ret; 183*14e8a3c4SBeni Lev trace_rdev_del_station(&rdev->wiphy, dev, mac); 184*14e8a3c4SBeni Lev ret = rdev->ops->del_station(&rdev->wiphy, dev, mac); 185*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 186*14e8a3c4SBeni 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 { 193*14e8a3c4SBeni Lev int ret; 194*14e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 195*14e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 196*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 197*14e8a3c4SBeni 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 { 204*14e8a3c4SBeni Lev int ret; 205*14e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 206*14e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 207*14e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 208*14e8a3c4SBeni 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 { 215*14e8a3c4SBeni Lev int ret; 216*14e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 217*14e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 218*14e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 219*14e8a3c4SBeni 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 { 225*14e8a3c4SBeni Lev int ret; 226*14e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 227*14e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 228*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 229*14e8a3c4SBeni 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 { 235*14e8a3c4SBeni Lev int ret; 236*14e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 237*14e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 238*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 239*14e8a3c4SBeni 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 { 246*14e8a3c4SBeni Lev int ret; 247*14e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 248*14e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 249*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 250*14e8a3c4SBeni 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 { 257*14e8a3c4SBeni Lev int ret; 258*14e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 259*14e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 260*14e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 261*14e8a3c4SBeni Lev return ret; 262*14e8a3c4SBeni 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 { 270*14e8a3c4SBeni Lev int ret; 271*14e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 272*14e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 273e35e4d28SHila Gonen pinfo); 274*14e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 275*14e8a3c4SBeni 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 { 282*14e8a3c4SBeni Lev int ret; 283*14e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 284*14e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 285*14e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 286*14e8a3c4SBeni 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 { 294*14e8a3c4SBeni Lev int ret; 295*14e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 296*14e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 297*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 298*14e8a3c4SBeni 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 { 306*14e8a3c4SBeni Lev int ret; 307*14e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 308*14e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 309*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 310*14e8a3c4SBeni 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 { 317*14e8a3c4SBeni Lev int ret; 318*14e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 319*14e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 320*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 321*14e8a3c4SBeni 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 { 329*14e8a3c4SBeni Lev int ret; 330*14e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 331*14e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 332*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 333*14e8a3c4SBeni 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 { 341*14e8a3c4SBeni Lev int ret; 342*14e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 343*14e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 344*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 345*14e8a3c4SBeni 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 { 353*14e8a3c4SBeni Lev int ret; 354*14e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 355*14e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 356*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 357*14e8a3c4SBeni Lev return ret; 358e35e4d28SHila Gonen } 359e35e4d28SHila Gonen 360e35e4d28SHila Gonen static inline int 361e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 362e35e4d28SHila Gonen struct ieee80211_channel *chan, 363e35e4d28SHila Gonen enum nl80211_channel_type channel_type) 364e35e4d28SHila Gonen { 365*14e8a3c4SBeni Lev int ret; 366*14e8a3c4SBeni Lev trace_rdev_set_monitor_channel(&rdev->wiphy, chan, channel_type); 367*14e8a3c4SBeni Lev ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chan, channel_type); 368*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 369*14e8a3c4SBeni Lev return ret; 370e35e4d28SHila Gonen } 371e35e4d28SHila Gonen 372e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 373e35e4d28SHila Gonen struct cfg80211_scan_request *request) 374e35e4d28SHila Gonen { 375*14e8a3c4SBeni Lev int ret; 376*14e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 377*14e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 378*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 379*14e8a3c4SBeni Lev return ret; 380e35e4d28SHila Gonen } 381e35e4d28SHila Gonen 382e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 383e35e4d28SHila Gonen struct net_device *dev, 384e35e4d28SHila Gonen struct cfg80211_auth_request *req) 385e35e4d28SHila Gonen { 386*14e8a3c4SBeni Lev int ret; 387*14e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 388*14e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 389*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 390*14e8a3c4SBeni Lev return ret; 391e35e4d28SHila Gonen } 392e35e4d28SHila Gonen 393e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 394e35e4d28SHila Gonen struct net_device *dev, 395e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 396e35e4d28SHila Gonen { 397*14e8a3c4SBeni Lev int ret; 398*14e8a3c4SBeni Lev trace_rdev_assoc(&rdev->wiphy, dev, req); 399*14e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 400*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 401*14e8a3c4SBeni Lev return ret; 402e35e4d28SHila Gonen } 403e35e4d28SHila Gonen 404e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 405e35e4d28SHila Gonen struct net_device *dev, 406e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 407e35e4d28SHila Gonen { 408*14e8a3c4SBeni Lev int ret; 409*14e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 410*14e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 411*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 412*14e8a3c4SBeni Lev return ret; 413e35e4d28SHila Gonen } 414e35e4d28SHila Gonen 415e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 416e35e4d28SHila Gonen struct net_device *dev, 417e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 418e35e4d28SHila Gonen { 419*14e8a3c4SBeni Lev int ret; 420*14e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 421*14e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 422*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 423*14e8a3c4SBeni Lev return ret; 424e35e4d28SHila Gonen } 425e35e4d28SHila Gonen 426e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 427e35e4d28SHila Gonen struct net_device *dev, 428e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 429e35e4d28SHila Gonen { 430*14e8a3c4SBeni Lev int ret; 431*14e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 432*14e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 433*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 434*14e8a3c4SBeni Lev return ret; 435e35e4d28SHila Gonen } 436e35e4d28SHila Gonen 437e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 438e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 439e35e4d28SHila Gonen { 440*14e8a3c4SBeni Lev int ret; 441*14e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 442*14e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 443*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 444*14e8a3c4SBeni Lev return ret; 445e35e4d28SHila Gonen } 446e35e4d28SHila Gonen 447e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 448e35e4d28SHila Gonen struct net_device *dev, 449e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 450e35e4d28SHila Gonen { 451*14e8a3c4SBeni Lev int ret; 452*14e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 453*14e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 454*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 455*14e8a3c4SBeni Lev return ret; 456e35e4d28SHila Gonen } 457e35e4d28SHila Gonen 458e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 459e35e4d28SHila Gonen struct net_device *dev) 460e35e4d28SHila Gonen { 461*14e8a3c4SBeni Lev int ret; 462*14e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 463*14e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 464*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 465*14e8a3c4SBeni Lev return ret; 466e35e4d28SHila Gonen } 467e35e4d28SHila Gonen 468e35e4d28SHila Gonen static inline int 469e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 470e35e4d28SHila Gonen { 471*14e8a3c4SBeni Lev int ret; 472*14e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 473*14e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 474*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 475*14e8a3c4SBeni Lev return ret; 476e35e4d28SHila Gonen } 477e35e4d28SHila Gonen 478e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 479e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 480e35e4d28SHila Gonen { 481*14e8a3c4SBeni Lev int ret; 482*14e8a3c4SBeni Lev trace_rdev_set_tx_power(&rdev->wiphy, type, mbm); 483*14e8a3c4SBeni Lev ret = rdev->ops->set_tx_power(&rdev->wiphy, type, mbm); 484*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 485*14e8a3c4SBeni Lev return ret; 486e35e4d28SHila Gonen } 487e35e4d28SHila Gonen 488e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 489e35e4d28SHila Gonen int *dbm) 490e35e4d28SHila Gonen { 491*14e8a3c4SBeni Lev int ret; 492*14e8a3c4SBeni Lev trace_rdev_get_tx_power(&rdev->wiphy); 493*14e8a3c4SBeni Lev ret = rdev->ops->get_tx_power(&rdev->wiphy, dbm); 494*14e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 495*14e8a3c4SBeni 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 { 501*14e8a3c4SBeni Lev int ret; 502*14e8a3c4SBeni Lev trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr); 503*14e8a3c4SBeni Lev ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr); 504*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 505*14e8a3c4SBeni Lev return ret; 506e35e4d28SHila Gonen } 507e35e4d28SHila Gonen 508e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 509e35e4d28SHila Gonen { 510*14e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 511e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 512*14e8a3c4SBeni 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 { 520*14e8a3c4SBeni Lev int ret; 521*14e8a3c4SBeni Lev trace_rdev_testmode_cmd(&rdev->wiphy); 522*14e8a3c4SBeni Lev ret = rdev->ops->testmode_cmd(&rdev->wiphy, data, len); 523*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 524*14e8a3c4SBeni 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 { 532*14e8a3c4SBeni Lev int ret; 533*14e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 534*14e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 535*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 536*14e8a3c4SBeni 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 { 545*14e8a3c4SBeni Lev int ret; 546*14e8a3c4SBeni Lev trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 547*14e8a3c4SBeni Lev ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 548*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 549*14e8a3c4SBeni 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 { 556*14e8a3c4SBeni Lev int ret; 557*14e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 558*14e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 559*14e8a3c4SBeni Lev if (ret < 0) 560*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 561*14e8a3c4SBeni Lev else 562*14e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 563*14e8a3c4SBeni 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 { 570*14e8a3c4SBeni Lev int ret; 571*14e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 572*14e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 573*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 574*14e8a3c4SBeni 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 { 581*14e8a3c4SBeni Lev int ret; 582*14e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 583*14e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 584*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 585*14e8a3c4SBeni 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 { 591*14e8a3c4SBeni Lev int ret; 592*14e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 593*14e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 594*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 595*14e8a3c4SBeni 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 enum nl80211_channel_type channel_type, 603e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 604e35e4d28SHila Gonen { 605*14e8a3c4SBeni Lev int ret; 606*14e8a3c4SBeni Lev trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, channel_type, 607*14e8a3c4SBeni Lev duration); 608*14e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 609e35e4d28SHila Gonen channel_type, duration, cookie); 610*14e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 611*14e8a3c4SBeni Lev return ret; 612e35e4d28SHila Gonen } 613e35e4d28SHila Gonen 614e35e4d28SHila Gonen static inline int 615e35e4d28SHila Gonen rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 616e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 617e35e4d28SHila Gonen { 618*14e8a3c4SBeni Lev int ret; 619*14e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 620*14e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 621*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 622*14e8a3c4SBeni Lev return ret; 623e35e4d28SHila Gonen } 624e35e4d28SHila Gonen 625e35e4d28SHila Gonen static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 626e35e4d28SHila Gonen struct wireless_dev *wdev, 627e35e4d28SHila Gonen struct ieee80211_channel *chan, bool offchan, 628e35e4d28SHila Gonen enum nl80211_channel_type channel_type, 629e35e4d28SHila Gonen bool channel_type_valid, unsigned int wait, 630e35e4d28SHila Gonen const u8 *buf, size_t len, bool no_cck, 631e35e4d28SHila Gonen bool dont_wait_for_ack, u64 *cookie) 632e35e4d28SHila Gonen { 633*14e8a3c4SBeni Lev int ret; 634*14e8a3c4SBeni Lev trace_rdev_mgmt_tx(&rdev->wiphy, wdev, chan, offchan, channel_type, 635*14e8a3c4SBeni Lev channel_type_valid, wait, no_cck, dont_wait_for_ack); 636*14e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, chan, offchan, 637e35e4d28SHila Gonen channel_type, channel_type_valid, wait, buf, 638e35e4d28SHila Gonen len, no_cck, dont_wait_for_ack, cookie); 639*14e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 640*14e8a3c4SBeni Lev return ret; 641e35e4d28SHila Gonen } 642e35e4d28SHila Gonen 643e35e4d28SHila Gonen static inline int 644e35e4d28SHila Gonen rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 645e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 646e35e4d28SHila Gonen { 647*14e8a3c4SBeni Lev int ret; 648*14e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 649*14e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 650*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 651*14e8a3c4SBeni Lev return ret; 652e35e4d28SHila Gonen } 653e35e4d28SHila Gonen 654e35e4d28SHila Gonen static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 655e35e4d28SHila Gonen struct net_device *dev, bool enabled, 656e35e4d28SHila Gonen int timeout) 657e35e4d28SHila Gonen { 658*14e8a3c4SBeni Lev int ret; 659*14e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 660*14e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 661*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 662*14e8a3c4SBeni Lev return ret; 663e35e4d28SHila Gonen } 664e35e4d28SHila Gonen 665e35e4d28SHila Gonen static inline int 666e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 667e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 668e35e4d28SHila Gonen { 669*14e8a3c4SBeni Lev int ret; 670*14e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 671e35e4d28SHila Gonen rssi_hyst); 672*14e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 673*14e8a3c4SBeni Lev rssi_hyst); 674*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 675*14e8a3c4SBeni Lev return ret; 676e35e4d28SHila Gonen } 677e35e4d28SHila Gonen 678e35e4d28SHila Gonen static inline int 679e35e4d28SHila Gonen rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 680e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 681e35e4d28SHila Gonen { 682*14e8a3c4SBeni Lev int ret; 683*14e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 684*14e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 685e35e4d28SHila Gonen intvl); 686*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 687*14e8a3c4SBeni Lev return ret; 688e35e4d28SHila Gonen } 689e35e4d28SHila Gonen 690e35e4d28SHila Gonen static inline void 691e35e4d28SHila Gonen rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev, 692e35e4d28SHila Gonen struct wireless_dev *wdev, u16 frame_type, bool reg) 693e35e4d28SHila Gonen { 694*14e8a3c4SBeni Lev trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 695*14e8a3c4SBeni Lev rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 696*14e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 697e35e4d28SHila Gonen } 698e35e4d28SHila Gonen 699e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 700e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 701e35e4d28SHila Gonen { 702*14e8a3c4SBeni Lev int ret; 703*14e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 704*14e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 705*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 706*14e8a3c4SBeni Lev return ret; 707e35e4d28SHila Gonen } 708e35e4d28SHila Gonen 709e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 710e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 711e35e4d28SHila Gonen { 712*14e8a3c4SBeni Lev int ret; 713*14e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 714*14e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 715*14e8a3c4SBeni Lev if (ret) 716*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 717*14e8a3c4SBeni Lev else 718*14e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 719*14e8a3c4SBeni Lev *rx_ant); 720*14e8a3c4SBeni Lev return ret; 721e35e4d28SHila Gonen } 722e35e4d28SHila Gonen 723e35e4d28SHila Gonen static inline int rdev_set_ringparam(struct cfg80211_registered_device *rdev, 724e35e4d28SHila Gonen u32 tx, u32 rx) 725e35e4d28SHila Gonen { 726*14e8a3c4SBeni Lev int ret; 727*14e8a3c4SBeni Lev trace_rdev_set_ringparam(&rdev->wiphy, tx, rx); 728*14e8a3c4SBeni Lev ret = rdev->ops->set_ringparam(&rdev->wiphy, tx, rx); 729*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 730*14e8a3c4SBeni Lev return ret; 731e35e4d28SHila Gonen } 732e35e4d28SHila Gonen 733e35e4d28SHila Gonen static inline void rdev_get_ringparam(struct cfg80211_registered_device *rdev, 734e35e4d28SHila Gonen u32 *tx, u32 *tx_max, u32 *rx, 735e35e4d28SHila Gonen u32 *rx_max) 736e35e4d28SHila Gonen { 737*14e8a3c4SBeni Lev trace_rdev_get_ringparam(&rdev->wiphy); 738e35e4d28SHila Gonen rdev->ops->get_ringparam(&rdev->wiphy, tx, tx_max, rx, rx_max); 739*14e8a3c4SBeni Lev trace_rdev_return_void_tx_rx(&rdev->wiphy, *tx, *tx_max, *rx, *rx_max); 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 { 747*14e8a3c4SBeni Lev int ret; 748*14e8a3c4SBeni Lev trace_rdev_sched_scan_start(&rdev->wiphy, dev, request); 749*14e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 750*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 751*14e8a3c4SBeni 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 { 757*14e8a3c4SBeni Lev int ret; 758*14e8a3c4SBeni Lev trace_rdev_sched_scan_stop(&rdev->wiphy, dev); 759*14e8a3c4SBeni Lev ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev); 760*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 761*14e8a3c4SBeni 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 { 768*14e8a3c4SBeni Lev int ret; 769*14e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 770*14e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 771*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 772*14e8a3c4SBeni 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, 778e35e4d28SHila Gonen u16 status_code, const u8 *buf, size_t len) 779e35e4d28SHila Gonen { 780*14e8a3c4SBeni Lev int ret; 781*14e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 782e35e4d28SHila Gonen dialog_token, status_code, buf, len); 783*14e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 784*14e8a3c4SBeni Lev dialog_token, status_code, buf, len); 785*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 786*14e8a3c4SBeni Lev return ret; 787e35e4d28SHila Gonen } 788e35e4d28SHila Gonen 789e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 790e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 791e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 792e35e4d28SHila Gonen { 793*14e8a3c4SBeni Lev int ret; 794*14e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 795*14e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 796*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 797*14e8a3c4SBeni Lev return ret; 798e35e4d28SHila Gonen } 799e35e4d28SHila Gonen 800e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 801e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 802e35e4d28SHila Gonen u64 *cookie) 803e35e4d28SHila Gonen { 804*14e8a3c4SBeni Lev int ret; 805*14e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 806*14e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 807*14e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 808*14e8a3c4SBeni Lev return ret; 809e35e4d28SHila Gonen } 810e35e4d28SHila Gonen 811e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 812e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 813e35e4d28SHila Gonen { 814*14e8a3c4SBeni Lev int ret; 815*14e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 816*14e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 817*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 818*14e8a3c4SBeni Lev return ret; 819e35e4d28SHila Gonen } 820e35e4d28SHila Gonen 821e35e4d28SHila Gonen static inline int 822e35e4d28SHila Gonen rdev_get_et_sset_count(struct cfg80211_registered_device *rdev, 823e35e4d28SHila Gonen struct net_device *dev, int sset) 824e35e4d28SHila Gonen { 825*14e8a3c4SBeni Lev int ret; 826*14e8a3c4SBeni Lev trace_rdev_get_et_sset_count(&rdev->wiphy, dev, sset); 827*14e8a3c4SBeni Lev ret = rdev->ops->get_et_sset_count(&rdev->wiphy, dev, sset); 828*14e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 829*14e8a3c4SBeni Lev return ret; 830e35e4d28SHila Gonen } 831e35e4d28SHila Gonen 832e35e4d28SHila Gonen static inline void rdev_get_et_stats(struct cfg80211_registered_device *rdev, 833e35e4d28SHila Gonen struct net_device *dev, 834e35e4d28SHila Gonen struct ethtool_stats *stats, u64 *data) 835e35e4d28SHila Gonen { 836*14e8a3c4SBeni Lev trace_rdev_get_et_stats(&rdev->wiphy, dev); 837e35e4d28SHila Gonen rdev->ops->get_et_stats(&rdev->wiphy, dev, stats, data); 838*14e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 839e35e4d28SHila Gonen } 840e35e4d28SHila Gonen 841e35e4d28SHila Gonen static inline void rdev_get_et_strings(struct cfg80211_registered_device *rdev, 842e35e4d28SHila Gonen struct net_device *dev, u32 sset, 843e35e4d28SHila Gonen u8 *data) 844e35e4d28SHila Gonen { 845*14e8a3c4SBeni Lev trace_rdev_get_et_strings(&rdev->wiphy, dev, sset); 846e35e4d28SHila Gonen rdev->ops->get_et_strings(&rdev->wiphy, dev, sset, data); 847*14e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 848e35e4d28SHila Gonen } 849e35e4d28SHila Gonen 850e35e4d28SHila Gonen static inline struct ieee80211_channel 851e35e4d28SHila Gonen *rdev_get_channel(struct cfg80211_registered_device *rdev, 852e35e4d28SHila Gonen struct wireless_dev *wdev, enum nl80211_channel_type *type) 853e35e4d28SHila Gonen { 854*14e8a3c4SBeni Lev struct ieee80211_channel *ret; 855*14e8a3c4SBeni Lev trace_rdev_get_channel(&rdev->wiphy, wdev); 856*14e8a3c4SBeni Lev ret = rdev->ops->get_channel(&rdev->wiphy, wdev, type); 857*14e8a3c4SBeni Lev trace_rdev_return_channel(&rdev->wiphy, ret, *type); 858*14e8a3c4SBeni Lev return ret; 859e35e4d28SHila Gonen } 860e35e4d28SHila Gonen 861e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 862