1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2e35e4d28SHila Gonen #ifndef __CFG80211_RDEV_OPS 3e35e4d28SHila Gonen #define __CFG80211_RDEV_OPS 4e35e4d28SHila Gonen 5e35e4d28SHila Gonen #include <linux/rtnetlink.h> 6e35e4d28SHila Gonen #include <net/cfg80211.h> 7e35e4d28SHila Gonen #include "core.h" 814e8a3c4SBeni Lev #include "trace.h" 9e35e4d28SHila Gonen 1081256969SStanislaw Gruszka static inline int rdev_suspend(struct cfg80211_registered_device *rdev, 1181256969SStanislaw Gruszka struct cfg80211_wowlan *wowlan) 12e35e4d28SHila Gonen { 1314e8a3c4SBeni Lev int ret; 1481256969SStanislaw Gruszka trace_rdev_suspend(&rdev->wiphy, wowlan); 1581256969SStanislaw Gruszka ret = rdev->ops->suspend(&rdev->wiphy, wowlan); 1614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 1714e8a3c4SBeni Lev return ret; 18e35e4d28SHila Gonen } 19e35e4d28SHila Gonen 20e35e4d28SHila Gonen static inline int rdev_resume(struct cfg80211_registered_device *rdev) 21e35e4d28SHila Gonen { 2214e8a3c4SBeni Lev int ret; 2314e8a3c4SBeni Lev trace_rdev_resume(&rdev->wiphy); 2414e8a3c4SBeni Lev ret = rdev->ops->resume(&rdev->wiphy); 2514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 2614e8a3c4SBeni Lev return ret; 27e35e4d28SHila Gonen } 28e35e4d28SHila Gonen 29e35e4d28SHila Gonen static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev, 30e35e4d28SHila Gonen bool enabled) 31e35e4d28SHila Gonen { 3214e8a3c4SBeni Lev trace_rdev_set_wakeup(&rdev->wiphy, enabled); 33e35e4d28SHila Gonen rdev->ops->set_wakeup(&rdev->wiphy, enabled); 3414e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 35e35e4d28SHila Gonen } 36e35e4d28SHila Gonen 37e35e4d28SHila Gonen static inline struct wireless_dev 38e35e4d28SHila Gonen *rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name, 396bab2e19STom Gundersen unsigned char name_assign_type, 40818a986eSJohannes Berg enum nl80211_iftype type, 41e35e4d28SHila Gonen struct vif_params *params) 42e35e4d28SHila Gonen { 4314e8a3c4SBeni Lev struct wireless_dev *ret; 4414e8a3c4SBeni Lev trace_rdev_add_virtual_intf(&rdev->wiphy, name, type); 456bab2e19STom Gundersen ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, name_assign_type, 46818a986eSJohannes Berg type, params); 4714e8a3c4SBeni Lev trace_rdev_return_wdev(&rdev->wiphy, ret); 4814e8a3c4SBeni Lev return ret; 49e35e4d28SHila Gonen } 50e35e4d28SHila Gonen 51e35e4d28SHila Gonen static inline int 52e35e4d28SHila Gonen rdev_del_virtual_intf(struct cfg80211_registered_device *rdev, 53e35e4d28SHila Gonen struct wireless_dev *wdev) 54e35e4d28SHila Gonen { 5514e8a3c4SBeni Lev int ret; 5614e8a3c4SBeni Lev trace_rdev_del_virtual_intf(&rdev->wiphy, wdev); 5714e8a3c4SBeni Lev ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev); 5814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 5914e8a3c4SBeni Lev return ret; 60e35e4d28SHila Gonen } 61e35e4d28SHila Gonen 62e35e4d28SHila Gonen static inline int 63e35e4d28SHila Gonen rdev_change_virtual_intf(struct cfg80211_registered_device *rdev, 64e35e4d28SHila Gonen struct net_device *dev, enum nl80211_iftype type, 65818a986eSJohannes Berg struct vif_params *params) 66e35e4d28SHila Gonen { 6714e8a3c4SBeni Lev int ret; 6814e8a3c4SBeni Lev trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 69818a986eSJohannes Berg ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, params); 7014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 7114e8a3c4SBeni Lev return ret; 72e35e4d28SHila Gonen } 73e35e4d28SHila Gonen 74e35e4d28SHila Gonen static inline int rdev_add_key(struct cfg80211_registered_device *rdev, 75e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 76e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr, 77e35e4d28SHila Gonen struct key_params *params) 78e35e4d28SHila Gonen { 7914e8a3c4SBeni Lev int ret; 806cdd3979SAlexander Wetzel trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, 816cdd3979SAlexander Wetzel mac_addr, params->mode); 8214e8a3c4SBeni Lev ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise, 83e35e4d28SHila Gonen mac_addr, params); 8414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 8514e8a3c4SBeni Lev return ret; 86e35e4d28SHila Gonen } 87e35e4d28SHila Gonen 88e35e4d28SHila Gonen static inline int 89e35e4d28SHila Gonen rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev, 90e35e4d28SHila Gonen u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, 91e35e4d28SHila Gonen void (*callback)(void *cookie, struct key_params*)) 92e35e4d28SHila Gonen { 9314e8a3c4SBeni Lev int ret; 9414e8a3c4SBeni Lev trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 9514e8a3c4SBeni Lev ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise, 96e35e4d28SHila Gonen mac_addr, cookie, callback); 9714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 9814e8a3c4SBeni Lev return ret; 99e35e4d28SHila Gonen } 100e35e4d28SHila Gonen 101e35e4d28SHila Gonen static inline int rdev_del_key(struct cfg80211_registered_device *rdev, 102e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 103e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr) 104e35e4d28SHila Gonen { 10514e8a3c4SBeni Lev int ret; 10614e8a3c4SBeni Lev trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 10714e8a3c4SBeni Lev ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise, 108e35e4d28SHila Gonen mac_addr); 10914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 11014e8a3c4SBeni Lev return ret; 111e35e4d28SHila Gonen } 112e35e4d28SHila Gonen 113e35e4d28SHila Gonen static inline int 114e35e4d28SHila Gonen rdev_set_default_key(struct cfg80211_registered_device *rdev, 115e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, bool unicast, 116e35e4d28SHila Gonen bool multicast) 117e35e4d28SHila Gonen { 11814e8a3c4SBeni Lev int ret; 11914e8a3c4SBeni Lev trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index, 120e35e4d28SHila Gonen unicast, multicast); 12114e8a3c4SBeni Lev ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index, 12214e8a3c4SBeni Lev unicast, multicast); 12314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 12414e8a3c4SBeni Lev return ret; 125e35e4d28SHila Gonen } 126e35e4d28SHila Gonen 127e35e4d28SHila Gonen static inline int 128e35e4d28SHila Gonen rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev, 129e35e4d28SHila Gonen struct net_device *netdev, u8 key_index) 130e35e4d28SHila Gonen { 13114e8a3c4SBeni Lev int ret; 13214e8a3c4SBeni Lev trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index); 13314e8a3c4SBeni Lev ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, 134e35e4d28SHila Gonen key_index); 13514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 13614e8a3c4SBeni Lev return ret; 137e35e4d28SHila Gonen } 138e35e4d28SHila Gonen 13956be393fSJouni Malinen static inline int 14056be393fSJouni Malinen rdev_set_default_beacon_key(struct cfg80211_registered_device *rdev, 14156be393fSJouni Malinen struct net_device *netdev, u8 key_index) 14256be393fSJouni Malinen { 14356be393fSJouni Malinen int ret; 14456be393fSJouni Malinen 14556be393fSJouni Malinen trace_rdev_set_default_beacon_key(&rdev->wiphy, netdev, key_index); 14656be393fSJouni Malinen ret = rdev->ops->set_default_beacon_key(&rdev->wiphy, netdev, 14756be393fSJouni Malinen key_index); 14856be393fSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 14956be393fSJouni Malinen return ret; 15056be393fSJouni Malinen } 15156be393fSJouni Malinen 152e35e4d28SHila Gonen static inline int rdev_start_ap(struct cfg80211_registered_device *rdev, 153e35e4d28SHila Gonen struct net_device *dev, 154e35e4d28SHila Gonen struct cfg80211_ap_settings *settings) 155e35e4d28SHila Gonen { 15614e8a3c4SBeni Lev int ret; 15714e8a3c4SBeni Lev trace_rdev_start_ap(&rdev->wiphy, dev, settings); 15814e8a3c4SBeni Lev ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 15914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 16014e8a3c4SBeni Lev return ret; 161e35e4d28SHila Gonen } 162e35e4d28SHila Gonen 163e35e4d28SHila Gonen static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev, 164e35e4d28SHila Gonen struct net_device *dev, 165e35e4d28SHila Gonen struct cfg80211_beacon_data *info) 166e35e4d28SHila Gonen { 16714e8a3c4SBeni Lev int ret; 16814e8a3c4SBeni Lev trace_rdev_change_beacon(&rdev->wiphy, dev, info); 16914e8a3c4SBeni Lev ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 17014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 17114e8a3c4SBeni Lev return ret; 172e35e4d28SHila Gonen } 173e35e4d28SHila Gonen 174e35e4d28SHila Gonen static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev, 175e35e4d28SHila Gonen struct net_device *dev) 176e35e4d28SHila Gonen { 17714e8a3c4SBeni Lev int ret; 17814e8a3c4SBeni Lev trace_rdev_stop_ap(&rdev->wiphy, dev); 17914e8a3c4SBeni Lev ret = rdev->ops->stop_ap(&rdev->wiphy, dev); 18014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 18114e8a3c4SBeni Lev return ret; 182e35e4d28SHila Gonen } 183e35e4d28SHila Gonen 184e35e4d28SHila Gonen static inline int rdev_add_station(struct cfg80211_registered_device *rdev, 185e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 186e35e4d28SHila Gonen struct station_parameters *params) 187e35e4d28SHila Gonen { 18814e8a3c4SBeni Lev int ret; 18914e8a3c4SBeni Lev trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 19014e8a3c4SBeni Lev ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 19114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 19214e8a3c4SBeni Lev return ret; 193e35e4d28SHila Gonen } 194e35e4d28SHila Gonen 195e35e4d28SHila Gonen static inline int rdev_del_station(struct cfg80211_registered_device *rdev, 19689c771e5SJouni Malinen struct net_device *dev, 19789c771e5SJouni Malinen struct station_del_parameters *params) 198e35e4d28SHila Gonen { 19914e8a3c4SBeni Lev int ret; 20089c771e5SJouni Malinen trace_rdev_del_station(&rdev->wiphy, dev, params); 20189c771e5SJouni Malinen ret = rdev->ops->del_station(&rdev->wiphy, dev, params); 20214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 20314e8a3c4SBeni Lev return ret; 204e35e4d28SHila Gonen } 205e35e4d28SHila Gonen 206e35e4d28SHila Gonen static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 207e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 208e35e4d28SHila Gonen struct station_parameters *params) 209e35e4d28SHila Gonen { 21014e8a3c4SBeni Lev int ret; 21114e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 21214e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 21314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 21414e8a3c4SBeni Lev return ret; 215e35e4d28SHila Gonen } 216e35e4d28SHila Gonen 217e35e4d28SHila Gonen static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 2187406353dSAntonio Quartulli struct net_device *dev, const u8 *mac, 219e35e4d28SHila Gonen struct station_info *sinfo) 220e35e4d28SHila Gonen { 22114e8a3c4SBeni Lev int ret; 22214e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 22314e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 22414e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 22514e8a3c4SBeni Lev return ret; 226e35e4d28SHila Gonen } 227e35e4d28SHila Gonen 228e35e4d28SHila Gonen static inline int rdev_dump_station(struct cfg80211_registered_device *rdev, 229e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *mac, 230e35e4d28SHila Gonen struct station_info *sinfo) 231e35e4d28SHila Gonen { 23214e8a3c4SBeni Lev int ret; 23314e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 23414e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 23514e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 23614e8a3c4SBeni Lev return ret; 237e35e4d28SHila Gonen } 238e35e4d28SHila Gonen 239e35e4d28SHila Gonen static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 240e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop) 241e35e4d28SHila Gonen { 24214e8a3c4SBeni Lev int ret; 24314e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 24414e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 24514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 24614e8a3c4SBeni Lev return ret; 247e35e4d28SHila Gonen } 248e35e4d28SHila Gonen 249e35e4d28SHila Gonen static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 250e35e4d28SHila Gonen struct net_device *dev, u8 *dst) 251e35e4d28SHila Gonen { 25214e8a3c4SBeni Lev int ret; 25314e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 25414e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 25514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 25614e8a3c4SBeni Lev return ret; 257e35e4d28SHila Gonen } 258e35e4d28SHila Gonen 259e35e4d28SHila Gonen static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 260e35e4d28SHila Gonen struct net_device *dev, u8 *dst, 261e35e4d28SHila Gonen u8 *next_hop) 262e35e4d28SHila Gonen { 26314e8a3c4SBeni Lev int ret; 26414e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 26514e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 26614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 26714e8a3c4SBeni Lev return ret; 268e35e4d28SHila Gonen } 269e35e4d28SHila Gonen 270e35e4d28SHila Gonen static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 271e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop, 272e35e4d28SHila Gonen struct mpath_info *pinfo) 273e35e4d28SHila Gonen { 27414e8a3c4SBeni Lev int ret; 27514e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 27614e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 27714e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 27814e8a3c4SBeni Lev return ret; 27914e8a3c4SBeni Lev 280e35e4d28SHila Gonen } 281e35e4d28SHila Gonen 28266be7d2bSHenning Rogge static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev, 28366be7d2bSHenning Rogge struct net_device *dev, u8 *dst, u8 *mpp, 28466be7d2bSHenning Rogge struct mpath_info *pinfo) 28566be7d2bSHenning Rogge { 28666be7d2bSHenning Rogge int ret; 28766be7d2bSHenning Rogge 28866be7d2bSHenning Rogge trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp); 28966be7d2bSHenning Rogge ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo); 29066be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 29166be7d2bSHenning Rogge return ret; 29266be7d2bSHenning Rogge } 29366be7d2bSHenning Rogge 294e35e4d28SHila Gonen static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 295e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *dst, 296e35e4d28SHila Gonen u8 *next_hop, struct mpath_info *pinfo) 297e35e4d28SHila Gonen 298e35e4d28SHila Gonen { 29914e8a3c4SBeni Lev int ret; 30014e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 30114e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 302e35e4d28SHila Gonen pinfo); 30314e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 30414e8a3c4SBeni Lev return ret; 305e35e4d28SHila Gonen } 306e35e4d28SHila Gonen 30766be7d2bSHenning Rogge static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev, 30866be7d2bSHenning Rogge struct net_device *dev, int idx, u8 *dst, 30966be7d2bSHenning Rogge u8 *mpp, struct mpath_info *pinfo) 31066be7d2bSHenning Rogge 31166be7d2bSHenning Rogge { 31266be7d2bSHenning Rogge int ret; 31366be7d2bSHenning Rogge 31466be7d2bSHenning Rogge trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp); 31566be7d2bSHenning Rogge ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo); 31666be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 31766be7d2bSHenning Rogge return ret; 31866be7d2bSHenning Rogge } 31966be7d2bSHenning Rogge 320e35e4d28SHila Gonen static inline int 321e35e4d28SHila Gonen rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 322e35e4d28SHila Gonen struct net_device *dev, struct mesh_config *conf) 323e35e4d28SHila Gonen { 32414e8a3c4SBeni Lev int ret; 32514e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 32614e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 32714e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 32814e8a3c4SBeni Lev return ret; 329e35e4d28SHila Gonen } 330e35e4d28SHila Gonen 331e35e4d28SHila Gonen static inline int 332e35e4d28SHila Gonen rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 333e35e4d28SHila Gonen struct net_device *dev, u32 mask, 334e35e4d28SHila Gonen const struct mesh_config *nconf) 335e35e4d28SHila Gonen { 33614e8a3c4SBeni Lev int ret; 33714e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 33814e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 33914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 34014e8a3c4SBeni Lev return ret; 341e35e4d28SHila Gonen } 342e35e4d28SHila Gonen 343e35e4d28SHila Gonen static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 344e35e4d28SHila Gonen struct net_device *dev, 345e35e4d28SHila Gonen const struct mesh_config *conf, 346e35e4d28SHila Gonen const struct mesh_setup *setup) 347e35e4d28SHila Gonen { 34814e8a3c4SBeni Lev int ret; 34914e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 35014e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 35114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 35214e8a3c4SBeni Lev return ret; 353e35e4d28SHila Gonen } 354e35e4d28SHila Gonen 355e35e4d28SHila Gonen 356e35e4d28SHila Gonen static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 357e35e4d28SHila Gonen struct net_device *dev) 358e35e4d28SHila Gonen { 35914e8a3c4SBeni Lev int ret; 36014e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 36114e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 36214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 36314e8a3c4SBeni Lev return ret; 364e35e4d28SHila Gonen } 365e35e4d28SHila Gonen 3666e0bd6c3SRostislav Lisovy static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev, 3676e0bd6c3SRostislav Lisovy struct net_device *dev, 3686e0bd6c3SRostislav Lisovy struct ocb_setup *setup) 3696e0bd6c3SRostislav Lisovy { 3706e0bd6c3SRostislav Lisovy int ret; 3716e0bd6c3SRostislav Lisovy trace_rdev_join_ocb(&rdev->wiphy, dev, setup); 3726e0bd6c3SRostislav Lisovy ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup); 3736e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3746e0bd6c3SRostislav Lisovy return ret; 3756e0bd6c3SRostislav Lisovy } 3766e0bd6c3SRostislav Lisovy 3776e0bd6c3SRostislav Lisovy static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev, 3786e0bd6c3SRostislav Lisovy struct net_device *dev) 3796e0bd6c3SRostislav Lisovy { 3806e0bd6c3SRostislav Lisovy int ret; 3816e0bd6c3SRostislav Lisovy trace_rdev_leave_ocb(&rdev->wiphy, dev); 3826e0bd6c3SRostislav Lisovy ret = rdev->ops->leave_ocb(&rdev->wiphy, dev); 3836e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3846e0bd6c3SRostislav Lisovy return ret; 3856e0bd6c3SRostislav Lisovy } 3866e0bd6c3SRostislav Lisovy 387e35e4d28SHila Gonen static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 388e35e4d28SHila Gonen struct net_device *dev, 389e35e4d28SHila Gonen struct bss_parameters *params) 390e35e4d28SHila Gonen 391e35e4d28SHila Gonen { 39214e8a3c4SBeni Lev int ret; 39314e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 39414e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 39514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 39614e8a3c4SBeni Lev return ret; 397e35e4d28SHila Gonen } 398e35e4d28SHila Gonen 399e35e4d28SHila Gonen static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 400e35e4d28SHila Gonen struct net_device *dev, 401e35e4d28SHila Gonen struct ieee80211_txq_params *params) 402e35e4d28SHila Gonen 403e35e4d28SHila Gonen { 40414e8a3c4SBeni Lev int ret; 40514e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 40614e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 40714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 40814e8a3c4SBeni Lev return ret; 409e35e4d28SHila Gonen } 410e35e4d28SHila Gonen 411e35e4d28SHila Gonen static inline int 412e35e4d28SHila Gonen rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 413e35e4d28SHila Gonen struct net_device *dev, 414e35e4d28SHila Gonen struct ieee80211_channel *chan) 415e35e4d28SHila Gonen { 41614e8a3c4SBeni Lev int ret; 41714e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 41814e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 41914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 42014e8a3c4SBeni Lev return ret; 421e35e4d28SHila Gonen } 422e35e4d28SHila Gonen 423e35e4d28SHila Gonen static inline int 424e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 425683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 426e35e4d28SHila Gonen { 42714e8a3c4SBeni Lev int ret; 428683b6d3bSJohannes Berg trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 429683b6d3bSJohannes Berg ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 43014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 43114e8a3c4SBeni Lev return ret; 432e35e4d28SHila Gonen } 433e35e4d28SHila Gonen 434e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 435e35e4d28SHila Gonen struct cfg80211_scan_request *request) 436e35e4d28SHila Gonen { 43714e8a3c4SBeni Lev int ret; 43814e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 43914e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 44014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 44114e8a3c4SBeni Lev return ret; 442e35e4d28SHila Gonen } 443e35e4d28SHila Gonen 44491d3ab46SVidyullatha Kanchanapally static inline void rdev_abort_scan(struct cfg80211_registered_device *rdev, 44591d3ab46SVidyullatha Kanchanapally struct wireless_dev *wdev) 44691d3ab46SVidyullatha Kanchanapally { 44791d3ab46SVidyullatha Kanchanapally trace_rdev_abort_scan(&rdev->wiphy, wdev); 44891d3ab46SVidyullatha Kanchanapally rdev->ops->abort_scan(&rdev->wiphy, wdev); 44991d3ab46SVidyullatha Kanchanapally trace_rdev_return_void(&rdev->wiphy); 45091d3ab46SVidyullatha Kanchanapally } 45191d3ab46SVidyullatha Kanchanapally 452e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 453e35e4d28SHila Gonen struct net_device *dev, 454e35e4d28SHila Gonen struct cfg80211_auth_request *req) 455e35e4d28SHila Gonen { 45614e8a3c4SBeni Lev int ret; 45714e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 45814e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 45914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 46014e8a3c4SBeni Lev return ret; 461e35e4d28SHila Gonen } 462e35e4d28SHila Gonen 463e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 464e35e4d28SHila Gonen struct net_device *dev, 465e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 466e35e4d28SHila Gonen { 46764a87472SJohannes Berg const struct cfg80211_bss_ies *bss_ies; 46814e8a3c4SBeni Lev int ret; 46964a87472SJohannes Berg 47064a87472SJohannes Berg /* 47164a87472SJohannes Berg * Note: we might trace not exactly the data that's processed, 47264a87472SJohannes Berg * due to races and the driver/mac80211 getting a newer copy. 47364a87472SJohannes Berg */ 47464a87472SJohannes Berg rcu_read_lock(); 47564a87472SJohannes Berg bss_ies = rcu_dereference(req->bss->ies); 47664a87472SJohannes Berg trace_rdev_assoc(&rdev->wiphy, dev, req, bss_ies); 47764a87472SJohannes Berg rcu_read_unlock(); 47864a87472SJohannes Berg 47914e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 48014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 48114e8a3c4SBeni Lev return ret; 482e35e4d28SHila Gonen } 483e35e4d28SHila Gonen 484e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 485e35e4d28SHila Gonen struct net_device *dev, 486e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 487e35e4d28SHila Gonen { 48814e8a3c4SBeni Lev int ret; 48914e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 49014e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 49114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 49214e8a3c4SBeni Lev return ret; 493e35e4d28SHila Gonen } 494e35e4d28SHila Gonen 495e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 496e35e4d28SHila Gonen struct net_device *dev, 497e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 498e35e4d28SHila Gonen { 49914e8a3c4SBeni Lev int ret; 50014e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 50114e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 50214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 50314e8a3c4SBeni Lev return ret; 504e35e4d28SHila Gonen } 505e35e4d28SHila Gonen 506e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 507e35e4d28SHila Gonen struct net_device *dev, 508e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 509e35e4d28SHila Gonen { 51014e8a3c4SBeni Lev int ret; 51114e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 51214e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 51314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 51414e8a3c4SBeni Lev return ret; 515e35e4d28SHila Gonen } 516e35e4d28SHila Gonen 517088e8df8Svamsi krishna static inline int 518088e8df8Svamsi krishna rdev_update_connect_params(struct cfg80211_registered_device *rdev, 519088e8df8Svamsi krishna struct net_device *dev, 520088e8df8Svamsi krishna struct cfg80211_connect_params *sme, u32 changed) 521088e8df8Svamsi krishna { 522088e8df8Svamsi krishna int ret; 523088e8df8Svamsi krishna trace_rdev_update_connect_params(&rdev->wiphy, dev, sme, changed); 524088e8df8Svamsi krishna ret = rdev->ops->update_connect_params(&rdev->wiphy, dev, sme, changed); 525088e8df8Svamsi krishna trace_rdev_return_int(&rdev->wiphy, ret); 526088e8df8Svamsi krishna return ret; 527088e8df8Svamsi krishna } 528088e8df8Svamsi krishna 529e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 530e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 531e35e4d28SHila Gonen { 53214e8a3c4SBeni Lev int ret; 53314e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 53414e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 53514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 53614e8a3c4SBeni Lev return ret; 537e35e4d28SHila Gonen } 538e35e4d28SHila Gonen 539e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 540e35e4d28SHila Gonen struct net_device *dev, 541e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 542e35e4d28SHila Gonen { 54314e8a3c4SBeni Lev int ret; 54414e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 54514e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 54614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 54714e8a3c4SBeni Lev return ret; 548e35e4d28SHila Gonen } 549e35e4d28SHila Gonen 550e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 551e35e4d28SHila Gonen struct net_device *dev) 552e35e4d28SHila Gonen { 55314e8a3c4SBeni Lev int ret; 55414e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 55514e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 55614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 55714e8a3c4SBeni Lev return ret; 558e35e4d28SHila Gonen } 559e35e4d28SHila Gonen 560e35e4d28SHila Gonen static inline int 561e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 562e35e4d28SHila Gonen { 56314e8a3c4SBeni Lev int ret; 56424953de0SJohannes Berg 56524953de0SJohannes Berg if (!rdev->ops->set_wiphy_params) 56624953de0SJohannes Berg return -EOPNOTSUPP; 56724953de0SJohannes Berg 56814e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 56914e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 57014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 57114e8a3c4SBeni Lev return ret; 572e35e4d28SHila Gonen } 573e35e4d28SHila Gonen 574e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 575c8442118SJohannes Berg struct wireless_dev *wdev, 576e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 577e35e4d28SHila Gonen { 57814e8a3c4SBeni Lev int ret; 579c8442118SJohannes Berg trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 580c8442118SJohannes Berg ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 58114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 58214e8a3c4SBeni Lev return ret; 583e35e4d28SHila Gonen } 584e35e4d28SHila Gonen 585e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 586c8442118SJohannes Berg struct wireless_dev *wdev, int *dbm) 587e35e4d28SHila Gonen { 58814e8a3c4SBeni Lev int ret; 589c8442118SJohannes Berg trace_rdev_get_tx_power(&rdev->wiphy, wdev); 590c8442118SJohannes Berg ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 59114e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 59214e8a3c4SBeni Lev return ret; 593e35e4d28SHila Gonen } 594e35e4d28SHila Gonen 595ce0ce13aSMichael Braun static inline int 596ce0ce13aSMichael Braun rdev_set_multicast_to_unicast(struct cfg80211_registered_device *rdev, 597ce0ce13aSMichael Braun struct net_device *dev, 598ce0ce13aSMichael Braun const bool enabled) 599ce0ce13aSMichael Braun { 600ce0ce13aSMichael Braun int ret; 601ce0ce13aSMichael Braun trace_rdev_set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 602ce0ce13aSMichael Braun ret = rdev->ops->set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 603ce0ce13aSMichael Braun trace_rdev_return_int(&rdev->wiphy, ret); 604ce0ce13aSMichael Braun return ret; 605ce0ce13aSMichael Braun } 606ce0ce13aSMichael Braun 60752539ca8SToke Høiland-Jørgensen static inline int 60852539ca8SToke Høiland-Jørgensen rdev_get_txq_stats(struct cfg80211_registered_device *rdev, 60952539ca8SToke Høiland-Jørgensen struct wireless_dev *wdev, 61052539ca8SToke Høiland-Jørgensen struct cfg80211_txq_stats *txqstats) 61152539ca8SToke Høiland-Jørgensen { 61252539ca8SToke Høiland-Jørgensen int ret; 61352539ca8SToke Høiland-Jørgensen trace_rdev_get_txq_stats(&rdev->wiphy, wdev); 61452539ca8SToke Høiland-Jørgensen ret = rdev->ops->get_txq_stats(&rdev->wiphy, wdev, txqstats); 61552539ca8SToke Høiland-Jørgensen trace_rdev_return_int(&rdev->wiphy, ret); 61652539ca8SToke Høiland-Jørgensen return ret; 61752539ca8SToke Høiland-Jørgensen } 61852539ca8SToke Høiland-Jørgensen 619e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 620e35e4d28SHila Gonen { 62114e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 622e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 62314e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 624e35e4d28SHila Gonen } 625e35e4d28SHila Gonen 626e35e4d28SHila Gonen 627e35e4d28SHila Gonen #ifdef CONFIG_NL80211_TESTMODE 628e35e4d28SHila Gonen static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 629fc73f11fSDavid Spinadel struct wireless_dev *wdev, 630e35e4d28SHila Gonen void *data, int len) 631e35e4d28SHila Gonen { 63214e8a3c4SBeni Lev int ret; 633fc73f11fSDavid Spinadel trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 634fc73f11fSDavid Spinadel ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 63514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 63614e8a3c4SBeni Lev return ret; 637e35e4d28SHila Gonen } 638e35e4d28SHila Gonen 639e35e4d28SHila Gonen static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 640e35e4d28SHila Gonen struct sk_buff *skb, 641e35e4d28SHila Gonen struct netlink_callback *cb, void *data, 642e35e4d28SHila Gonen int len) 643e35e4d28SHila Gonen { 64414e8a3c4SBeni Lev int ret; 64514e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 64614e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 64714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 64814e8a3c4SBeni Lev return ret; 649e35e4d28SHila Gonen } 650e35e4d28SHila Gonen #endif 651e35e4d28SHila Gonen 652e35e4d28SHila Gonen static inline int 653e35e4d28SHila Gonen rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 654e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 655e35e4d28SHila Gonen const struct cfg80211_bitrate_mask *mask) 656e35e4d28SHila Gonen { 65714e8a3c4SBeni Lev int ret; 65814e8a3c4SBeni Lev trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 65914e8a3c4SBeni Lev ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 66014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 66114e8a3c4SBeni Lev return ret; 662e35e4d28SHila Gonen } 663e35e4d28SHila Gonen 664e35e4d28SHila Gonen static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 665e35e4d28SHila Gonen struct net_device *netdev, int idx, 666e35e4d28SHila Gonen struct survey_info *info) 667e35e4d28SHila Gonen { 66814e8a3c4SBeni Lev int ret; 66914e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 67014e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 67114e8a3c4SBeni Lev if (ret < 0) 67214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 67314e8a3c4SBeni Lev else 67414e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 67514e8a3c4SBeni Lev return ret; 676e35e4d28SHila Gonen } 677e35e4d28SHila Gonen 678e35e4d28SHila Gonen static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 679e35e4d28SHila Gonen struct net_device *netdev, 680e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 681e35e4d28SHila Gonen { 68214e8a3c4SBeni Lev int ret; 68314e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 68414e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 68514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 68614e8a3c4SBeni Lev return ret; 687e35e4d28SHila Gonen } 688e35e4d28SHila Gonen 689e35e4d28SHila Gonen static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 690e35e4d28SHila Gonen struct net_device *netdev, 691e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 692e35e4d28SHila Gonen { 69314e8a3c4SBeni Lev int ret; 69414e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 69514e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 69614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 69714e8a3c4SBeni Lev return ret; 698e35e4d28SHila Gonen } 699e35e4d28SHila Gonen 700e35e4d28SHila Gonen static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 701e35e4d28SHila Gonen struct net_device *netdev) 702e35e4d28SHila Gonen { 70314e8a3c4SBeni Lev int ret; 70414e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 70514e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 70614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 70714e8a3c4SBeni Lev return ret; 708e35e4d28SHila Gonen } 709e35e4d28SHila Gonen 710e35e4d28SHila Gonen static inline int 711e35e4d28SHila Gonen rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 712e35e4d28SHila Gonen struct wireless_dev *wdev, 713e35e4d28SHila Gonen struct ieee80211_channel *chan, 714e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 715e35e4d28SHila Gonen { 71614e8a3c4SBeni Lev int ret; 71742d97a59SJohannes Berg trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 71814e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 71942d97a59SJohannes Berg duration, cookie); 72014e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 72114e8a3c4SBeni Lev return ret; 722e35e4d28SHila Gonen } 723e35e4d28SHila Gonen 724e35e4d28SHila Gonen static inline int 725e35e4d28SHila Gonen rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 726e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 727e35e4d28SHila Gonen { 72814e8a3c4SBeni Lev int ret; 72914e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 73014e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 73114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 73214e8a3c4SBeni Lev return ret; 733e35e4d28SHila Gonen } 734e35e4d28SHila Gonen 735e35e4d28SHila Gonen static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 736e35e4d28SHila Gonen struct wireless_dev *wdev, 737b176e629SAndrei Otcheretianski struct cfg80211_mgmt_tx_params *params, 738b176e629SAndrei Otcheretianski u64 *cookie) 739e35e4d28SHila Gonen { 74014e8a3c4SBeni Lev int ret; 741b176e629SAndrei Otcheretianski trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 742b176e629SAndrei Otcheretianski ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 74314e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 74414e8a3c4SBeni Lev return ret; 745e35e4d28SHila Gonen } 746e35e4d28SHila Gonen 7472576a9acSDenis Kenzior static inline int rdev_tx_control_port(struct cfg80211_registered_device *rdev, 7482576a9acSDenis Kenzior struct net_device *dev, 7492576a9acSDenis Kenzior const void *buf, size_t len, 7508d74a623SJohannes Berg const u8 *dest, __be16 proto, 751dca9ca2dSMarkus Theil const bool noencrypt, u64 *cookie) 7522576a9acSDenis Kenzior { 7532576a9acSDenis Kenzior int ret; 7542576a9acSDenis Kenzior trace_rdev_tx_control_port(&rdev->wiphy, dev, buf, len, 7558d74a623SJohannes Berg dest, proto, noencrypt); 7562576a9acSDenis Kenzior ret = rdev->ops->tx_control_port(&rdev->wiphy, dev, buf, len, 757dca9ca2dSMarkus Theil dest, proto, noencrypt, cookie); 758dca9ca2dSMarkus Theil if (cookie) 759dca9ca2dSMarkus Theil trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 760dca9ca2dSMarkus Theil else 7612576a9acSDenis Kenzior trace_rdev_return_int(&rdev->wiphy, ret); 7622576a9acSDenis Kenzior return ret; 7632576a9acSDenis Kenzior } 7642576a9acSDenis Kenzior 765e35e4d28SHila Gonen static inline int 766e35e4d28SHila Gonen rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 767e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 768e35e4d28SHila Gonen { 76914e8a3c4SBeni Lev int ret; 77014e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 77114e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 77214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 77314e8a3c4SBeni Lev return ret; 774e35e4d28SHila Gonen } 775e35e4d28SHila Gonen 776e35e4d28SHila Gonen static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 777e35e4d28SHila Gonen struct net_device *dev, bool enabled, 778e35e4d28SHila Gonen int timeout) 779e35e4d28SHila Gonen { 78014e8a3c4SBeni Lev int ret; 78114e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 78214e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 78314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 78414e8a3c4SBeni Lev return ret; 785e35e4d28SHila Gonen } 786e35e4d28SHila Gonen 787e35e4d28SHila Gonen static inline int 788e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 789e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 790e35e4d28SHila Gonen { 79114e8a3c4SBeni Lev int ret; 79214e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 793e35e4d28SHila Gonen rssi_hyst); 79414e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 79514e8a3c4SBeni Lev rssi_hyst); 79614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 79714e8a3c4SBeni Lev return ret; 798e35e4d28SHila Gonen } 799e35e4d28SHila Gonen 800e35e4d28SHila Gonen static inline int 8014a4b8169SAndrew Zaborowski rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev, 8024a4b8169SAndrew Zaborowski struct net_device *dev, s32 low, s32 high) 8034a4b8169SAndrew Zaborowski { 8044a4b8169SAndrew Zaborowski int ret; 8054a4b8169SAndrew Zaborowski trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high); 8064a4b8169SAndrew Zaborowski ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev, 8074a4b8169SAndrew Zaborowski low, high); 8084a4b8169SAndrew Zaborowski trace_rdev_return_int(&rdev->wiphy, ret); 8094a4b8169SAndrew Zaborowski return ret; 8104a4b8169SAndrew Zaborowski } 8114a4b8169SAndrew Zaborowski 8124a4b8169SAndrew Zaborowski static inline int 813e35e4d28SHila Gonen rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 814e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 815e35e4d28SHila Gonen { 81614e8a3c4SBeni Lev int ret; 81714e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 81814e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 819e35e4d28SHila Gonen intvl); 82014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 82114e8a3c4SBeni Lev return ret; 822e35e4d28SHila Gonen } 823e35e4d28SHila Gonen 824e35e4d28SHila Gonen static inline void 8256cd536feSJohannes Berg rdev_update_mgmt_frame_registrations(struct cfg80211_registered_device *rdev, 8266cd536feSJohannes Berg struct wireless_dev *wdev, 8276cd536feSJohannes Berg struct mgmt_frame_regs *upd) 828e35e4d28SHila Gonen { 82933d8783cSJohannes Berg might_sleep(); 83033d8783cSJohannes Berg 8316cd536feSJohannes Berg trace_rdev_update_mgmt_frame_registrations(&rdev->wiphy, wdev, upd); 8326cd536feSJohannes Berg if (rdev->ops->update_mgmt_frame_registrations) 8336cd536feSJohannes Berg rdev->ops->update_mgmt_frame_registrations(&rdev->wiphy, wdev, 8346cd536feSJohannes Berg upd); 83514e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 836e35e4d28SHila Gonen } 837e35e4d28SHila Gonen 838e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 839e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 840e35e4d28SHila Gonen { 84114e8a3c4SBeni Lev int ret; 84214e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 84314e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 84414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 84514e8a3c4SBeni Lev return ret; 846e35e4d28SHila Gonen } 847e35e4d28SHila Gonen 848e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 849e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 850e35e4d28SHila Gonen { 85114e8a3c4SBeni Lev int ret; 85214e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 85314e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 85414e8a3c4SBeni Lev if (ret) 85514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 85614e8a3c4SBeni Lev else 85714e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 85814e8a3c4SBeni Lev *rx_ant); 85914e8a3c4SBeni Lev return ret; 860e35e4d28SHila Gonen } 861e35e4d28SHila Gonen 862e35e4d28SHila Gonen static inline int 863e35e4d28SHila Gonen rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 864e35e4d28SHila Gonen struct net_device *dev, 865e35e4d28SHila Gonen struct cfg80211_sched_scan_request *request) 866e35e4d28SHila Gonen { 86714e8a3c4SBeni Lev int ret; 868ca986ad9SArend Van Spriel trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid); 86914e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 87014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 87114e8a3c4SBeni Lev return ret; 872e35e4d28SHila Gonen } 873e35e4d28SHila Gonen 874e35e4d28SHila Gonen static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 8753a3ecf1dSArend Van Spriel struct net_device *dev, u64 reqid) 876e35e4d28SHila Gonen { 87714e8a3c4SBeni Lev int ret; 8783a3ecf1dSArend Van Spriel trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid); 8793a3ecf1dSArend Van Spriel ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid); 88014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 88114e8a3c4SBeni Lev return ret; 882e35e4d28SHila Gonen } 883e35e4d28SHila Gonen 884e35e4d28SHila Gonen static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 885e35e4d28SHila Gonen struct net_device *dev, 886e35e4d28SHila Gonen struct cfg80211_gtk_rekey_data *data) 887e35e4d28SHila Gonen { 88814e8a3c4SBeni Lev int ret; 88914e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 89014e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 89114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 89214e8a3c4SBeni Lev return ret; 893e35e4d28SHila Gonen } 894e35e4d28SHila Gonen 895e35e4d28SHila Gonen static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 896e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 897e35e4d28SHila Gonen u8 action_code, u8 dialog_token, 898df942e7bSSunil Dutt Undekari u16 status_code, u32 peer_capability, 89931fa97c5SArik Nemtsov bool initiator, const u8 *buf, size_t len) 900e35e4d28SHila Gonen { 90114e8a3c4SBeni Lev int ret; 90214e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 903df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 90431fa97c5SArik Nemtsov initiator, buf, len); 90514e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 906df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 90731fa97c5SArik Nemtsov initiator, buf, len); 90814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 90914e8a3c4SBeni Lev return ret; 910e35e4d28SHila Gonen } 911e35e4d28SHila Gonen 912e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 913e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 914e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 915e35e4d28SHila Gonen { 91614e8a3c4SBeni Lev int ret; 91714e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 91814e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 91914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 92014e8a3c4SBeni Lev return ret; 921e35e4d28SHila Gonen } 922e35e4d28SHila Gonen 923e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 924e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 925e35e4d28SHila Gonen u64 *cookie) 926e35e4d28SHila Gonen { 92714e8a3c4SBeni Lev int ret; 92814e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 92914e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 93014e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 93114e8a3c4SBeni Lev return ret; 932e35e4d28SHila Gonen } 933e35e4d28SHila Gonen 934e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 935e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 936e35e4d28SHila Gonen { 93714e8a3c4SBeni Lev int ret; 93814e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 93914e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 94014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 94114e8a3c4SBeni Lev return ret; 942e35e4d28SHila Gonen } 943e35e4d28SHila Gonen 944e35e4d28SHila Gonen static inline int 945683b6d3bSJohannes Berg rdev_get_channel(struct cfg80211_registered_device *rdev, 946683b6d3bSJohannes Berg struct wireless_dev *wdev, 947683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 948e35e4d28SHila Gonen { 949683b6d3bSJohannes Berg int ret; 950683b6d3bSJohannes Berg 95114e8a3c4SBeni Lev trace_rdev_get_channel(&rdev->wiphy, wdev); 952683b6d3bSJohannes Berg ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef); 953683b6d3bSJohannes Berg trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 954683b6d3bSJohannes Berg 95514e8a3c4SBeni Lev return ret; 956e35e4d28SHila Gonen } 957e35e4d28SHila Gonen 958eeb126e9SJohannes Berg static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 959eeb126e9SJohannes Berg struct wireless_dev *wdev) 960eeb126e9SJohannes Berg { 961eeb126e9SJohannes Berg int ret; 962eeb126e9SJohannes Berg 963eeb126e9SJohannes Berg trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 964eeb126e9SJohannes Berg ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 965eeb126e9SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 966eeb126e9SJohannes Berg return ret; 967eeb126e9SJohannes Berg } 968eeb126e9SJohannes Berg 969eeb126e9SJohannes Berg static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 970eeb126e9SJohannes Berg struct wireless_dev *wdev) 971eeb126e9SJohannes Berg { 972eeb126e9SJohannes Berg trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 973eeb126e9SJohannes Berg rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 974eeb126e9SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 975eeb126e9SJohannes Berg } 97677765eafSVasanthakumar Thiagarajan 977cb3b7d87SAyala Beker static inline int rdev_start_nan(struct cfg80211_registered_device *rdev, 978cb3b7d87SAyala Beker struct wireless_dev *wdev, 979cb3b7d87SAyala Beker struct cfg80211_nan_conf *conf) 980cb3b7d87SAyala Beker { 981cb3b7d87SAyala Beker int ret; 982cb3b7d87SAyala Beker 983cb3b7d87SAyala Beker trace_rdev_start_nan(&rdev->wiphy, wdev, conf); 984cb3b7d87SAyala Beker ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf); 985cb3b7d87SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 986cb3b7d87SAyala Beker return ret; 987cb3b7d87SAyala Beker } 988cb3b7d87SAyala Beker 989cb3b7d87SAyala Beker static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev, 990cb3b7d87SAyala Beker struct wireless_dev *wdev) 991cb3b7d87SAyala Beker { 992cb3b7d87SAyala Beker trace_rdev_stop_nan(&rdev->wiphy, wdev); 993cb3b7d87SAyala Beker rdev->ops->stop_nan(&rdev->wiphy, wdev); 994cb3b7d87SAyala Beker trace_rdev_return_void(&rdev->wiphy); 995cb3b7d87SAyala Beker } 996cb3b7d87SAyala Beker 997a442b761SAyala Beker static inline int 998a442b761SAyala Beker rdev_add_nan_func(struct cfg80211_registered_device *rdev, 999a442b761SAyala Beker struct wireless_dev *wdev, 1000a442b761SAyala Beker struct cfg80211_nan_func *nan_func) 1001a442b761SAyala Beker { 1002a442b761SAyala Beker int ret; 1003a442b761SAyala Beker 1004a442b761SAyala Beker trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func); 1005a442b761SAyala Beker ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func); 1006a442b761SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 1007a442b761SAyala Beker return ret; 1008a442b761SAyala Beker } 1009a442b761SAyala Beker 1010a442b761SAyala Beker static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev, 1011a442b761SAyala Beker struct wireless_dev *wdev, u64 cookie) 1012a442b761SAyala Beker { 1013a442b761SAyala Beker trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie); 1014a442b761SAyala Beker rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie); 1015a442b761SAyala Beker trace_rdev_return_void(&rdev->wiphy); 1016a442b761SAyala Beker } 1017a442b761SAyala Beker 1018a5a9dcf2SAyala Beker static inline int 1019a5a9dcf2SAyala Beker rdev_nan_change_conf(struct cfg80211_registered_device *rdev, 1020a5a9dcf2SAyala Beker struct wireless_dev *wdev, 1021a5a9dcf2SAyala Beker struct cfg80211_nan_conf *conf, u32 changes) 1022a5a9dcf2SAyala Beker { 1023a5a9dcf2SAyala Beker int ret; 1024a5a9dcf2SAyala Beker 1025a5a9dcf2SAyala Beker trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes); 1026a5a9dcf2SAyala Beker if (rdev->ops->nan_change_conf) 1027a5a9dcf2SAyala Beker ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf, 1028a5a9dcf2SAyala Beker changes); 1029a5a9dcf2SAyala Beker else 1030a5a9dcf2SAyala Beker ret = -ENOTSUPP; 1031a5a9dcf2SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 1032a5a9dcf2SAyala Beker return ret; 1033a5a9dcf2SAyala Beker } 1034a5a9dcf2SAyala Beker 103577765eafSVasanthakumar Thiagarajan static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 103677765eafSVasanthakumar Thiagarajan struct net_device *dev, 103777765eafSVasanthakumar Thiagarajan struct cfg80211_acl_data *params) 103877765eafSVasanthakumar Thiagarajan { 103977765eafSVasanthakumar Thiagarajan int ret; 104077765eafSVasanthakumar Thiagarajan 104177765eafSVasanthakumar Thiagarajan trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 104277765eafSVasanthakumar Thiagarajan ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 104377765eafSVasanthakumar Thiagarajan trace_rdev_return_int(&rdev->wiphy, ret); 104477765eafSVasanthakumar Thiagarajan return ret; 104577765eafSVasanthakumar Thiagarajan } 1046355199e0SJouni Malinen 1047355199e0SJouni Malinen static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 1048355199e0SJouni Malinen struct net_device *dev, 1049355199e0SJouni Malinen struct cfg80211_update_ft_ies_params *ftie) 1050355199e0SJouni Malinen { 1051355199e0SJouni Malinen int ret; 1052355199e0SJouni Malinen 1053355199e0SJouni Malinen trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 1054355199e0SJouni Malinen ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 1055355199e0SJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1056355199e0SJouni Malinen return ret; 10575de17984SArend van Spriel } 10585de17984SArend van Spriel 10595de17984SArend van Spriel static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 10605de17984SArend van Spriel struct wireless_dev *wdev, 10615de17984SArend van Spriel enum nl80211_crit_proto_id protocol, 10625de17984SArend van Spriel u16 duration) 10635de17984SArend van Spriel { 10645de17984SArend van Spriel int ret; 10655de17984SArend van Spriel 10665de17984SArend van Spriel trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 10675de17984SArend van Spriel ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 10685de17984SArend van Spriel protocol, duration); 10695de17984SArend van Spriel trace_rdev_return_int(&rdev->wiphy, ret); 10705de17984SArend van Spriel return ret; 10715de17984SArend van Spriel } 10725de17984SArend van Spriel 10735de17984SArend van Spriel static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 10745de17984SArend van Spriel struct wireless_dev *wdev) 10755de17984SArend van Spriel { 10765de17984SArend van Spriel trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 10775de17984SArend van Spriel rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 10785de17984SArend van Spriel trace_rdev_return_void(&rdev->wiphy); 1079355199e0SJouni Malinen } 1080355199e0SJouni Malinen 108116ef1fe2SSimon Wunderlich static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 108216ef1fe2SSimon Wunderlich struct net_device *dev, 108316ef1fe2SSimon Wunderlich struct cfg80211_csa_settings *params) 108416ef1fe2SSimon Wunderlich { 108516ef1fe2SSimon Wunderlich int ret; 108616ef1fe2SSimon Wunderlich 108716ef1fe2SSimon Wunderlich trace_rdev_channel_switch(&rdev->wiphy, dev, params); 108816ef1fe2SSimon Wunderlich ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 108916ef1fe2SSimon Wunderlich trace_rdev_return_int(&rdev->wiphy, ret); 109016ef1fe2SSimon Wunderlich return ret; 109116ef1fe2SSimon Wunderlich } 109216ef1fe2SSimon Wunderlich 1093fa9ffc74SKyeyoon Park static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 1094fa9ffc74SKyeyoon Park struct net_device *dev, 1095fa9ffc74SKyeyoon Park struct cfg80211_qos_map *qos_map) 1096fa9ffc74SKyeyoon Park { 1097fa9ffc74SKyeyoon Park int ret = -EOPNOTSUPP; 1098fa9ffc74SKyeyoon Park 1099fa9ffc74SKyeyoon Park if (rdev->ops->set_qos_map) { 1100fa9ffc74SKyeyoon Park trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 1101fa9ffc74SKyeyoon Park ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 1102fa9ffc74SKyeyoon Park trace_rdev_return_int(&rdev->wiphy, ret); 1103fa9ffc74SKyeyoon Park } 1104fa9ffc74SKyeyoon Park 1105fa9ffc74SKyeyoon Park return ret; 1106fa9ffc74SKyeyoon Park } 1107fa9ffc74SKyeyoon Park 1108e16821bcSJouni Malinen static inline int 1109e16821bcSJouni Malinen rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 1110e16821bcSJouni Malinen struct net_device *dev, struct cfg80211_chan_def *chandef) 1111e16821bcSJouni Malinen { 1112e16821bcSJouni Malinen int ret; 1113e16821bcSJouni Malinen 1114e16821bcSJouni Malinen trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1115e16821bcSJouni Malinen ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1116e16821bcSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1117e16821bcSJouni Malinen 1118e16821bcSJouni Malinen return ret; 1119e16821bcSJouni Malinen } 1120e16821bcSJouni Malinen 1121960d01acSJohannes Berg static inline int 1122960d01acSJohannes Berg rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 1123960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer, 1124960d01acSJohannes Berg u8 user_prio, u16 admitted_time) 1125960d01acSJohannes Berg { 1126960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1127960d01acSJohannes Berg 1128960d01acSJohannes Berg trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1129960d01acSJohannes Berg user_prio, admitted_time); 1130960d01acSJohannes Berg if (rdev->ops->add_tx_ts) 1131960d01acSJohannes Berg ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1132960d01acSJohannes Berg user_prio, admitted_time); 1133960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1134960d01acSJohannes Berg 1135960d01acSJohannes Berg return ret; 1136960d01acSJohannes Berg } 1137960d01acSJohannes Berg 1138960d01acSJohannes Berg static inline int 1139960d01acSJohannes Berg rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 1140960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer) 1141960d01acSJohannes Berg { 1142960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1143960d01acSJohannes Berg 1144960d01acSJohannes Berg trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1145960d01acSJohannes Berg if (rdev->ops->del_tx_ts) 1146960d01acSJohannes Berg ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1147960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1148960d01acSJohannes Berg 1149960d01acSJohannes Berg return ret; 1150960d01acSJohannes Berg } 1151960d01acSJohannes Berg 11521057d35eSArik Nemtsov static inline int 11531057d35eSArik Nemtsov rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev, 11541057d35eSArik Nemtsov struct net_device *dev, const u8 *addr, 11551057d35eSArik Nemtsov u8 oper_class, struct cfg80211_chan_def *chandef) 11561057d35eSArik Nemtsov { 11571057d35eSArik Nemtsov int ret; 11581057d35eSArik Nemtsov 11591057d35eSArik Nemtsov trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class, 11601057d35eSArik Nemtsov chandef); 11611057d35eSArik Nemtsov ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr, 11621057d35eSArik Nemtsov oper_class, chandef); 11631057d35eSArik Nemtsov trace_rdev_return_int(&rdev->wiphy, ret); 11641057d35eSArik Nemtsov return ret; 11651057d35eSArik Nemtsov } 11661057d35eSArik Nemtsov 11671057d35eSArik Nemtsov static inline void 11681057d35eSArik Nemtsov rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev, 11691057d35eSArik Nemtsov struct net_device *dev, const u8 *addr) 11701057d35eSArik Nemtsov { 11711057d35eSArik Nemtsov trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11721057d35eSArik Nemtsov rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11731057d35eSArik Nemtsov trace_rdev_return_void(&rdev->wiphy); 11741057d35eSArik Nemtsov } 11751057d35eSArik Nemtsov 1176a1056b1bSIlan Peer static inline int 1177a1056b1bSIlan Peer rdev_start_radar_detection(struct cfg80211_registered_device *rdev, 1178a1056b1bSIlan Peer struct net_device *dev, 1179a1056b1bSIlan Peer struct cfg80211_chan_def *chandef, 1180a1056b1bSIlan Peer u32 cac_time_ms) 1181a1056b1bSIlan Peer { 1182a1056b1bSIlan Peer int ret = -ENOTSUPP; 1183a1056b1bSIlan Peer 1184a1056b1bSIlan Peer trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef, 1185a1056b1bSIlan Peer cac_time_ms); 1186a1056b1bSIlan Peer if (rdev->ops->start_radar_detection) 1187a1056b1bSIlan Peer ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev, 1188a1056b1bSIlan Peer chandef, cac_time_ms); 1189a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1190a1056b1bSIlan Peer return ret; 1191a1056b1bSIlan Peer } 1192a1056b1bSIlan Peer 119326ec17a1SOrr Mazor static inline void 119426ec17a1SOrr Mazor rdev_end_cac(struct cfg80211_registered_device *rdev, 119526ec17a1SOrr Mazor struct net_device *dev) 119626ec17a1SOrr Mazor { 119726ec17a1SOrr Mazor trace_rdev_end_cac(&rdev->wiphy, dev); 119826ec17a1SOrr Mazor if (rdev->ops->end_cac) 119926ec17a1SOrr Mazor rdev->ops->end_cac(&rdev->wiphy, dev); 120026ec17a1SOrr Mazor trace_rdev_return_void(&rdev->wiphy); 120126ec17a1SOrr Mazor } 120226ec17a1SOrr Mazor 1203a1056b1bSIlan Peer static inline int 1204a1056b1bSIlan Peer rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, 1205a1056b1bSIlan Peer struct net_device *dev, 120657fbcce3SJohannes Berg int mcast_rate[NUM_NL80211_BANDS]) 1207a1056b1bSIlan Peer { 1208a1056b1bSIlan Peer int ret = -ENOTSUPP; 1209a1056b1bSIlan Peer 1210a1056b1bSIlan Peer trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1211a1056b1bSIlan Peer if (rdev->ops->set_mcast_rate) 1212a1056b1bSIlan Peer ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1213a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1214a1056b1bSIlan Peer return ret; 1215a1056b1bSIlan Peer } 1216a1056b1bSIlan Peer 1217a1056b1bSIlan Peer static inline int 1218a1056b1bSIlan Peer rdev_set_coalesce(struct cfg80211_registered_device *rdev, 1219a1056b1bSIlan Peer struct cfg80211_coalesce *coalesce) 1220a1056b1bSIlan Peer { 1221a1056b1bSIlan Peer int ret = -ENOTSUPP; 1222a1056b1bSIlan Peer 1223a1056b1bSIlan Peer trace_rdev_set_coalesce(&rdev->wiphy, coalesce); 1224a1056b1bSIlan Peer if (rdev->ops->set_coalesce) 1225a1056b1bSIlan Peer ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce); 1226a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1227a1056b1bSIlan Peer return ret; 1228a1056b1bSIlan Peer } 12293a00df57SAvraham Stern 12303a00df57SAvraham Stern static inline int rdev_set_pmk(struct cfg80211_registered_device *rdev, 12313a00df57SAvraham Stern struct net_device *dev, 12323a00df57SAvraham Stern struct cfg80211_pmk_conf *pmk_conf) 12333a00df57SAvraham Stern { 12343a00df57SAvraham Stern int ret = -EOPNOTSUPP; 12353a00df57SAvraham Stern 12363a00df57SAvraham Stern trace_rdev_set_pmk(&rdev->wiphy, dev, pmk_conf); 12373a00df57SAvraham Stern if (rdev->ops->set_pmk) 12383a00df57SAvraham Stern ret = rdev->ops->set_pmk(&rdev->wiphy, dev, pmk_conf); 12393a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 12403a00df57SAvraham Stern return ret; 12413a00df57SAvraham Stern } 12423a00df57SAvraham Stern 12433a00df57SAvraham Stern static inline int rdev_del_pmk(struct cfg80211_registered_device *rdev, 12443a00df57SAvraham Stern struct net_device *dev, const u8 *aa) 12453a00df57SAvraham Stern { 12463a00df57SAvraham Stern int ret = -EOPNOTSUPP; 12473a00df57SAvraham Stern 12483a00df57SAvraham Stern trace_rdev_del_pmk(&rdev->wiphy, dev, aa); 12493a00df57SAvraham Stern if (rdev->ops->del_pmk) 12503a00df57SAvraham Stern ret = rdev->ops->del_pmk(&rdev->wiphy, dev, aa); 12513a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 12523a00df57SAvraham Stern return ret; 12533a00df57SAvraham Stern } 125440cbfa90SSrinivas Dasari 125540cbfa90SSrinivas Dasari static inline int 125640cbfa90SSrinivas Dasari rdev_external_auth(struct cfg80211_registered_device *rdev, 125740cbfa90SSrinivas Dasari struct net_device *dev, 125840cbfa90SSrinivas Dasari struct cfg80211_external_auth_params *params) 125940cbfa90SSrinivas Dasari { 126040cbfa90SSrinivas Dasari int ret = -EOPNOTSUPP; 126140cbfa90SSrinivas Dasari 126240cbfa90SSrinivas Dasari trace_rdev_external_auth(&rdev->wiphy, dev, params); 126340cbfa90SSrinivas Dasari if (rdev->ops->external_auth) 126440cbfa90SSrinivas Dasari ret = rdev->ops->external_auth(&rdev->wiphy, dev, params); 126540cbfa90SSrinivas Dasari trace_rdev_return_int(&rdev->wiphy, ret); 126640cbfa90SSrinivas Dasari return ret; 126740cbfa90SSrinivas Dasari } 126840cbfa90SSrinivas Dasari 126981e54d08SPradeep Kumar Chitrapu static inline int 127081e54d08SPradeep Kumar Chitrapu rdev_get_ftm_responder_stats(struct cfg80211_registered_device *rdev, 127181e54d08SPradeep Kumar Chitrapu struct net_device *dev, 127281e54d08SPradeep Kumar Chitrapu struct cfg80211_ftm_responder_stats *ftm_stats) 127381e54d08SPradeep Kumar Chitrapu { 127481e54d08SPradeep Kumar Chitrapu int ret = -EOPNOTSUPP; 127581e54d08SPradeep Kumar Chitrapu 127681e54d08SPradeep Kumar Chitrapu trace_rdev_get_ftm_responder_stats(&rdev->wiphy, dev, ftm_stats); 127781e54d08SPradeep Kumar Chitrapu if (rdev->ops->get_ftm_responder_stats) 127881e54d08SPradeep Kumar Chitrapu ret = rdev->ops->get_ftm_responder_stats(&rdev->wiphy, dev, 127981e54d08SPradeep Kumar Chitrapu ftm_stats); 128081e54d08SPradeep Kumar Chitrapu trace_rdev_return_int(&rdev->wiphy, ret); 128181e54d08SPradeep Kumar Chitrapu return ret; 128281e54d08SPradeep Kumar Chitrapu } 128381e54d08SPradeep Kumar Chitrapu 12849bb7e0f2SJohannes Berg static inline int 12859bb7e0f2SJohannes Berg rdev_start_pmsr(struct cfg80211_registered_device *rdev, 12869bb7e0f2SJohannes Berg struct wireless_dev *wdev, 12879bb7e0f2SJohannes Berg struct cfg80211_pmsr_request *request) 12889bb7e0f2SJohannes Berg { 12899bb7e0f2SJohannes Berg int ret = -EOPNOTSUPP; 12909bb7e0f2SJohannes Berg 12919bb7e0f2SJohannes Berg trace_rdev_start_pmsr(&rdev->wiphy, wdev, request->cookie); 12929bb7e0f2SJohannes Berg if (rdev->ops->start_pmsr) 12939bb7e0f2SJohannes Berg ret = rdev->ops->start_pmsr(&rdev->wiphy, wdev, request); 12949bb7e0f2SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 12959bb7e0f2SJohannes Berg return ret; 12969bb7e0f2SJohannes Berg } 12979bb7e0f2SJohannes Berg 12989bb7e0f2SJohannes Berg static inline void 12999bb7e0f2SJohannes Berg rdev_abort_pmsr(struct cfg80211_registered_device *rdev, 13009bb7e0f2SJohannes Berg struct wireless_dev *wdev, 13019bb7e0f2SJohannes Berg struct cfg80211_pmsr_request *request) 13029bb7e0f2SJohannes Berg { 13039bb7e0f2SJohannes Berg trace_rdev_abort_pmsr(&rdev->wiphy, wdev, request->cookie); 13049bb7e0f2SJohannes Berg if (rdev->ops->abort_pmsr) 13059bb7e0f2SJohannes Berg rdev->ops->abort_pmsr(&rdev->wiphy, wdev, request); 13069bb7e0f2SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 13079bb7e0f2SJohannes Berg } 13089bb7e0f2SJohannes Berg 1309cb74e977SSunil Dutt static inline int rdev_update_owe_info(struct cfg80211_registered_device *rdev, 1310cb74e977SSunil Dutt struct net_device *dev, 1311cb74e977SSunil Dutt struct cfg80211_update_owe_info *oweinfo) 1312cb74e977SSunil Dutt { 1313cb74e977SSunil Dutt int ret = -EOPNOTSUPP; 1314cb74e977SSunil Dutt 1315cb74e977SSunil Dutt trace_rdev_update_owe_info(&rdev->wiphy, dev, oweinfo); 1316cb74e977SSunil Dutt if (rdev->ops->update_owe_info) 1317cb74e977SSunil Dutt ret = rdev->ops->update_owe_info(&rdev->wiphy, dev, oweinfo); 1318cb74e977SSunil Dutt trace_rdev_return_int(&rdev->wiphy, ret); 1319cb74e977SSunil Dutt return ret; 1320cb74e977SSunil Dutt } 1321cb74e977SSunil Dutt 13225ab92e7fSRajkumar Manoharan static inline int 13235ab92e7fSRajkumar Manoharan rdev_probe_mesh_link(struct cfg80211_registered_device *rdev, 13245ab92e7fSRajkumar Manoharan struct net_device *dev, const u8 *dest, 13255ab92e7fSRajkumar Manoharan const void *buf, size_t len) 13265ab92e7fSRajkumar Manoharan { 13275ab92e7fSRajkumar Manoharan int ret; 13285ab92e7fSRajkumar Manoharan 13295ab92e7fSRajkumar Manoharan trace_rdev_probe_mesh_link(&rdev->wiphy, dev, dest, buf, len); 13305ab92e7fSRajkumar Manoharan ret = rdev->ops->probe_mesh_link(&rdev->wiphy, dev, buf, len); 13315ab92e7fSRajkumar Manoharan trace_rdev_return_int(&rdev->wiphy, ret); 13325ab92e7fSRajkumar Manoharan return ret; 13335ab92e7fSRajkumar Manoharan } 13345ab92e7fSRajkumar Manoharan 133577f576deSTamizh chelvam static inline int rdev_set_tid_config(struct cfg80211_registered_device *rdev, 133677f576deSTamizh chelvam struct net_device *dev, 13373710a8a6SJohannes Berg struct cfg80211_tid_config *tid_conf) 133877f576deSTamizh chelvam { 133977f576deSTamizh chelvam int ret; 134077f576deSTamizh chelvam 134177f576deSTamizh chelvam trace_rdev_set_tid_config(&rdev->wiphy, dev, tid_conf); 134277f576deSTamizh chelvam ret = rdev->ops->set_tid_config(&rdev->wiphy, dev, tid_conf); 134377f576deSTamizh chelvam trace_rdev_return_int(&rdev->wiphy, ret); 134477f576deSTamizh chelvam return ret; 134577f576deSTamizh chelvam } 134677f576deSTamizh chelvam 134777f576deSTamizh chelvam static inline int rdev_reset_tid_config(struct cfg80211_registered_device *rdev, 134877f576deSTamizh chelvam struct net_device *dev, const u8 *peer, 13493710a8a6SJohannes Berg u8 tids) 135077f576deSTamizh chelvam { 135177f576deSTamizh chelvam int ret; 135277f576deSTamizh chelvam 13533710a8a6SJohannes Berg trace_rdev_reset_tid_config(&rdev->wiphy, dev, peer, tids); 13543710a8a6SJohannes Berg ret = rdev->ops->reset_tid_config(&rdev->wiphy, dev, peer, tids); 135577f576deSTamizh chelvam trace_rdev_return_int(&rdev->wiphy, ret); 135677f576deSTamizh chelvam return ret; 135777f576deSTamizh chelvam } 135877f576deSTamizh chelvam 13596bdb68ceSCarl Huang static inline int rdev_set_sar_specs(struct cfg80211_registered_device *rdev, 13606bdb68ceSCarl Huang struct cfg80211_sar_specs *sar) 13616bdb68ceSCarl Huang { 13626bdb68ceSCarl Huang int ret; 13636bdb68ceSCarl Huang 13646bdb68ceSCarl Huang trace_rdev_set_sar_specs(&rdev->wiphy, sar); 13656bdb68ceSCarl Huang ret = rdev->ops->set_sar_specs(&rdev->wiphy, sar); 13666bdb68ceSCarl Huang trace_rdev_return_int(&rdev->wiphy, ret); 13676bdb68ceSCarl Huang 13686bdb68ceSCarl Huang return ret; 13696bdb68ceSCarl Huang } 13706bdb68ceSCarl Huang 1371*0d2ab3aeSJohn Crispin static inline int rdev_color_change(struct cfg80211_registered_device *rdev, 1372*0d2ab3aeSJohn Crispin struct net_device *dev, 1373*0d2ab3aeSJohn Crispin struct cfg80211_color_change_settings *params) 1374*0d2ab3aeSJohn Crispin { 1375*0d2ab3aeSJohn Crispin int ret; 1376*0d2ab3aeSJohn Crispin 1377*0d2ab3aeSJohn Crispin trace_rdev_color_change(&rdev->wiphy, dev, params); 1378*0d2ab3aeSJohn Crispin ret = rdev->ops->color_change(&rdev->wiphy, dev, params); 1379*0d2ab3aeSJohn Crispin trace_rdev_return_int(&rdev->wiphy, ret); 1380*0d2ab3aeSJohn Crispin 1381*0d2ab3aeSJohn Crispin return ret; 1382*0d2ab3aeSJohn Crispin } 1383*0d2ab3aeSJohn Crispin 1384e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 1385