1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 27b0a0e3cSJohannes Berg /* 37b0a0e3cSJohannes Berg * Portions of this file 47b0a0e3cSJohannes Berg * Copyright(c) 2016-2017 Intel Deutschland GmbH 57b0a0e3cSJohannes Berg * Copyright (C) 2018, 2021-2022 Intel Corporation 67b0a0e3cSJohannes Berg */ 7e35e4d28SHila Gonen #ifndef __CFG80211_RDEV_OPS 8e35e4d28SHila Gonen #define __CFG80211_RDEV_OPS 9e35e4d28SHila Gonen 10e35e4d28SHila Gonen #include <linux/rtnetlink.h> 11e35e4d28SHila Gonen #include <net/cfg80211.h> 12e35e4d28SHila Gonen #include "core.h" 1314e8a3c4SBeni Lev #include "trace.h" 14e35e4d28SHila Gonen 1581256969SStanislaw Gruszka static inline int rdev_suspend(struct cfg80211_registered_device *rdev, 1681256969SStanislaw Gruszka struct cfg80211_wowlan *wowlan) 17e35e4d28SHila Gonen { 1814e8a3c4SBeni Lev int ret; 1981256969SStanislaw Gruszka trace_rdev_suspend(&rdev->wiphy, wowlan); 2081256969SStanislaw Gruszka ret = rdev->ops->suspend(&rdev->wiphy, wowlan); 2114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 2214e8a3c4SBeni Lev return ret; 23e35e4d28SHila Gonen } 24e35e4d28SHila Gonen 25e35e4d28SHila Gonen static inline int rdev_resume(struct cfg80211_registered_device *rdev) 26e35e4d28SHila Gonen { 2714e8a3c4SBeni Lev int ret; 2814e8a3c4SBeni Lev trace_rdev_resume(&rdev->wiphy); 2914e8a3c4SBeni Lev ret = rdev->ops->resume(&rdev->wiphy); 3014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 3114e8a3c4SBeni Lev return ret; 32e35e4d28SHila Gonen } 33e35e4d28SHila Gonen 34e35e4d28SHila Gonen static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev, 35e35e4d28SHila Gonen bool enabled) 36e35e4d28SHila Gonen { 3714e8a3c4SBeni Lev trace_rdev_set_wakeup(&rdev->wiphy, enabled); 38e35e4d28SHila Gonen rdev->ops->set_wakeup(&rdev->wiphy, enabled); 3914e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 40e35e4d28SHila Gonen } 41e35e4d28SHila Gonen 42e35e4d28SHila Gonen static inline struct wireless_dev 43e35e4d28SHila Gonen *rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name, 446bab2e19STom Gundersen unsigned char name_assign_type, 45818a986eSJohannes Berg enum nl80211_iftype type, 46e35e4d28SHila Gonen struct vif_params *params) 47e35e4d28SHila Gonen { 4814e8a3c4SBeni Lev struct wireless_dev *ret; 4914e8a3c4SBeni Lev trace_rdev_add_virtual_intf(&rdev->wiphy, name, type); 506bab2e19STom Gundersen ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, name_assign_type, 51818a986eSJohannes Berg type, params); 5214e8a3c4SBeni Lev trace_rdev_return_wdev(&rdev->wiphy, ret); 5314e8a3c4SBeni Lev return ret; 54e35e4d28SHila Gonen } 55e35e4d28SHila Gonen 56e35e4d28SHila Gonen static inline int 57e35e4d28SHila Gonen rdev_del_virtual_intf(struct cfg80211_registered_device *rdev, 58e35e4d28SHila Gonen struct wireless_dev *wdev) 59e35e4d28SHila Gonen { 6014e8a3c4SBeni Lev int ret; 6114e8a3c4SBeni Lev trace_rdev_del_virtual_intf(&rdev->wiphy, wdev); 6214e8a3c4SBeni Lev ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev); 6314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 6414e8a3c4SBeni Lev return ret; 65e35e4d28SHila Gonen } 66e35e4d28SHila Gonen 67e35e4d28SHila Gonen static inline int 68e35e4d28SHila Gonen rdev_change_virtual_intf(struct cfg80211_registered_device *rdev, 69e35e4d28SHila Gonen struct net_device *dev, enum nl80211_iftype type, 70818a986eSJohannes Berg struct vif_params *params) 71e35e4d28SHila Gonen { 7214e8a3c4SBeni Lev int ret; 7314e8a3c4SBeni Lev trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 74818a986eSJohannes Berg ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, params); 7514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 7614e8a3c4SBeni Lev return ret; 77e35e4d28SHila Gonen } 78e35e4d28SHila Gonen 79e35e4d28SHila Gonen static inline int rdev_add_key(struct cfg80211_registered_device *rdev, 80e7a7b84eSVeerendranath Jakkam struct net_device *netdev, int link_id, 81e7a7b84eSVeerendranath Jakkam u8 key_index, bool pairwise, const u8 *mac_addr, 82e35e4d28SHila Gonen struct key_params *params) 83e35e4d28SHila Gonen { 8414e8a3c4SBeni Lev int ret; 85e7a7b84eSVeerendranath Jakkam trace_rdev_add_key(&rdev->wiphy, netdev, link_id, key_index, pairwise, 866cdd3979SAlexander Wetzel mac_addr, params->mode); 87e7a7b84eSVeerendranath Jakkam ret = rdev->ops->add_key(&rdev->wiphy, netdev, link_id, key_index, 88e7a7b84eSVeerendranath Jakkam pairwise, mac_addr, params); 8914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 9014e8a3c4SBeni Lev return ret; 91e35e4d28SHila Gonen } 92e35e4d28SHila Gonen 93e35e4d28SHila Gonen static inline int 94e35e4d28SHila Gonen rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev, 95e7a7b84eSVeerendranath Jakkam int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, 96e7a7b84eSVeerendranath Jakkam void *cookie, 97e35e4d28SHila Gonen void (*callback)(void *cookie, struct key_params*)) 98e35e4d28SHila Gonen { 9914e8a3c4SBeni Lev int ret; 100e7a7b84eSVeerendranath Jakkam trace_rdev_get_key(&rdev->wiphy, netdev, link_id, key_index, pairwise, 101e7a7b84eSVeerendranath Jakkam mac_addr); 102e7a7b84eSVeerendranath Jakkam ret = rdev->ops->get_key(&rdev->wiphy, netdev, link_id, key_index, 103e7a7b84eSVeerendranath Jakkam pairwise, mac_addr, cookie, callback); 10414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 10514e8a3c4SBeni Lev return ret; 106e35e4d28SHila Gonen } 107e35e4d28SHila Gonen 108e35e4d28SHila Gonen static inline int rdev_del_key(struct cfg80211_registered_device *rdev, 109e7a7b84eSVeerendranath Jakkam struct net_device *netdev, int link_id, 110e7a7b84eSVeerendranath Jakkam u8 key_index, bool pairwise, const u8 *mac_addr) 111e35e4d28SHila Gonen { 11214e8a3c4SBeni Lev int ret; 113e7a7b84eSVeerendranath Jakkam trace_rdev_del_key(&rdev->wiphy, netdev, link_id, key_index, pairwise, 114e35e4d28SHila Gonen mac_addr); 115e7a7b84eSVeerendranath Jakkam ret = rdev->ops->del_key(&rdev->wiphy, netdev, link_id, key_index, 116e7a7b84eSVeerendranath Jakkam pairwise, mac_addr); 11714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 11814e8a3c4SBeni Lev return ret; 119e35e4d28SHila Gonen } 120e35e4d28SHila Gonen 121e35e4d28SHila Gonen static inline int 122e35e4d28SHila Gonen rdev_set_default_key(struct cfg80211_registered_device *rdev, 123e7a7b84eSVeerendranath Jakkam struct net_device *netdev, int link_id, u8 key_index, 124e7a7b84eSVeerendranath Jakkam bool unicast, bool multicast) 125e35e4d28SHila Gonen { 12614e8a3c4SBeni Lev int ret; 127e7a7b84eSVeerendranath Jakkam trace_rdev_set_default_key(&rdev->wiphy, netdev, link_id, key_index, 128e35e4d28SHila Gonen unicast, multicast); 129e7a7b84eSVeerendranath Jakkam ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, link_id, 130e7a7b84eSVeerendranath Jakkam key_index, unicast, multicast); 13114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 13214e8a3c4SBeni Lev return ret; 133e35e4d28SHila Gonen } 134e35e4d28SHila Gonen 135e35e4d28SHila Gonen static inline int 136e35e4d28SHila Gonen rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev, 137e7a7b84eSVeerendranath Jakkam struct net_device *netdev, int link_id, u8 key_index) 138e35e4d28SHila Gonen { 13914e8a3c4SBeni Lev int ret; 140e7a7b84eSVeerendranath Jakkam trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, link_id, 141e7a7b84eSVeerendranath Jakkam key_index); 142e7a7b84eSVeerendranath Jakkam ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, link_id, 143e35e4d28SHila Gonen key_index); 14414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 14514e8a3c4SBeni Lev return ret; 146e35e4d28SHila Gonen } 147e35e4d28SHila Gonen 14856be393fSJouni Malinen static inline int 14956be393fSJouni Malinen rdev_set_default_beacon_key(struct cfg80211_registered_device *rdev, 150e7a7b84eSVeerendranath Jakkam struct net_device *netdev, int link_id, 151e7a7b84eSVeerendranath Jakkam u8 key_index) 15256be393fSJouni Malinen { 15356be393fSJouni Malinen int ret; 15456be393fSJouni Malinen 155e7a7b84eSVeerendranath Jakkam trace_rdev_set_default_beacon_key(&rdev->wiphy, netdev, link_id, 156e7a7b84eSVeerendranath Jakkam key_index); 157e7a7b84eSVeerendranath Jakkam ret = rdev->ops->set_default_beacon_key(&rdev->wiphy, netdev, link_id, 15856be393fSJouni Malinen key_index); 15956be393fSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 16056be393fSJouni Malinen return ret; 16156be393fSJouni Malinen } 16256be393fSJouni Malinen 163e35e4d28SHila Gonen static inline int rdev_start_ap(struct cfg80211_registered_device *rdev, 164e35e4d28SHila Gonen struct net_device *dev, 165e35e4d28SHila Gonen struct cfg80211_ap_settings *settings) 166e35e4d28SHila Gonen { 16714e8a3c4SBeni Lev int ret; 16814e8a3c4SBeni Lev trace_rdev_start_ap(&rdev->wiphy, dev, settings); 16914e8a3c4SBeni Lev ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 17014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 17114e8a3c4SBeni Lev return ret; 172e35e4d28SHila Gonen } 173e35e4d28SHila Gonen 174e35e4d28SHila Gonen static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev, 175e35e4d28SHila Gonen struct net_device *dev, 176e35e4d28SHila Gonen struct cfg80211_beacon_data *info) 177e35e4d28SHila Gonen { 17814e8a3c4SBeni Lev int ret; 17914e8a3c4SBeni Lev trace_rdev_change_beacon(&rdev->wiphy, dev, info); 18014e8a3c4SBeni Lev ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 18114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 18214e8a3c4SBeni Lev return ret; 183e35e4d28SHila Gonen } 184e35e4d28SHila Gonen 185e35e4d28SHila Gonen static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev, 1867b0a0e3cSJohannes Berg struct net_device *dev, unsigned int link_id) 187e35e4d28SHila Gonen { 18814e8a3c4SBeni Lev int ret; 1897b0a0e3cSJohannes Berg trace_rdev_stop_ap(&rdev->wiphy, dev, link_id); 1907b0a0e3cSJohannes Berg ret = rdev->ops->stop_ap(&rdev->wiphy, dev, link_id); 19114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 19214e8a3c4SBeni Lev return ret; 193e35e4d28SHila Gonen } 194e35e4d28SHila Gonen 195e35e4d28SHila Gonen static inline int rdev_add_station(struct cfg80211_registered_device *rdev, 196e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 197e35e4d28SHila Gonen struct station_parameters *params) 198e35e4d28SHila Gonen { 19914e8a3c4SBeni Lev int ret; 20014e8a3c4SBeni Lev trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 20114e8a3c4SBeni Lev ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 20214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 20314e8a3c4SBeni Lev return ret; 204e35e4d28SHila Gonen } 205e35e4d28SHila Gonen 206e35e4d28SHila Gonen static inline int rdev_del_station(struct cfg80211_registered_device *rdev, 20789c771e5SJouni Malinen struct net_device *dev, 20889c771e5SJouni Malinen struct station_del_parameters *params) 209e35e4d28SHila Gonen { 21014e8a3c4SBeni Lev int ret; 21189c771e5SJouni Malinen trace_rdev_del_station(&rdev->wiphy, dev, params); 21289c771e5SJouni Malinen ret = rdev->ops->del_station(&rdev->wiphy, dev, params); 21314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 21414e8a3c4SBeni Lev return ret; 215e35e4d28SHila Gonen } 216e35e4d28SHila Gonen 217e35e4d28SHila Gonen static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 218e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 219e35e4d28SHila Gonen struct station_parameters *params) 220e35e4d28SHila Gonen { 22114e8a3c4SBeni Lev int ret; 22214e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 22314e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 22414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 22514e8a3c4SBeni Lev return ret; 226e35e4d28SHila Gonen } 227e35e4d28SHila Gonen 228e35e4d28SHila Gonen static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 2297406353dSAntonio Quartulli struct net_device *dev, const u8 *mac, 230e35e4d28SHila Gonen struct station_info *sinfo) 231e35e4d28SHila Gonen { 23214e8a3c4SBeni Lev int ret; 23314e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 23414e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, 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_dump_station(struct cfg80211_registered_device *rdev, 240e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *mac, 241e35e4d28SHila Gonen struct station_info *sinfo) 242e35e4d28SHila Gonen { 24314e8a3c4SBeni Lev int ret; 24414e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 24514e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 24614e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 24714e8a3c4SBeni Lev return ret; 248e35e4d28SHila Gonen } 249e35e4d28SHila Gonen 250e35e4d28SHila Gonen static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 251e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop) 252e35e4d28SHila Gonen { 25314e8a3c4SBeni Lev int ret; 25414e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 25514e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 25614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 25714e8a3c4SBeni Lev return ret; 258e35e4d28SHila Gonen } 259e35e4d28SHila Gonen 260e35e4d28SHila Gonen static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 261e35e4d28SHila Gonen struct net_device *dev, u8 *dst) 262e35e4d28SHila Gonen { 26314e8a3c4SBeni Lev int ret; 26414e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 26514e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 26614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 26714e8a3c4SBeni Lev return ret; 268e35e4d28SHila Gonen } 269e35e4d28SHila Gonen 270e35e4d28SHila Gonen static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 271e35e4d28SHila Gonen struct net_device *dev, u8 *dst, 272e35e4d28SHila Gonen u8 *next_hop) 273e35e4d28SHila Gonen { 27414e8a3c4SBeni Lev int ret; 27514e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 27614e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 27714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 27814e8a3c4SBeni Lev return ret; 279e35e4d28SHila Gonen } 280e35e4d28SHila Gonen 281e35e4d28SHila Gonen static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 282e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop, 283e35e4d28SHila Gonen struct mpath_info *pinfo) 284e35e4d28SHila Gonen { 28514e8a3c4SBeni Lev int ret; 28614e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 28714e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 28814e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 28914e8a3c4SBeni Lev return ret; 29014e8a3c4SBeni Lev 291e35e4d28SHila Gonen } 292e35e4d28SHila Gonen 29366be7d2bSHenning Rogge static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev, 29466be7d2bSHenning Rogge struct net_device *dev, u8 *dst, u8 *mpp, 29566be7d2bSHenning Rogge struct mpath_info *pinfo) 29666be7d2bSHenning Rogge { 29766be7d2bSHenning Rogge int ret; 29866be7d2bSHenning Rogge 29966be7d2bSHenning Rogge trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp); 30066be7d2bSHenning Rogge ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo); 30166be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 30266be7d2bSHenning Rogge return ret; 30366be7d2bSHenning Rogge } 30466be7d2bSHenning Rogge 305e35e4d28SHila Gonen static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 306e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *dst, 307e35e4d28SHila Gonen u8 *next_hop, struct mpath_info *pinfo) 308e35e4d28SHila Gonen 309e35e4d28SHila Gonen { 31014e8a3c4SBeni Lev int ret; 31114e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 31214e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 313e35e4d28SHila Gonen pinfo); 31414e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 31514e8a3c4SBeni Lev return ret; 316e35e4d28SHila Gonen } 317e35e4d28SHila Gonen 31866be7d2bSHenning Rogge static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev, 31966be7d2bSHenning Rogge struct net_device *dev, int idx, u8 *dst, 32066be7d2bSHenning Rogge u8 *mpp, struct mpath_info *pinfo) 32166be7d2bSHenning Rogge 32266be7d2bSHenning Rogge { 32366be7d2bSHenning Rogge int ret; 32466be7d2bSHenning Rogge 32566be7d2bSHenning Rogge trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp); 32666be7d2bSHenning Rogge ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo); 32766be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 32866be7d2bSHenning Rogge return ret; 32966be7d2bSHenning Rogge } 33066be7d2bSHenning Rogge 331e35e4d28SHila Gonen static inline int 332e35e4d28SHila Gonen rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 333e35e4d28SHila Gonen struct net_device *dev, struct mesh_config *conf) 334e35e4d28SHila Gonen { 33514e8a3c4SBeni Lev int ret; 33614e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 33714e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 33814e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 33914e8a3c4SBeni Lev return ret; 340e35e4d28SHila Gonen } 341e35e4d28SHila Gonen 342e35e4d28SHila Gonen static inline int 343e35e4d28SHila Gonen rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 344e35e4d28SHila Gonen struct net_device *dev, u32 mask, 345e35e4d28SHila Gonen const struct mesh_config *nconf) 346e35e4d28SHila Gonen { 34714e8a3c4SBeni Lev int ret; 34814e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 34914e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 35014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 35114e8a3c4SBeni Lev return ret; 352e35e4d28SHila Gonen } 353e35e4d28SHila Gonen 354e35e4d28SHila Gonen static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 355e35e4d28SHila Gonen struct net_device *dev, 356e35e4d28SHila Gonen const struct mesh_config *conf, 357e35e4d28SHila Gonen const struct mesh_setup *setup) 358e35e4d28SHila Gonen { 35914e8a3c4SBeni Lev int ret; 36014e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 36114e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 36214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 36314e8a3c4SBeni Lev return ret; 364e35e4d28SHila Gonen } 365e35e4d28SHila Gonen 366e35e4d28SHila Gonen 367e35e4d28SHila Gonen static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 368e35e4d28SHila Gonen struct net_device *dev) 369e35e4d28SHila Gonen { 37014e8a3c4SBeni Lev int ret; 37114e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 37214e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 37314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 37414e8a3c4SBeni Lev return ret; 375e35e4d28SHila Gonen } 376e35e4d28SHila Gonen 3776e0bd6c3SRostislav Lisovy static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev, 3786e0bd6c3SRostislav Lisovy struct net_device *dev, 3796e0bd6c3SRostislav Lisovy struct ocb_setup *setup) 3806e0bd6c3SRostislav Lisovy { 3816e0bd6c3SRostislav Lisovy int ret; 3826e0bd6c3SRostislav Lisovy trace_rdev_join_ocb(&rdev->wiphy, dev, setup); 3836e0bd6c3SRostislav Lisovy ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup); 3846e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3856e0bd6c3SRostislav Lisovy return ret; 3866e0bd6c3SRostislav Lisovy } 3876e0bd6c3SRostislav Lisovy 3886e0bd6c3SRostislav Lisovy static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev, 3896e0bd6c3SRostislav Lisovy struct net_device *dev) 3906e0bd6c3SRostislav Lisovy { 3916e0bd6c3SRostislav Lisovy int ret; 3926e0bd6c3SRostislav Lisovy trace_rdev_leave_ocb(&rdev->wiphy, dev); 3936e0bd6c3SRostislav Lisovy ret = rdev->ops->leave_ocb(&rdev->wiphy, dev); 3946e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3956e0bd6c3SRostislav Lisovy return ret; 3966e0bd6c3SRostislav Lisovy } 3976e0bd6c3SRostislav Lisovy 398e35e4d28SHila Gonen static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 399e35e4d28SHila Gonen struct net_device *dev, 400e35e4d28SHila Gonen struct bss_parameters *params) 401e35e4d28SHila Gonen 402e35e4d28SHila Gonen { 40314e8a3c4SBeni Lev int ret; 40414e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 40514e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 40614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 40714e8a3c4SBeni Lev return ret; 408e35e4d28SHila Gonen } 409e35e4d28SHila Gonen 410e35e4d28SHila Gonen static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 411e35e4d28SHila Gonen struct net_device *dev, 412e35e4d28SHila Gonen struct ieee80211_txq_params *params) 413e35e4d28SHila Gonen 414e35e4d28SHila Gonen { 41514e8a3c4SBeni Lev int ret; 41614e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 41714e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 41814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 41914e8a3c4SBeni Lev return ret; 420e35e4d28SHila Gonen } 421e35e4d28SHila Gonen 422e35e4d28SHila Gonen static inline int 423e35e4d28SHila Gonen rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 424e35e4d28SHila Gonen struct net_device *dev, 425e35e4d28SHila Gonen struct ieee80211_channel *chan) 426e35e4d28SHila Gonen { 42714e8a3c4SBeni Lev int ret; 42814e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 42914e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 43014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 43114e8a3c4SBeni Lev return ret; 432e35e4d28SHila Gonen } 433e35e4d28SHila Gonen 434e35e4d28SHila Gonen static inline int 435e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 436683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 437e35e4d28SHila Gonen { 43814e8a3c4SBeni Lev int ret; 439683b6d3bSJohannes Berg trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 440683b6d3bSJohannes Berg ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 44114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 44214e8a3c4SBeni Lev return ret; 443e35e4d28SHila Gonen } 444e35e4d28SHila Gonen 445e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 446e35e4d28SHila Gonen struct cfg80211_scan_request *request) 447e35e4d28SHila Gonen { 44814e8a3c4SBeni Lev int ret; 44914e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 45014e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 45114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 45214e8a3c4SBeni Lev return ret; 453e35e4d28SHila Gonen } 454e35e4d28SHila Gonen 45591d3ab46SVidyullatha Kanchanapally static inline void rdev_abort_scan(struct cfg80211_registered_device *rdev, 45691d3ab46SVidyullatha Kanchanapally struct wireless_dev *wdev) 45791d3ab46SVidyullatha Kanchanapally { 45891d3ab46SVidyullatha Kanchanapally trace_rdev_abort_scan(&rdev->wiphy, wdev); 45991d3ab46SVidyullatha Kanchanapally rdev->ops->abort_scan(&rdev->wiphy, wdev); 46091d3ab46SVidyullatha Kanchanapally trace_rdev_return_void(&rdev->wiphy); 46191d3ab46SVidyullatha Kanchanapally } 46291d3ab46SVidyullatha Kanchanapally 463e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 464e35e4d28SHila Gonen struct net_device *dev, 465e35e4d28SHila Gonen struct cfg80211_auth_request *req) 466e35e4d28SHila Gonen { 46714e8a3c4SBeni Lev int ret; 46814e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 46914e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 47014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 47114e8a3c4SBeni Lev return ret; 472e35e4d28SHila Gonen } 473e35e4d28SHila Gonen 474e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 475e35e4d28SHila Gonen struct net_device *dev, 476e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 477e35e4d28SHila Gonen { 47814e8a3c4SBeni Lev int ret; 47964a87472SJohannes Berg 4801d4c0f04SJohannes Berg trace_rdev_assoc(&rdev->wiphy, dev, req); 48114e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 48214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 48314e8a3c4SBeni Lev return ret; 484e35e4d28SHila Gonen } 485e35e4d28SHila Gonen 486e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 487e35e4d28SHila Gonen struct net_device *dev, 488e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 489e35e4d28SHila Gonen { 49014e8a3c4SBeni Lev int ret; 49114e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 49214e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 49314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 49414e8a3c4SBeni Lev return ret; 495e35e4d28SHila Gonen } 496e35e4d28SHila Gonen 497e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 498e35e4d28SHila Gonen struct net_device *dev, 499e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 500e35e4d28SHila Gonen { 50114e8a3c4SBeni Lev int ret; 50214e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 50314e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 50414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 50514e8a3c4SBeni Lev return ret; 506e35e4d28SHila Gonen } 507e35e4d28SHila Gonen 508e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 509e35e4d28SHila Gonen struct net_device *dev, 510e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 511e35e4d28SHila Gonen { 51214e8a3c4SBeni Lev int ret; 51314e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 51414e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 51514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 51614e8a3c4SBeni Lev return ret; 517e35e4d28SHila Gonen } 518e35e4d28SHila Gonen 519088e8df8Svamsi krishna static inline int 520088e8df8Svamsi krishna rdev_update_connect_params(struct cfg80211_registered_device *rdev, 521088e8df8Svamsi krishna struct net_device *dev, 522088e8df8Svamsi krishna struct cfg80211_connect_params *sme, u32 changed) 523088e8df8Svamsi krishna { 524088e8df8Svamsi krishna int ret; 525088e8df8Svamsi krishna trace_rdev_update_connect_params(&rdev->wiphy, dev, sme, changed); 526088e8df8Svamsi krishna ret = rdev->ops->update_connect_params(&rdev->wiphy, dev, sme, changed); 527088e8df8Svamsi krishna trace_rdev_return_int(&rdev->wiphy, ret); 528088e8df8Svamsi krishna return ret; 529088e8df8Svamsi krishna } 530088e8df8Svamsi krishna 531e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 532e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 533e35e4d28SHila Gonen { 53414e8a3c4SBeni Lev int ret; 53514e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 53614e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 53714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 53814e8a3c4SBeni Lev return ret; 539e35e4d28SHila Gonen } 540e35e4d28SHila Gonen 541e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 542e35e4d28SHila Gonen struct net_device *dev, 543e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 544e35e4d28SHila Gonen { 54514e8a3c4SBeni Lev int ret; 54614e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 54714e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 54814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 54914e8a3c4SBeni Lev return ret; 550e35e4d28SHila Gonen } 551e35e4d28SHila Gonen 552e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 553e35e4d28SHila Gonen struct net_device *dev) 554e35e4d28SHila Gonen { 55514e8a3c4SBeni Lev int ret; 55614e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 55714e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 55814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 55914e8a3c4SBeni Lev return ret; 560e35e4d28SHila Gonen } 561e35e4d28SHila Gonen 562e35e4d28SHila Gonen static inline int 563e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 564e35e4d28SHila Gonen { 56514e8a3c4SBeni Lev int ret; 56624953de0SJohannes Berg 56724953de0SJohannes Berg if (!rdev->ops->set_wiphy_params) 56824953de0SJohannes Berg return -EOPNOTSUPP; 56924953de0SJohannes Berg 57014e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 57114e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 57214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 57314e8a3c4SBeni Lev return ret; 574e35e4d28SHila Gonen } 575e35e4d28SHila Gonen 576e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 577c8442118SJohannes Berg struct wireless_dev *wdev, 578e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 579e35e4d28SHila Gonen { 58014e8a3c4SBeni Lev int ret; 581c8442118SJohannes Berg trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 582c8442118SJohannes Berg ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 58314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 58414e8a3c4SBeni Lev return ret; 585e35e4d28SHila Gonen } 586e35e4d28SHila Gonen 587e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 588c8442118SJohannes Berg struct wireless_dev *wdev, int *dbm) 589e35e4d28SHila Gonen { 59014e8a3c4SBeni Lev int ret; 591c8442118SJohannes Berg trace_rdev_get_tx_power(&rdev->wiphy, wdev); 592c8442118SJohannes Berg ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 59314e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 59414e8a3c4SBeni Lev return ret; 595e35e4d28SHila Gonen } 596e35e4d28SHila Gonen 597ce0ce13aSMichael Braun static inline int 598ce0ce13aSMichael Braun rdev_set_multicast_to_unicast(struct cfg80211_registered_device *rdev, 599ce0ce13aSMichael Braun struct net_device *dev, 600ce0ce13aSMichael Braun const bool enabled) 601ce0ce13aSMichael Braun { 602ce0ce13aSMichael Braun int ret; 603ce0ce13aSMichael Braun trace_rdev_set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 604ce0ce13aSMichael Braun ret = rdev->ops->set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 605ce0ce13aSMichael Braun trace_rdev_return_int(&rdev->wiphy, ret); 606ce0ce13aSMichael Braun return ret; 607ce0ce13aSMichael Braun } 608ce0ce13aSMichael Braun 60952539ca8SToke Høiland-Jørgensen static inline int 61052539ca8SToke Høiland-Jørgensen rdev_get_txq_stats(struct cfg80211_registered_device *rdev, 61152539ca8SToke Høiland-Jørgensen struct wireless_dev *wdev, 61252539ca8SToke Høiland-Jørgensen struct cfg80211_txq_stats *txqstats) 61352539ca8SToke Høiland-Jørgensen { 61452539ca8SToke Høiland-Jørgensen int ret; 61552539ca8SToke Høiland-Jørgensen trace_rdev_get_txq_stats(&rdev->wiphy, wdev); 61652539ca8SToke Høiland-Jørgensen ret = rdev->ops->get_txq_stats(&rdev->wiphy, wdev, txqstats); 61752539ca8SToke Høiland-Jørgensen trace_rdev_return_int(&rdev->wiphy, ret); 61852539ca8SToke Høiland-Jørgensen return ret; 61952539ca8SToke Høiland-Jørgensen } 62052539ca8SToke Høiland-Jørgensen 621e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 622e35e4d28SHila Gonen { 62314e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 624e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 62514e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 626e35e4d28SHila Gonen } 627e35e4d28SHila Gonen 628e35e4d28SHila Gonen 629e35e4d28SHila Gonen #ifdef CONFIG_NL80211_TESTMODE 630e35e4d28SHila Gonen static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 631fc73f11fSDavid Spinadel struct wireless_dev *wdev, 632e35e4d28SHila Gonen void *data, int len) 633e35e4d28SHila Gonen { 63414e8a3c4SBeni Lev int ret; 635fc73f11fSDavid Spinadel trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 636fc73f11fSDavid Spinadel ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 63714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 63814e8a3c4SBeni Lev return ret; 639e35e4d28SHila Gonen } 640e35e4d28SHila Gonen 641e35e4d28SHila Gonen static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 642e35e4d28SHila Gonen struct sk_buff *skb, 643e35e4d28SHila Gonen struct netlink_callback *cb, void *data, 644e35e4d28SHila Gonen int len) 645e35e4d28SHila Gonen { 64614e8a3c4SBeni Lev int ret; 64714e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 64814e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 64914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 65014e8a3c4SBeni Lev return ret; 651e35e4d28SHila Gonen } 652e35e4d28SHila Gonen #endif 653e35e4d28SHila Gonen 654e35e4d28SHila Gonen static inline int 655e35e4d28SHila Gonen rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 6567b0a0e3cSJohannes Berg struct net_device *dev, unsigned int link_id, 6577b0a0e3cSJohannes Berg const u8 *peer, 658e35e4d28SHila Gonen const struct cfg80211_bitrate_mask *mask) 659e35e4d28SHila Gonen { 66014e8a3c4SBeni Lev int ret; 6617b0a0e3cSJohannes Berg trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, link_id, peer, mask); 6627b0a0e3cSJohannes Berg ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, link_id, 6637b0a0e3cSJohannes Berg peer, mask); 66414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 66514e8a3c4SBeni Lev return ret; 666e35e4d28SHila Gonen } 667e35e4d28SHila Gonen 668e35e4d28SHila Gonen static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 669e35e4d28SHila Gonen struct net_device *netdev, int idx, 670e35e4d28SHila Gonen struct survey_info *info) 671e35e4d28SHila Gonen { 67214e8a3c4SBeni Lev int ret; 67314e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 67414e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 67514e8a3c4SBeni Lev if (ret < 0) 67614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 67714e8a3c4SBeni Lev else 67814e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 67914e8a3c4SBeni Lev return ret; 680e35e4d28SHila Gonen } 681e35e4d28SHila Gonen 682e35e4d28SHila Gonen static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 683e35e4d28SHila Gonen struct net_device *netdev, 684e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 685e35e4d28SHila Gonen { 68614e8a3c4SBeni Lev int ret; 68714e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 68814e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 68914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 69014e8a3c4SBeni Lev return ret; 691e35e4d28SHila Gonen } 692e35e4d28SHila Gonen 693e35e4d28SHila Gonen static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 694e35e4d28SHila Gonen struct net_device *netdev, 695e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 696e35e4d28SHila Gonen { 69714e8a3c4SBeni Lev int ret; 69814e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 69914e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 70014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 70114e8a3c4SBeni Lev return ret; 702e35e4d28SHila Gonen } 703e35e4d28SHila Gonen 704e35e4d28SHila Gonen static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 705e35e4d28SHila Gonen struct net_device *netdev) 706e35e4d28SHila Gonen { 70714e8a3c4SBeni Lev int ret; 70814e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 70914e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 71014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 71114e8a3c4SBeni Lev return ret; 712e35e4d28SHila Gonen } 713e35e4d28SHila Gonen 714e35e4d28SHila Gonen static inline int 715e35e4d28SHila Gonen rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 716e35e4d28SHila Gonen struct wireless_dev *wdev, 717e35e4d28SHila Gonen struct ieee80211_channel *chan, 718e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 719e35e4d28SHila Gonen { 72014e8a3c4SBeni Lev int ret; 72142d97a59SJohannes Berg trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 72214e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 72342d97a59SJohannes Berg duration, cookie); 72414e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 72514e8a3c4SBeni Lev return ret; 726e35e4d28SHila Gonen } 727e35e4d28SHila Gonen 728e35e4d28SHila Gonen static inline int 729e35e4d28SHila Gonen rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 730e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 731e35e4d28SHila Gonen { 73214e8a3c4SBeni Lev int ret; 73314e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 73414e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 73514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 73614e8a3c4SBeni Lev return ret; 737e35e4d28SHila Gonen } 738e35e4d28SHila Gonen 739e35e4d28SHila Gonen static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 740e35e4d28SHila Gonen struct wireless_dev *wdev, 741b176e629SAndrei Otcheretianski struct cfg80211_mgmt_tx_params *params, 742b176e629SAndrei Otcheretianski u64 *cookie) 743e35e4d28SHila Gonen { 74414e8a3c4SBeni Lev int ret; 745b176e629SAndrei Otcheretianski trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 746b176e629SAndrei Otcheretianski ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 74714e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 74814e8a3c4SBeni Lev return ret; 749e35e4d28SHila Gonen } 750e35e4d28SHila Gonen 7512576a9acSDenis Kenzior static inline int rdev_tx_control_port(struct cfg80211_registered_device *rdev, 7522576a9acSDenis Kenzior struct net_device *dev, 7532576a9acSDenis Kenzior const void *buf, size_t len, 7548d74a623SJohannes Berg const u8 *dest, __be16 proto, 75567207babSAndrei Otcheretianski const bool noencrypt, int link, 75667207babSAndrei Otcheretianski u64 *cookie) 7572576a9acSDenis Kenzior { 7582576a9acSDenis Kenzior int ret; 7592576a9acSDenis Kenzior trace_rdev_tx_control_port(&rdev->wiphy, dev, buf, len, 76067207babSAndrei Otcheretianski dest, proto, noencrypt, link); 7612576a9acSDenis Kenzior ret = rdev->ops->tx_control_port(&rdev->wiphy, dev, buf, len, 76267207babSAndrei Otcheretianski dest, proto, noencrypt, link, cookie); 763dca9ca2dSMarkus Theil if (cookie) 764dca9ca2dSMarkus Theil trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 765dca9ca2dSMarkus Theil else 7662576a9acSDenis Kenzior trace_rdev_return_int(&rdev->wiphy, ret); 7672576a9acSDenis Kenzior return ret; 7682576a9acSDenis Kenzior } 7692576a9acSDenis Kenzior 770e35e4d28SHila Gonen static inline int 771e35e4d28SHila Gonen rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 772e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 773e35e4d28SHila Gonen { 77414e8a3c4SBeni Lev int ret; 77514e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 77614e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 77714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 77814e8a3c4SBeni Lev return ret; 779e35e4d28SHila Gonen } 780e35e4d28SHila Gonen 781e35e4d28SHila Gonen static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 782e35e4d28SHila Gonen struct net_device *dev, bool enabled, 783e35e4d28SHila Gonen int timeout) 784e35e4d28SHila Gonen { 78514e8a3c4SBeni Lev int ret; 78614e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 78714e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 78814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 78914e8a3c4SBeni Lev return ret; 790e35e4d28SHila Gonen } 791e35e4d28SHila Gonen 792e35e4d28SHila Gonen static inline int 793e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 794e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 795e35e4d28SHila Gonen { 79614e8a3c4SBeni Lev int ret; 79714e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 798e35e4d28SHila Gonen rssi_hyst); 79914e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 80014e8a3c4SBeni Lev rssi_hyst); 80114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 80214e8a3c4SBeni Lev return ret; 803e35e4d28SHila Gonen } 804e35e4d28SHila Gonen 805e35e4d28SHila Gonen static inline int 8064a4b8169SAndrew Zaborowski rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev, 8074a4b8169SAndrew Zaborowski struct net_device *dev, s32 low, s32 high) 8084a4b8169SAndrew Zaborowski { 8094a4b8169SAndrew Zaborowski int ret; 8104a4b8169SAndrew Zaborowski trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high); 8114a4b8169SAndrew Zaborowski ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev, 8124a4b8169SAndrew Zaborowski low, high); 8134a4b8169SAndrew Zaborowski trace_rdev_return_int(&rdev->wiphy, ret); 8144a4b8169SAndrew Zaborowski return ret; 8154a4b8169SAndrew Zaborowski } 8164a4b8169SAndrew Zaborowski 8174a4b8169SAndrew Zaborowski static inline int 818e35e4d28SHila Gonen rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 819e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 820e35e4d28SHila Gonen { 82114e8a3c4SBeni Lev int ret; 82214e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 82314e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 824e35e4d28SHila Gonen intvl); 82514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 82614e8a3c4SBeni Lev return ret; 827e35e4d28SHila Gonen } 828e35e4d28SHila Gonen 829e35e4d28SHila Gonen static inline void 8306cd536feSJohannes Berg rdev_update_mgmt_frame_registrations(struct cfg80211_registered_device *rdev, 8316cd536feSJohannes Berg struct wireless_dev *wdev, 8326cd536feSJohannes Berg struct mgmt_frame_regs *upd) 833e35e4d28SHila Gonen { 83433d8783cSJohannes Berg might_sleep(); 83533d8783cSJohannes Berg 8366cd536feSJohannes Berg trace_rdev_update_mgmt_frame_registrations(&rdev->wiphy, wdev, upd); 8376cd536feSJohannes Berg if (rdev->ops->update_mgmt_frame_registrations) 8386cd536feSJohannes Berg rdev->ops->update_mgmt_frame_registrations(&rdev->wiphy, wdev, 8396cd536feSJohannes Berg upd); 84014e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 841e35e4d28SHila Gonen } 842e35e4d28SHila Gonen 843e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 844e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 845e35e4d28SHila Gonen { 84614e8a3c4SBeni Lev int ret; 84714e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 84814e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 84914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 85014e8a3c4SBeni Lev return ret; 851e35e4d28SHila Gonen } 852e35e4d28SHila Gonen 853e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 854e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 855e35e4d28SHila Gonen { 85614e8a3c4SBeni Lev int ret; 85714e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 85814e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 85914e8a3c4SBeni Lev if (ret) 86014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 86114e8a3c4SBeni Lev else 86214e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 86314e8a3c4SBeni Lev *rx_ant); 86414e8a3c4SBeni Lev return ret; 865e35e4d28SHila Gonen } 866e35e4d28SHila Gonen 867e35e4d28SHila Gonen static inline int 868e35e4d28SHila Gonen rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 869e35e4d28SHila Gonen struct net_device *dev, 870e35e4d28SHila Gonen struct cfg80211_sched_scan_request *request) 871e35e4d28SHila Gonen { 87214e8a3c4SBeni Lev int ret; 873ca986ad9SArend Van Spriel trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid); 87414e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 87514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 87614e8a3c4SBeni Lev return ret; 877e35e4d28SHila Gonen } 878e35e4d28SHila Gonen 879e35e4d28SHila Gonen static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 8803a3ecf1dSArend Van Spriel struct net_device *dev, u64 reqid) 881e35e4d28SHila Gonen { 88214e8a3c4SBeni Lev int ret; 8833a3ecf1dSArend Van Spriel trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid); 8843a3ecf1dSArend Van Spriel ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid); 88514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 88614e8a3c4SBeni Lev return ret; 887e35e4d28SHila Gonen } 888e35e4d28SHila Gonen 889e35e4d28SHila Gonen static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 890e35e4d28SHila Gonen struct net_device *dev, 891e35e4d28SHila Gonen struct cfg80211_gtk_rekey_data *data) 892e35e4d28SHila Gonen { 89314e8a3c4SBeni Lev int ret; 89414e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 89514e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 89614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 89714e8a3c4SBeni Lev return ret; 898e35e4d28SHila Gonen } 899e35e4d28SHila Gonen 900e35e4d28SHila Gonen static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 901e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 902e35e4d28SHila Gonen u8 action_code, u8 dialog_token, 903df942e7bSSunil Dutt Undekari u16 status_code, u32 peer_capability, 90431fa97c5SArik Nemtsov bool initiator, const u8 *buf, size_t len) 905e35e4d28SHila Gonen { 90614e8a3c4SBeni Lev int ret; 90714e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 908df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 90931fa97c5SArik Nemtsov initiator, buf, len); 91014e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 911df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 91231fa97c5SArik Nemtsov initiator, buf, len); 91314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 91414e8a3c4SBeni Lev return ret; 915e35e4d28SHila Gonen } 916e35e4d28SHila Gonen 917e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 918e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 919e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 920e35e4d28SHila Gonen { 92114e8a3c4SBeni Lev int ret; 92214e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 92314e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 92414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 92514e8a3c4SBeni Lev return ret; 926e35e4d28SHila Gonen } 927e35e4d28SHila Gonen 928e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 929e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 930e35e4d28SHila Gonen u64 *cookie) 931e35e4d28SHila Gonen { 93214e8a3c4SBeni Lev int ret; 93314e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 93414e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 93514e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 93614e8a3c4SBeni Lev return ret; 937e35e4d28SHila Gonen } 938e35e4d28SHila Gonen 939e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 940e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 941e35e4d28SHila Gonen { 94214e8a3c4SBeni Lev int ret; 94314e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 94414e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 94514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 94614e8a3c4SBeni Lev return ret; 947e35e4d28SHila Gonen } 948e35e4d28SHila Gonen 949e35e4d28SHila Gonen static inline int 950683b6d3bSJohannes Berg rdev_get_channel(struct cfg80211_registered_device *rdev, 951683b6d3bSJohannes Berg struct wireless_dev *wdev, 9527b0a0e3cSJohannes Berg unsigned int link_id, 953683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 954e35e4d28SHila Gonen { 955683b6d3bSJohannes Berg int ret; 956683b6d3bSJohannes Berg 9577b0a0e3cSJohannes Berg trace_rdev_get_channel(&rdev->wiphy, wdev, link_id); 9587b0a0e3cSJohannes Berg ret = rdev->ops->get_channel(&rdev->wiphy, wdev, link_id, chandef); 959683b6d3bSJohannes Berg trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 960683b6d3bSJohannes Berg 96114e8a3c4SBeni Lev return ret; 962e35e4d28SHila Gonen } 963e35e4d28SHila Gonen 964eeb126e9SJohannes Berg static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 965eeb126e9SJohannes Berg struct wireless_dev *wdev) 966eeb126e9SJohannes Berg { 967eeb126e9SJohannes Berg int ret; 968eeb126e9SJohannes Berg 969eeb126e9SJohannes Berg trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 970eeb126e9SJohannes Berg ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 971eeb126e9SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 972eeb126e9SJohannes Berg return ret; 973eeb126e9SJohannes Berg } 974eeb126e9SJohannes Berg 975eeb126e9SJohannes Berg static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 976eeb126e9SJohannes Berg struct wireless_dev *wdev) 977eeb126e9SJohannes Berg { 978eeb126e9SJohannes Berg trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 979eeb126e9SJohannes Berg rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 980eeb126e9SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 981eeb126e9SJohannes Berg } 98277765eafSVasanthakumar Thiagarajan 983cb3b7d87SAyala Beker static inline int rdev_start_nan(struct cfg80211_registered_device *rdev, 984cb3b7d87SAyala Beker struct wireless_dev *wdev, 985cb3b7d87SAyala Beker struct cfg80211_nan_conf *conf) 986cb3b7d87SAyala Beker { 987cb3b7d87SAyala Beker int ret; 988cb3b7d87SAyala Beker 989cb3b7d87SAyala Beker trace_rdev_start_nan(&rdev->wiphy, wdev, conf); 990cb3b7d87SAyala Beker ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf); 991cb3b7d87SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 992cb3b7d87SAyala Beker return ret; 993cb3b7d87SAyala Beker } 994cb3b7d87SAyala Beker 995cb3b7d87SAyala Beker static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev, 996cb3b7d87SAyala Beker struct wireless_dev *wdev) 997cb3b7d87SAyala Beker { 998cb3b7d87SAyala Beker trace_rdev_stop_nan(&rdev->wiphy, wdev); 999cb3b7d87SAyala Beker rdev->ops->stop_nan(&rdev->wiphy, wdev); 1000cb3b7d87SAyala Beker trace_rdev_return_void(&rdev->wiphy); 1001cb3b7d87SAyala Beker } 1002cb3b7d87SAyala Beker 1003a442b761SAyala Beker static inline int 1004a442b761SAyala Beker rdev_add_nan_func(struct cfg80211_registered_device *rdev, 1005a442b761SAyala Beker struct wireless_dev *wdev, 1006a442b761SAyala Beker struct cfg80211_nan_func *nan_func) 1007a442b761SAyala Beker { 1008a442b761SAyala Beker int ret; 1009a442b761SAyala Beker 1010a442b761SAyala Beker trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func); 1011a442b761SAyala Beker ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func); 1012a442b761SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 1013a442b761SAyala Beker return ret; 1014a442b761SAyala Beker } 1015a442b761SAyala Beker 1016a442b761SAyala Beker static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev, 1017a442b761SAyala Beker struct wireless_dev *wdev, u64 cookie) 1018a442b761SAyala Beker { 1019a442b761SAyala Beker trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie); 1020a442b761SAyala Beker rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie); 1021a442b761SAyala Beker trace_rdev_return_void(&rdev->wiphy); 1022a442b761SAyala Beker } 1023a442b761SAyala Beker 1024a5a9dcf2SAyala Beker static inline int 1025a5a9dcf2SAyala Beker rdev_nan_change_conf(struct cfg80211_registered_device *rdev, 1026a5a9dcf2SAyala Beker struct wireless_dev *wdev, 1027a5a9dcf2SAyala Beker struct cfg80211_nan_conf *conf, u32 changes) 1028a5a9dcf2SAyala Beker { 1029a5a9dcf2SAyala Beker int ret; 1030a5a9dcf2SAyala Beker 1031a5a9dcf2SAyala Beker trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes); 1032a5a9dcf2SAyala Beker if (rdev->ops->nan_change_conf) 1033a5a9dcf2SAyala Beker ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf, 1034a5a9dcf2SAyala Beker changes); 1035a5a9dcf2SAyala Beker else 1036a5a9dcf2SAyala Beker ret = -ENOTSUPP; 1037a5a9dcf2SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 1038a5a9dcf2SAyala Beker return ret; 1039a5a9dcf2SAyala Beker } 1040a5a9dcf2SAyala Beker 104177765eafSVasanthakumar Thiagarajan static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 104277765eafSVasanthakumar Thiagarajan struct net_device *dev, 104377765eafSVasanthakumar Thiagarajan struct cfg80211_acl_data *params) 104477765eafSVasanthakumar Thiagarajan { 104577765eafSVasanthakumar Thiagarajan int ret; 104677765eafSVasanthakumar Thiagarajan 104777765eafSVasanthakumar Thiagarajan trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 104877765eafSVasanthakumar Thiagarajan ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 104977765eafSVasanthakumar Thiagarajan trace_rdev_return_int(&rdev->wiphy, ret); 105077765eafSVasanthakumar Thiagarajan return ret; 105177765eafSVasanthakumar Thiagarajan } 1052355199e0SJouni Malinen 1053355199e0SJouni Malinen static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 1054355199e0SJouni Malinen struct net_device *dev, 1055355199e0SJouni Malinen struct cfg80211_update_ft_ies_params *ftie) 1056355199e0SJouni Malinen { 1057355199e0SJouni Malinen int ret; 1058355199e0SJouni Malinen 1059355199e0SJouni Malinen trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 1060355199e0SJouni Malinen ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 1061355199e0SJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1062355199e0SJouni Malinen return ret; 10635de17984SArend van Spriel } 10645de17984SArend van Spriel 10655de17984SArend van Spriel static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 10665de17984SArend van Spriel struct wireless_dev *wdev, 10675de17984SArend van Spriel enum nl80211_crit_proto_id protocol, 10685de17984SArend van Spriel u16 duration) 10695de17984SArend van Spriel { 10705de17984SArend van Spriel int ret; 10715de17984SArend van Spriel 10725de17984SArend van Spriel trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 10735de17984SArend van Spriel ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 10745de17984SArend van Spriel protocol, duration); 10755de17984SArend van Spriel trace_rdev_return_int(&rdev->wiphy, ret); 10765de17984SArend van Spriel return ret; 10775de17984SArend van Spriel } 10785de17984SArend van Spriel 10795de17984SArend van Spriel static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 10805de17984SArend van Spriel struct wireless_dev *wdev) 10815de17984SArend van Spriel { 10825de17984SArend van Spriel trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 10835de17984SArend van Spriel rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 10845de17984SArend van Spriel trace_rdev_return_void(&rdev->wiphy); 1085355199e0SJouni Malinen } 1086355199e0SJouni Malinen 108716ef1fe2SSimon Wunderlich static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 108816ef1fe2SSimon Wunderlich struct net_device *dev, 108916ef1fe2SSimon Wunderlich struct cfg80211_csa_settings *params) 109016ef1fe2SSimon Wunderlich { 109116ef1fe2SSimon Wunderlich int ret; 109216ef1fe2SSimon Wunderlich 109316ef1fe2SSimon Wunderlich trace_rdev_channel_switch(&rdev->wiphy, dev, params); 109416ef1fe2SSimon Wunderlich ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 109516ef1fe2SSimon Wunderlich trace_rdev_return_int(&rdev->wiphy, ret); 109616ef1fe2SSimon Wunderlich return ret; 109716ef1fe2SSimon Wunderlich } 109816ef1fe2SSimon Wunderlich 1099fa9ffc74SKyeyoon Park static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 1100fa9ffc74SKyeyoon Park struct net_device *dev, 1101fa9ffc74SKyeyoon Park struct cfg80211_qos_map *qos_map) 1102fa9ffc74SKyeyoon Park { 1103fa9ffc74SKyeyoon Park int ret = -EOPNOTSUPP; 1104fa9ffc74SKyeyoon Park 1105fa9ffc74SKyeyoon Park if (rdev->ops->set_qos_map) { 1106fa9ffc74SKyeyoon Park trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 1107fa9ffc74SKyeyoon Park ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 1108fa9ffc74SKyeyoon Park trace_rdev_return_int(&rdev->wiphy, ret); 1109fa9ffc74SKyeyoon Park } 1110fa9ffc74SKyeyoon Park 1111fa9ffc74SKyeyoon Park return ret; 1112fa9ffc74SKyeyoon Park } 1113fa9ffc74SKyeyoon Park 1114e16821bcSJouni Malinen static inline int 1115e16821bcSJouni Malinen rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 11167b0a0e3cSJohannes Berg struct net_device *dev, 11177b0a0e3cSJohannes Berg unsigned int link_id, 11187b0a0e3cSJohannes Berg struct cfg80211_chan_def *chandef) 1119e16821bcSJouni Malinen { 1120e16821bcSJouni Malinen int ret; 1121e16821bcSJouni Malinen 11227b0a0e3cSJohannes Berg trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, link_id, chandef); 11237b0a0e3cSJohannes Berg ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, link_id, chandef); 1124e16821bcSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1125e16821bcSJouni Malinen 1126e16821bcSJouni Malinen return ret; 1127e16821bcSJouni Malinen } 1128e16821bcSJouni Malinen 1129960d01acSJohannes Berg static inline int 1130960d01acSJohannes Berg rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 1131960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer, 1132960d01acSJohannes Berg u8 user_prio, u16 admitted_time) 1133960d01acSJohannes Berg { 1134960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1135960d01acSJohannes Berg 1136960d01acSJohannes Berg trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1137960d01acSJohannes Berg user_prio, admitted_time); 1138960d01acSJohannes Berg if (rdev->ops->add_tx_ts) 1139960d01acSJohannes Berg ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1140960d01acSJohannes Berg user_prio, admitted_time); 1141960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1142960d01acSJohannes Berg 1143960d01acSJohannes Berg return ret; 1144960d01acSJohannes Berg } 1145960d01acSJohannes Berg 1146960d01acSJohannes Berg static inline int 1147960d01acSJohannes Berg rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 1148960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer) 1149960d01acSJohannes Berg { 1150960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1151960d01acSJohannes Berg 1152960d01acSJohannes Berg trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1153960d01acSJohannes Berg if (rdev->ops->del_tx_ts) 1154960d01acSJohannes Berg ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1155960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1156960d01acSJohannes Berg 1157960d01acSJohannes Berg return ret; 1158960d01acSJohannes Berg } 1159960d01acSJohannes Berg 11601057d35eSArik Nemtsov static inline int 11611057d35eSArik Nemtsov rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev, 11621057d35eSArik Nemtsov struct net_device *dev, const u8 *addr, 11631057d35eSArik Nemtsov u8 oper_class, struct cfg80211_chan_def *chandef) 11641057d35eSArik Nemtsov { 11651057d35eSArik Nemtsov int ret; 11661057d35eSArik Nemtsov 11671057d35eSArik Nemtsov trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class, 11681057d35eSArik Nemtsov chandef); 11691057d35eSArik Nemtsov ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr, 11701057d35eSArik Nemtsov oper_class, chandef); 11711057d35eSArik Nemtsov trace_rdev_return_int(&rdev->wiphy, ret); 11721057d35eSArik Nemtsov return ret; 11731057d35eSArik Nemtsov } 11741057d35eSArik Nemtsov 11751057d35eSArik Nemtsov static inline void 11761057d35eSArik Nemtsov rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev, 11771057d35eSArik Nemtsov struct net_device *dev, const u8 *addr) 11781057d35eSArik Nemtsov { 11791057d35eSArik Nemtsov trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11801057d35eSArik Nemtsov rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11811057d35eSArik Nemtsov trace_rdev_return_void(&rdev->wiphy); 11821057d35eSArik Nemtsov } 11831057d35eSArik Nemtsov 1184a1056b1bSIlan Peer static inline int 1185a1056b1bSIlan Peer rdev_start_radar_detection(struct cfg80211_registered_device *rdev, 1186a1056b1bSIlan Peer struct net_device *dev, 1187a1056b1bSIlan Peer struct cfg80211_chan_def *chandef, 1188a1056b1bSIlan Peer u32 cac_time_ms) 1189a1056b1bSIlan Peer { 1190a1056b1bSIlan Peer int ret = -ENOTSUPP; 1191a1056b1bSIlan Peer 1192a1056b1bSIlan Peer trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef, 1193a1056b1bSIlan Peer cac_time_ms); 1194a1056b1bSIlan Peer if (rdev->ops->start_radar_detection) 1195a1056b1bSIlan Peer ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev, 1196a1056b1bSIlan Peer chandef, cac_time_ms); 1197a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1198a1056b1bSIlan Peer return ret; 1199a1056b1bSIlan Peer } 1200a1056b1bSIlan Peer 120126ec17a1SOrr Mazor static inline void 120226ec17a1SOrr Mazor rdev_end_cac(struct cfg80211_registered_device *rdev, 120326ec17a1SOrr Mazor struct net_device *dev) 120426ec17a1SOrr Mazor { 120526ec17a1SOrr Mazor trace_rdev_end_cac(&rdev->wiphy, dev); 120626ec17a1SOrr Mazor if (rdev->ops->end_cac) 120726ec17a1SOrr Mazor rdev->ops->end_cac(&rdev->wiphy, dev); 120826ec17a1SOrr Mazor trace_rdev_return_void(&rdev->wiphy); 120926ec17a1SOrr Mazor } 121026ec17a1SOrr Mazor 1211a1056b1bSIlan Peer static inline int 1212a1056b1bSIlan Peer rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, 1213a1056b1bSIlan Peer struct net_device *dev, 121457fbcce3SJohannes Berg int mcast_rate[NUM_NL80211_BANDS]) 1215a1056b1bSIlan Peer { 1216a1056b1bSIlan Peer int ret = -ENOTSUPP; 1217a1056b1bSIlan Peer 1218a1056b1bSIlan Peer trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1219a1056b1bSIlan Peer if (rdev->ops->set_mcast_rate) 1220a1056b1bSIlan Peer ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1221a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1222a1056b1bSIlan Peer return ret; 1223a1056b1bSIlan Peer } 1224a1056b1bSIlan Peer 1225a1056b1bSIlan Peer static inline int 1226a1056b1bSIlan Peer rdev_set_coalesce(struct cfg80211_registered_device *rdev, 1227a1056b1bSIlan Peer struct cfg80211_coalesce *coalesce) 1228a1056b1bSIlan Peer { 1229a1056b1bSIlan Peer int ret = -ENOTSUPP; 1230a1056b1bSIlan Peer 1231a1056b1bSIlan Peer trace_rdev_set_coalesce(&rdev->wiphy, coalesce); 1232a1056b1bSIlan Peer if (rdev->ops->set_coalesce) 1233a1056b1bSIlan Peer ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce); 1234a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1235a1056b1bSIlan Peer return ret; 1236a1056b1bSIlan Peer } 12373a00df57SAvraham Stern 12383a00df57SAvraham Stern static inline int rdev_set_pmk(struct cfg80211_registered_device *rdev, 12393a00df57SAvraham Stern struct net_device *dev, 12403a00df57SAvraham Stern struct cfg80211_pmk_conf *pmk_conf) 12413a00df57SAvraham Stern { 12423a00df57SAvraham Stern int ret = -EOPNOTSUPP; 12433a00df57SAvraham Stern 12443a00df57SAvraham Stern trace_rdev_set_pmk(&rdev->wiphy, dev, pmk_conf); 12453a00df57SAvraham Stern if (rdev->ops->set_pmk) 12463a00df57SAvraham Stern ret = rdev->ops->set_pmk(&rdev->wiphy, dev, pmk_conf); 12473a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 12483a00df57SAvraham Stern return ret; 12493a00df57SAvraham Stern } 12503a00df57SAvraham Stern 12513a00df57SAvraham Stern static inline int rdev_del_pmk(struct cfg80211_registered_device *rdev, 12523a00df57SAvraham Stern struct net_device *dev, const u8 *aa) 12533a00df57SAvraham Stern { 12543a00df57SAvraham Stern int ret = -EOPNOTSUPP; 12553a00df57SAvraham Stern 12563a00df57SAvraham Stern trace_rdev_del_pmk(&rdev->wiphy, dev, aa); 12573a00df57SAvraham Stern if (rdev->ops->del_pmk) 12583a00df57SAvraham Stern ret = rdev->ops->del_pmk(&rdev->wiphy, dev, aa); 12593a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 12603a00df57SAvraham Stern return ret; 12613a00df57SAvraham Stern } 126240cbfa90SSrinivas Dasari 126340cbfa90SSrinivas Dasari static inline int 126440cbfa90SSrinivas Dasari rdev_external_auth(struct cfg80211_registered_device *rdev, 126540cbfa90SSrinivas Dasari struct net_device *dev, 126640cbfa90SSrinivas Dasari struct cfg80211_external_auth_params *params) 126740cbfa90SSrinivas Dasari { 126840cbfa90SSrinivas Dasari int ret = -EOPNOTSUPP; 126940cbfa90SSrinivas Dasari 127040cbfa90SSrinivas Dasari trace_rdev_external_auth(&rdev->wiphy, dev, params); 127140cbfa90SSrinivas Dasari if (rdev->ops->external_auth) 127240cbfa90SSrinivas Dasari ret = rdev->ops->external_auth(&rdev->wiphy, dev, params); 127340cbfa90SSrinivas Dasari trace_rdev_return_int(&rdev->wiphy, ret); 127440cbfa90SSrinivas Dasari return ret; 127540cbfa90SSrinivas Dasari } 127640cbfa90SSrinivas Dasari 127781e54d08SPradeep Kumar Chitrapu static inline int 127881e54d08SPradeep Kumar Chitrapu rdev_get_ftm_responder_stats(struct cfg80211_registered_device *rdev, 127981e54d08SPradeep Kumar Chitrapu struct net_device *dev, 128081e54d08SPradeep Kumar Chitrapu struct cfg80211_ftm_responder_stats *ftm_stats) 128181e54d08SPradeep Kumar Chitrapu { 128281e54d08SPradeep Kumar Chitrapu int ret = -EOPNOTSUPP; 128381e54d08SPradeep Kumar Chitrapu 128481e54d08SPradeep Kumar Chitrapu trace_rdev_get_ftm_responder_stats(&rdev->wiphy, dev, ftm_stats); 128581e54d08SPradeep Kumar Chitrapu if (rdev->ops->get_ftm_responder_stats) 128681e54d08SPradeep Kumar Chitrapu ret = rdev->ops->get_ftm_responder_stats(&rdev->wiphy, dev, 128781e54d08SPradeep Kumar Chitrapu ftm_stats); 128881e54d08SPradeep Kumar Chitrapu trace_rdev_return_int(&rdev->wiphy, ret); 128981e54d08SPradeep Kumar Chitrapu return ret; 129081e54d08SPradeep Kumar Chitrapu } 129181e54d08SPradeep Kumar Chitrapu 12929bb7e0f2SJohannes Berg static inline int 12939bb7e0f2SJohannes Berg rdev_start_pmsr(struct cfg80211_registered_device *rdev, 12949bb7e0f2SJohannes Berg struct wireless_dev *wdev, 12959bb7e0f2SJohannes Berg struct cfg80211_pmsr_request *request) 12969bb7e0f2SJohannes Berg { 12979bb7e0f2SJohannes Berg int ret = -EOPNOTSUPP; 12989bb7e0f2SJohannes Berg 12999bb7e0f2SJohannes Berg trace_rdev_start_pmsr(&rdev->wiphy, wdev, request->cookie); 13009bb7e0f2SJohannes Berg if (rdev->ops->start_pmsr) 13019bb7e0f2SJohannes Berg ret = rdev->ops->start_pmsr(&rdev->wiphy, wdev, request); 13029bb7e0f2SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 13039bb7e0f2SJohannes Berg return ret; 13049bb7e0f2SJohannes Berg } 13059bb7e0f2SJohannes Berg 13069bb7e0f2SJohannes Berg static inline void 13079bb7e0f2SJohannes Berg rdev_abort_pmsr(struct cfg80211_registered_device *rdev, 13089bb7e0f2SJohannes Berg struct wireless_dev *wdev, 13099bb7e0f2SJohannes Berg struct cfg80211_pmsr_request *request) 13109bb7e0f2SJohannes Berg { 13119bb7e0f2SJohannes Berg trace_rdev_abort_pmsr(&rdev->wiphy, wdev, request->cookie); 13129bb7e0f2SJohannes Berg if (rdev->ops->abort_pmsr) 13139bb7e0f2SJohannes Berg rdev->ops->abort_pmsr(&rdev->wiphy, wdev, request); 13149bb7e0f2SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 13159bb7e0f2SJohannes Berg } 13169bb7e0f2SJohannes Berg 1317cb74e977SSunil Dutt static inline int rdev_update_owe_info(struct cfg80211_registered_device *rdev, 1318cb74e977SSunil Dutt struct net_device *dev, 1319cb74e977SSunil Dutt struct cfg80211_update_owe_info *oweinfo) 1320cb74e977SSunil Dutt { 1321cb74e977SSunil Dutt int ret = -EOPNOTSUPP; 1322cb74e977SSunil Dutt 1323cb74e977SSunil Dutt trace_rdev_update_owe_info(&rdev->wiphy, dev, oweinfo); 1324cb74e977SSunil Dutt if (rdev->ops->update_owe_info) 1325cb74e977SSunil Dutt ret = rdev->ops->update_owe_info(&rdev->wiphy, dev, oweinfo); 1326cb74e977SSunil Dutt trace_rdev_return_int(&rdev->wiphy, ret); 1327cb74e977SSunil Dutt return ret; 1328cb74e977SSunil Dutt } 1329cb74e977SSunil Dutt 13305ab92e7fSRajkumar Manoharan static inline int 13315ab92e7fSRajkumar Manoharan rdev_probe_mesh_link(struct cfg80211_registered_device *rdev, 13325ab92e7fSRajkumar Manoharan struct net_device *dev, const u8 *dest, 13335ab92e7fSRajkumar Manoharan const void *buf, size_t len) 13345ab92e7fSRajkumar Manoharan { 13355ab92e7fSRajkumar Manoharan int ret; 13365ab92e7fSRajkumar Manoharan 13375ab92e7fSRajkumar Manoharan trace_rdev_probe_mesh_link(&rdev->wiphy, dev, dest, buf, len); 13385ab92e7fSRajkumar Manoharan ret = rdev->ops->probe_mesh_link(&rdev->wiphy, dev, buf, len); 13395ab92e7fSRajkumar Manoharan trace_rdev_return_int(&rdev->wiphy, ret); 13405ab92e7fSRajkumar Manoharan return ret; 13415ab92e7fSRajkumar Manoharan } 13425ab92e7fSRajkumar Manoharan 134377f576deSTamizh chelvam static inline int rdev_set_tid_config(struct cfg80211_registered_device *rdev, 134477f576deSTamizh chelvam struct net_device *dev, 13453710a8a6SJohannes Berg struct cfg80211_tid_config *tid_conf) 134677f576deSTamizh chelvam { 134777f576deSTamizh chelvam int ret; 134877f576deSTamizh chelvam 134977f576deSTamizh chelvam trace_rdev_set_tid_config(&rdev->wiphy, dev, tid_conf); 135077f576deSTamizh chelvam ret = rdev->ops->set_tid_config(&rdev->wiphy, dev, tid_conf); 135177f576deSTamizh chelvam trace_rdev_return_int(&rdev->wiphy, ret); 135277f576deSTamizh chelvam return ret; 135377f576deSTamizh chelvam } 135477f576deSTamizh chelvam 135577f576deSTamizh chelvam static inline int rdev_reset_tid_config(struct cfg80211_registered_device *rdev, 135677f576deSTamizh chelvam struct net_device *dev, const u8 *peer, 13573710a8a6SJohannes Berg u8 tids) 135877f576deSTamizh chelvam { 135977f576deSTamizh chelvam int ret; 136077f576deSTamizh chelvam 13613710a8a6SJohannes Berg trace_rdev_reset_tid_config(&rdev->wiphy, dev, peer, tids); 13623710a8a6SJohannes Berg ret = rdev->ops->reset_tid_config(&rdev->wiphy, dev, peer, tids); 136377f576deSTamizh chelvam trace_rdev_return_int(&rdev->wiphy, ret); 136477f576deSTamizh chelvam return ret; 136577f576deSTamizh chelvam } 136677f576deSTamizh chelvam 13676bdb68ceSCarl Huang static inline int rdev_set_sar_specs(struct cfg80211_registered_device *rdev, 13686bdb68ceSCarl Huang struct cfg80211_sar_specs *sar) 13696bdb68ceSCarl Huang { 13706bdb68ceSCarl Huang int ret; 13716bdb68ceSCarl Huang 13726bdb68ceSCarl Huang trace_rdev_set_sar_specs(&rdev->wiphy, sar); 13736bdb68ceSCarl Huang ret = rdev->ops->set_sar_specs(&rdev->wiphy, sar); 13746bdb68ceSCarl Huang trace_rdev_return_int(&rdev->wiphy, ret); 13756bdb68ceSCarl Huang 13766bdb68ceSCarl Huang return ret; 13776bdb68ceSCarl Huang } 13786bdb68ceSCarl Huang 13790d2ab3aeSJohn Crispin static inline int rdev_color_change(struct cfg80211_registered_device *rdev, 13800d2ab3aeSJohn Crispin struct net_device *dev, 13810d2ab3aeSJohn Crispin struct cfg80211_color_change_settings *params) 13820d2ab3aeSJohn Crispin { 13830d2ab3aeSJohn Crispin int ret; 13840d2ab3aeSJohn Crispin 13850d2ab3aeSJohn Crispin trace_rdev_color_change(&rdev->wiphy, dev, params); 13860d2ab3aeSJohn Crispin ret = rdev->ops->color_change(&rdev->wiphy, dev, params); 13870d2ab3aeSJohn Crispin trace_rdev_return_int(&rdev->wiphy, ret); 13880d2ab3aeSJohn Crispin 13890d2ab3aeSJohn Crispin return ret; 13900d2ab3aeSJohn Crispin } 13910d2ab3aeSJohn Crispin 1392e306784aSSubrat Mishra static inline int 1393e306784aSSubrat Mishra rdev_set_fils_aad(struct cfg80211_registered_device *rdev, 1394e306784aSSubrat Mishra struct net_device *dev, struct cfg80211_fils_aad *fils_aad) 1395e306784aSSubrat Mishra { 1396e306784aSSubrat Mishra int ret = -EOPNOTSUPP; 1397e306784aSSubrat Mishra 1398e306784aSSubrat Mishra trace_rdev_set_fils_aad(&rdev->wiphy, dev, fils_aad); 1399e306784aSSubrat Mishra if (rdev->ops->set_fils_aad) 1400e306784aSSubrat Mishra ret = rdev->ops->set_fils_aad(&rdev->wiphy, dev, fils_aad); 1401e306784aSSubrat Mishra trace_rdev_return_int(&rdev->wiphy, ret); 1402e306784aSSubrat Mishra 1403e306784aSSubrat Mishra return ret; 1404e306784aSSubrat Mishra } 1405e306784aSSubrat Mishra 1406bc2dfc02SLorenzo Bianconi static inline int 1407a95bfb87SLorenzo Bianconi rdev_set_radar_background(struct cfg80211_registered_device *rdev, 1408bc2dfc02SLorenzo Bianconi struct cfg80211_chan_def *chandef) 1409bc2dfc02SLorenzo Bianconi { 1410bc2dfc02SLorenzo Bianconi struct wiphy *wiphy = &rdev->wiphy; 1411bc2dfc02SLorenzo Bianconi int ret; 1412bc2dfc02SLorenzo Bianconi 1413a95bfb87SLorenzo Bianconi if (!rdev->ops->set_radar_background) 1414bc2dfc02SLorenzo Bianconi return -EOPNOTSUPP; 1415bc2dfc02SLorenzo Bianconi 1416a95bfb87SLorenzo Bianconi trace_rdev_set_radar_background(wiphy, chandef); 1417a95bfb87SLorenzo Bianconi ret = rdev->ops->set_radar_background(wiphy, chandef); 1418bc2dfc02SLorenzo Bianconi trace_rdev_return_int(wiphy, ret); 1419bc2dfc02SLorenzo Bianconi 1420bc2dfc02SLorenzo Bianconi return ret; 1421bc2dfc02SLorenzo Bianconi } 1422bc2dfc02SLorenzo Bianconi 1423f2a0290bSJohannes Berg static inline int 1424f2a0290bSJohannes Berg rdev_add_intf_link(struct cfg80211_registered_device *rdev, 1425f2a0290bSJohannes Berg struct wireless_dev *wdev, 1426f2a0290bSJohannes Berg unsigned int link_id) 1427f2a0290bSJohannes Berg { 1428f2a0290bSJohannes Berg int ret = 0; 1429f2a0290bSJohannes Berg 1430f2a0290bSJohannes Berg trace_rdev_add_intf_link(&rdev->wiphy, wdev, link_id); 1431f2a0290bSJohannes Berg if (rdev->ops->add_intf_link) 1432f2a0290bSJohannes Berg ret = rdev->ops->add_intf_link(&rdev->wiphy, wdev, link_id); 1433f2a0290bSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1434f2a0290bSJohannes Berg 1435f2a0290bSJohannes Berg return ret; 1436f2a0290bSJohannes Berg } 1437f2a0290bSJohannes Berg 1438f2a0290bSJohannes Berg static inline void 1439f2a0290bSJohannes Berg rdev_del_intf_link(struct cfg80211_registered_device *rdev, 1440f2a0290bSJohannes Berg struct wireless_dev *wdev, 1441f2a0290bSJohannes Berg unsigned int link_id) 1442f2a0290bSJohannes Berg { 1443f2a0290bSJohannes Berg trace_rdev_del_intf_link(&rdev->wiphy, wdev, link_id); 1444f2a0290bSJohannes Berg if (rdev->ops->add_intf_link) 1445f2a0290bSJohannes Berg rdev->ops->add_intf_link(&rdev->wiphy, wdev, link_id); 1446f2a0290bSJohannes Berg trace_rdev_return_void(&rdev->wiphy); 1447f2a0290bSJohannes Berg } 1448f2a0290bSJohannes Berg 1449577e5b8cSShaul Triebitz static inline int 1450577e5b8cSShaul Triebitz rdev_add_link_station(struct cfg80211_registered_device *rdev, 1451577e5b8cSShaul Triebitz struct net_device *dev, 1452577e5b8cSShaul Triebitz struct link_station_parameters *params) 1453577e5b8cSShaul Triebitz { 1454577e5b8cSShaul Triebitz int ret; 1455577e5b8cSShaul Triebitz 1456577e5b8cSShaul Triebitz if (!rdev->ops->add_link_station) 1457577e5b8cSShaul Triebitz return -EOPNOTSUPP; 1458577e5b8cSShaul Triebitz 1459577e5b8cSShaul Triebitz trace_rdev_add_link_station(&rdev->wiphy, dev, params); 1460577e5b8cSShaul Triebitz ret = rdev->ops->add_link_station(&rdev->wiphy, dev, params); 1461577e5b8cSShaul Triebitz trace_rdev_return_int(&rdev->wiphy, ret); 1462577e5b8cSShaul Triebitz return ret; 1463577e5b8cSShaul Triebitz } 1464577e5b8cSShaul Triebitz 1465577e5b8cSShaul Triebitz static inline int 1466577e5b8cSShaul Triebitz rdev_mod_link_station(struct cfg80211_registered_device *rdev, 1467577e5b8cSShaul Triebitz struct net_device *dev, 1468577e5b8cSShaul Triebitz struct link_station_parameters *params) 1469577e5b8cSShaul Triebitz { 1470577e5b8cSShaul Triebitz int ret; 1471577e5b8cSShaul Triebitz 1472577e5b8cSShaul Triebitz if (!rdev->ops->mod_link_station) 1473577e5b8cSShaul Triebitz return -EOPNOTSUPP; 1474577e5b8cSShaul Triebitz 1475577e5b8cSShaul Triebitz trace_rdev_mod_link_station(&rdev->wiphy, dev, params); 1476577e5b8cSShaul Triebitz ret = rdev->ops->mod_link_station(&rdev->wiphy, dev, params); 1477577e5b8cSShaul Triebitz trace_rdev_return_int(&rdev->wiphy, ret); 1478577e5b8cSShaul Triebitz return ret; 1479577e5b8cSShaul Triebitz } 1480577e5b8cSShaul Triebitz 1481577e5b8cSShaul Triebitz static inline int 1482577e5b8cSShaul Triebitz rdev_del_link_station(struct cfg80211_registered_device *rdev, 1483577e5b8cSShaul Triebitz struct net_device *dev, 1484577e5b8cSShaul Triebitz struct link_station_del_parameters *params) 1485577e5b8cSShaul Triebitz { 1486577e5b8cSShaul Triebitz int ret; 1487577e5b8cSShaul Triebitz 1488577e5b8cSShaul Triebitz if (!rdev->ops->del_link_station) 1489577e5b8cSShaul Triebitz return -EOPNOTSUPP; 1490577e5b8cSShaul Triebitz 1491577e5b8cSShaul Triebitz trace_rdev_del_link_station(&rdev->wiphy, dev, params); 1492577e5b8cSShaul Triebitz ret = rdev->ops->del_link_station(&rdev->wiphy, dev, params); 1493577e5b8cSShaul Triebitz trace_rdev_return_int(&rdev->wiphy, ret); 1494577e5b8cSShaul Triebitz return ret; 1495577e5b8cSShaul Triebitz } 1496577e5b8cSShaul Triebitz 1497*cbbaf2bbSAvraham Stern static inline int 1498*cbbaf2bbSAvraham Stern rdev_set_hw_timestamp(struct cfg80211_registered_device *rdev, 1499*cbbaf2bbSAvraham Stern struct net_device *dev, 1500*cbbaf2bbSAvraham Stern struct cfg80211_set_hw_timestamp *hwts) 1501*cbbaf2bbSAvraham Stern { 1502*cbbaf2bbSAvraham Stern struct wiphy *wiphy = &rdev->wiphy; 1503*cbbaf2bbSAvraham Stern int ret; 1504*cbbaf2bbSAvraham Stern 1505*cbbaf2bbSAvraham Stern if (!rdev->ops->set_hw_timestamp) 1506*cbbaf2bbSAvraham Stern return -EOPNOTSUPP; 1507*cbbaf2bbSAvraham Stern 1508*cbbaf2bbSAvraham Stern trace_rdev_set_hw_timestamp(wiphy, dev, hwts); 1509*cbbaf2bbSAvraham Stern ret = rdev->ops->set_hw_timestamp(wiphy, dev, hwts); 1510*cbbaf2bbSAvraham Stern trace_rdev_return_int(wiphy, ret); 1511*cbbaf2bbSAvraham Stern 1512*cbbaf2bbSAvraham Stern return ret; 1513*cbbaf2bbSAvraham Stern } 1514e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 1515