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, 80e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 81e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr, 82e35e4d28SHila Gonen struct key_params *params) 83e35e4d28SHila Gonen { 8414e8a3c4SBeni Lev int ret; 856cdd3979SAlexander Wetzel trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, 866cdd3979SAlexander Wetzel mac_addr, params->mode); 8714e8a3c4SBeni Lev ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise, 88e35e4d28SHila Gonen 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, 95e35e4d28SHila Gonen u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, 96e35e4d28SHila Gonen void (*callback)(void *cookie, struct key_params*)) 97e35e4d28SHila Gonen { 9814e8a3c4SBeni Lev int ret; 9914e8a3c4SBeni Lev trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 10014e8a3c4SBeni Lev ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise, 101e35e4d28SHila Gonen mac_addr, cookie, callback); 10214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 10314e8a3c4SBeni Lev return ret; 104e35e4d28SHila Gonen } 105e35e4d28SHila Gonen 106e35e4d28SHila Gonen static inline int rdev_del_key(struct cfg80211_registered_device *rdev, 107e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, 108e35e4d28SHila Gonen bool pairwise, const u8 *mac_addr) 109e35e4d28SHila Gonen { 11014e8a3c4SBeni Lev int ret; 11114e8a3c4SBeni Lev trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 11214e8a3c4SBeni Lev ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise, 113e35e4d28SHila Gonen mac_addr); 11414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 11514e8a3c4SBeni Lev return ret; 116e35e4d28SHila Gonen } 117e35e4d28SHila Gonen 118e35e4d28SHila Gonen static inline int 119e35e4d28SHila Gonen rdev_set_default_key(struct cfg80211_registered_device *rdev, 120e35e4d28SHila Gonen struct net_device *netdev, u8 key_index, bool unicast, 121e35e4d28SHila Gonen bool multicast) 122e35e4d28SHila Gonen { 12314e8a3c4SBeni Lev int ret; 12414e8a3c4SBeni Lev trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index, 125e35e4d28SHila Gonen unicast, multicast); 12614e8a3c4SBeni Lev ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index, 12714e8a3c4SBeni Lev unicast, multicast); 12814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 12914e8a3c4SBeni Lev return ret; 130e35e4d28SHila Gonen } 131e35e4d28SHila Gonen 132e35e4d28SHila Gonen static inline int 133e35e4d28SHila Gonen rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev, 134e35e4d28SHila Gonen struct net_device *netdev, u8 key_index) 135e35e4d28SHila Gonen { 13614e8a3c4SBeni Lev int ret; 13714e8a3c4SBeni Lev trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index); 13814e8a3c4SBeni Lev ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, 139e35e4d28SHila Gonen key_index); 14014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 14114e8a3c4SBeni Lev return ret; 142e35e4d28SHila Gonen } 143e35e4d28SHila Gonen 14456be393fSJouni Malinen static inline int 14556be393fSJouni Malinen rdev_set_default_beacon_key(struct cfg80211_registered_device *rdev, 14656be393fSJouni Malinen struct net_device *netdev, u8 key_index) 14756be393fSJouni Malinen { 14856be393fSJouni Malinen int ret; 14956be393fSJouni Malinen 15056be393fSJouni Malinen trace_rdev_set_default_beacon_key(&rdev->wiphy, netdev, key_index); 15156be393fSJouni Malinen ret = rdev->ops->set_default_beacon_key(&rdev->wiphy, netdev, 15256be393fSJouni Malinen key_index); 15356be393fSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 15456be393fSJouni Malinen return ret; 15556be393fSJouni Malinen } 15656be393fSJouni Malinen 157e35e4d28SHila Gonen static inline int rdev_start_ap(struct cfg80211_registered_device *rdev, 158e35e4d28SHila Gonen struct net_device *dev, 159e35e4d28SHila Gonen struct cfg80211_ap_settings *settings) 160e35e4d28SHila Gonen { 16114e8a3c4SBeni Lev int ret; 16214e8a3c4SBeni Lev trace_rdev_start_ap(&rdev->wiphy, dev, settings); 16314e8a3c4SBeni Lev ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 16414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 16514e8a3c4SBeni Lev return ret; 166e35e4d28SHila Gonen } 167e35e4d28SHila Gonen 168e35e4d28SHila Gonen static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev, 169e35e4d28SHila Gonen struct net_device *dev, 170e35e4d28SHila Gonen struct cfg80211_beacon_data *info) 171e35e4d28SHila Gonen { 17214e8a3c4SBeni Lev int ret; 17314e8a3c4SBeni Lev trace_rdev_change_beacon(&rdev->wiphy, dev, info); 17414e8a3c4SBeni Lev ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 17514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 17614e8a3c4SBeni Lev return ret; 177e35e4d28SHila Gonen } 178e35e4d28SHila Gonen 179e35e4d28SHila Gonen static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev, 1807b0a0e3cSJohannes Berg struct net_device *dev, unsigned int link_id) 181e35e4d28SHila Gonen { 18214e8a3c4SBeni Lev int ret; 1837b0a0e3cSJohannes Berg trace_rdev_stop_ap(&rdev->wiphy, dev, link_id); 1847b0a0e3cSJohannes Berg ret = rdev->ops->stop_ap(&rdev->wiphy, dev, link_id); 18514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 18614e8a3c4SBeni Lev return ret; 187e35e4d28SHila Gonen } 188e35e4d28SHila Gonen 189e35e4d28SHila Gonen static inline int rdev_add_station(struct cfg80211_registered_device *rdev, 190e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 191e35e4d28SHila Gonen struct station_parameters *params) 192e35e4d28SHila Gonen { 19314e8a3c4SBeni Lev int ret; 19414e8a3c4SBeni Lev trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 19514e8a3c4SBeni Lev ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 19614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 19714e8a3c4SBeni Lev return ret; 198e35e4d28SHila Gonen } 199e35e4d28SHila Gonen 200e35e4d28SHila Gonen static inline int rdev_del_station(struct cfg80211_registered_device *rdev, 20189c771e5SJouni Malinen struct net_device *dev, 20289c771e5SJouni Malinen struct station_del_parameters *params) 203e35e4d28SHila Gonen { 20414e8a3c4SBeni Lev int ret; 20589c771e5SJouni Malinen trace_rdev_del_station(&rdev->wiphy, dev, params); 20689c771e5SJouni Malinen ret = rdev->ops->del_station(&rdev->wiphy, dev, params); 20714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 20814e8a3c4SBeni Lev return ret; 209e35e4d28SHila Gonen } 210e35e4d28SHila Gonen 211e35e4d28SHila Gonen static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 212e35e4d28SHila Gonen struct net_device *dev, u8 *mac, 213e35e4d28SHila Gonen struct station_parameters *params) 214e35e4d28SHila Gonen { 21514e8a3c4SBeni Lev int ret; 21614e8a3c4SBeni Lev trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 21714e8a3c4SBeni Lev ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 21814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 21914e8a3c4SBeni Lev return ret; 220e35e4d28SHila Gonen } 221e35e4d28SHila Gonen 222e35e4d28SHila Gonen static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 2237406353dSAntonio Quartulli struct net_device *dev, const u8 *mac, 224e35e4d28SHila Gonen struct station_info *sinfo) 225e35e4d28SHila Gonen { 22614e8a3c4SBeni Lev int ret; 22714e8a3c4SBeni Lev trace_rdev_get_station(&rdev->wiphy, dev, mac); 22814e8a3c4SBeni Lev ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 22914e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 23014e8a3c4SBeni Lev return ret; 231e35e4d28SHila Gonen } 232e35e4d28SHila Gonen 233e35e4d28SHila Gonen static inline int rdev_dump_station(struct cfg80211_registered_device *rdev, 234e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *mac, 235e35e4d28SHila Gonen struct station_info *sinfo) 236e35e4d28SHila Gonen { 23714e8a3c4SBeni Lev int ret; 23814e8a3c4SBeni Lev trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 23914e8a3c4SBeni Lev ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 24014e8a3c4SBeni Lev trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 24114e8a3c4SBeni Lev return ret; 242e35e4d28SHila Gonen } 243e35e4d28SHila Gonen 244e35e4d28SHila Gonen static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 245e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop) 246e35e4d28SHila Gonen { 24714e8a3c4SBeni Lev int ret; 24814e8a3c4SBeni Lev trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 24914e8a3c4SBeni Lev ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 25014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 25114e8a3c4SBeni Lev return ret; 252e35e4d28SHila Gonen } 253e35e4d28SHila Gonen 254e35e4d28SHila Gonen static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 255e35e4d28SHila Gonen struct net_device *dev, u8 *dst) 256e35e4d28SHila Gonen { 25714e8a3c4SBeni Lev int ret; 25814e8a3c4SBeni Lev trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 25914e8a3c4SBeni Lev ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 26014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 26114e8a3c4SBeni Lev return ret; 262e35e4d28SHila Gonen } 263e35e4d28SHila Gonen 264e35e4d28SHila Gonen static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 265e35e4d28SHila Gonen struct net_device *dev, u8 *dst, 266e35e4d28SHila Gonen u8 *next_hop) 267e35e4d28SHila Gonen { 26814e8a3c4SBeni Lev int ret; 26914e8a3c4SBeni Lev trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 27014e8a3c4SBeni Lev ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 27114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 27214e8a3c4SBeni Lev return ret; 273e35e4d28SHila Gonen } 274e35e4d28SHila Gonen 275e35e4d28SHila Gonen static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 276e35e4d28SHila Gonen struct net_device *dev, u8 *dst, u8 *next_hop, 277e35e4d28SHila Gonen struct mpath_info *pinfo) 278e35e4d28SHila Gonen { 27914e8a3c4SBeni Lev int ret; 28014e8a3c4SBeni Lev trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 28114e8a3c4SBeni Lev ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 28214e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 28314e8a3c4SBeni Lev return ret; 28414e8a3c4SBeni Lev 285e35e4d28SHila Gonen } 286e35e4d28SHila Gonen 28766be7d2bSHenning Rogge static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev, 28866be7d2bSHenning Rogge struct net_device *dev, u8 *dst, u8 *mpp, 28966be7d2bSHenning Rogge struct mpath_info *pinfo) 29066be7d2bSHenning Rogge { 29166be7d2bSHenning Rogge int ret; 29266be7d2bSHenning Rogge 29366be7d2bSHenning Rogge trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp); 29466be7d2bSHenning Rogge ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo); 29566be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 29666be7d2bSHenning Rogge return ret; 29766be7d2bSHenning Rogge } 29866be7d2bSHenning Rogge 299e35e4d28SHila Gonen static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 300e35e4d28SHila Gonen struct net_device *dev, int idx, u8 *dst, 301e35e4d28SHila Gonen u8 *next_hop, struct mpath_info *pinfo) 302e35e4d28SHila Gonen 303e35e4d28SHila Gonen { 30414e8a3c4SBeni Lev int ret; 30514e8a3c4SBeni Lev trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 30614e8a3c4SBeni Lev ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 307e35e4d28SHila Gonen pinfo); 30814e8a3c4SBeni Lev trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 30914e8a3c4SBeni Lev return ret; 310e35e4d28SHila Gonen } 311e35e4d28SHila Gonen 31266be7d2bSHenning Rogge static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev, 31366be7d2bSHenning Rogge struct net_device *dev, int idx, u8 *dst, 31466be7d2bSHenning Rogge u8 *mpp, struct mpath_info *pinfo) 31566be7d2bSHenning Rogge 31666be7d2bSHenning Rogge { 31766be7d2bSHenning Rogge int ret; 31866be7d2bSHenning Rogge 31966be7d2bSHenning Rogge trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp); 32066be7d2bSHenning Rogge ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo); 32166be7d2bSHenning Rogge trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 32266be7d2bSHenning Rogge return ret; 32366be7d2bSHenning Rogge } 32466be7d2bSHenning Rogge 325e35e4d28SHila Gonen static inline int 326e35e4d28SHila Gonen rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 327e35e4d28SHila Gonen struct net_device *dev, struct mesh_config *conf) 328e35e4d28SHila Gonen { 32914e8a3c4SBeni Lev int ret; 33014e8a3c4SBeni Lev trace_rdev_get_mesh_config(&rdev->wiphy, dev); 33114e8a3c4SBeni Lev ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 33214e8a3c4SBeni Lev trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 33314e8a3c4SBeni Lev return ret; 334e35e4d28SHila Gonen } 335e35e4d28SHila Gonen 336e35e4d28SHila Gonen static inline int 337e35e4d28SHila Gonen rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 338e35e4d28SHila Gonen struct net_device *dev, u32 mask, 339e35e4d28SHila Gonen const struct mesh_config *nconf) 340e35e4d28SHila Gonen { 34114e8a3c4SBeni Lev int ret; 34214e8a3c4SBeni Lev trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 34314e8a3c4SBeni Lev ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 34414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 34514e8a3c4SBeni Lev return ret; 346e35e4d28SHila Gonen } 347e35e4d28SHila Gonen 348e35e4d28SHila Gonen static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 349e35e4d28SHila Gonen struct net_device *dev, 350e35e4d28SHila Gonen const struct mesh_config *conf, 351e35e4d28SHila Gonen const struct mesh_setup *setup) 352e35e4d28SHila Gonen { 35314e8a3c4SBeni Lev int ret; 35414e8a3c4SBeni Lev trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 35514e8a3c4SBeni Lev ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 35614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 35714e8a3c4SBeni Lev return ret; 358e35e4d28SHila Gonen } 359e35e4d28SHila Gonen 360e35e4d28SHila Gonen 361e35e4d28SHila Gonen static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 362e35e4d28SHila Gonen struct net_device *dev) 363e35e4d28SHila Gonen { 36414e8a3c4SBeni Lev int ret; 36514e8a3c4SBeni Lev trace_rdev_leave_mesh(&rdev->wiphy, dev); 36614e8a3c4SBeni Lev ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 36714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 36814e8a3c4SBeni Lev return ret; 369e35e4d28SHila Gonen } 370e35e4d28SHila Gonen 3716e0bd6c3SRostislav Lisovy static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev, 3726e0bd6c3SRostislav Lisovy struct net_device *dev, 3736e0bd6c3SRostislav Lisovy struct ocb_setup *setup) 3746e0bd6c3SRostislav Lisovy { 3756e0bd6c3SRostislav Lisovy int ret; 3766e0bd6c3SRostislav Lisovy trace_rdev_join_ocb(&rdev->wiphy, dev, setup); 3776e0bd6c3SRostislav Lisovy ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup); 3786e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3796e0bd6c3SRostislav Lisovy return ret; 3806e0bd6c3SRostislav Lisovy } 3816e0bd6c3SRostislav Lisovy 3826e0bd6c3SRostislav Lisovy static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev, 3836e0bd6c3SRostislav Lisovy struct net_device *dev) 3846e0bd6c3SRostislav Lisovy { 3856e0bd6c3SRostislav Lisovy int ret; 3866e0bd6c3SRostislav Lisovy trace_rdev_leave_ocb(&rdev->wiphy, dev); 3876e0bd6c3SRostislav Lisovy ret = rdev->ops->leave_ocb(&rdev->wiphy, dev); 3886e0bd6c3SRostislav Lisovy trace_rdev_return_int(&rdev->wiphy, ret); 3896e0bd6c3SRostislav Lisovy return ret; 3906e0bd6c3SRostislav Lisovy } 3916e0bd6c3SRostislav Lisovy 392e35e4d28SHila Gonen static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 393e35e4d28SHila Gonen struct net_device *dev, 394e35e4d28SHila Gonen struct bss_parameters *params) 395e35e4d28SHila Gonen 396e35e4d28SHila Gonen { 39714e8a3c4SBeni Lev int ret; 39814e8a3c4SBeni Lev trace_rdev_change_bss(&rdev->wiphy, dev, params); 39914e8a3c4SBeni Lev ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 40014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 40114e8a3c4SBeni Lev return ret; 402e35e4d28SHila Gonen } 403e35e4d28SHila Gonen 404e35e4d28SHila Gonen static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 405e35e4d28SHila Gonen struct net_device *dev, 406e35e4d28SHila Gonen struct ieee80211_txq_params *params) 407e35e4d28SHila Gonen 408e35e4d28SHila Gonen { 40914e8a3c4SBeni Lev int ret; 41014e8a3c4SBeni Lev trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 41114e8a3c4SBeni Lev ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 41214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 41314e8a3c4SBeni Lev return ret; 414e35e4d28SHila Gonen } 415e35e4d28SHila Gonen 416e35e4d28SHila Gonen static inline int 417e35e4d28SHila Gonen rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 418e35e4d28SHila Gonen struct net_device *dev, 419e35e4d28SHila Gonen struct ieee80211_channel *chan) 420e35e4d28SHila Gonen { 42114e8a3c4SBeni Lev int ret; 42214e8a3c4SBeni Lev trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 42314e8a3c4SBeni Lev ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 42414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 42514e8a3c4SBeni Lev return ret; 426e35e4d28SHila Gonen } 427e35e4d28SHila Gonen 428e35e4d28SHila Gonen static inline int 429e35e4d28SHila Gonen rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 430683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 431e35e4d28SHila Gonen { 43214e8a3c4SBeni Lev int ret; 433683b6d3bSJohannes Berg trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 434683b6d3bSJohannes Berg ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 43514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 43614e8a3c4SBeni Lev return ret; 437e35e4d28SHila Gonen } 438e35e4d28SHila Gonen 439e35e4d28SHila Gonen static inline int rdev_scan(struct cfg80211_registered_device *rdev, 440e35e4d28SHila Gonen struct cfg80211_scan_request *request) 441e35e4d28SHila Gonen { 44214e8a3c4SBeni Lev int ret; 44314e8a3c4SBeni Lev trace_rdev_scan(&rdev->wiphy, request); 44414e8a3c4SBeni Lev ret = rdev->ops->scan(&rdev->wiphy, request); 44514e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 44614e8a3c4SBeni Lev return ret; 447e35e4d28SHila Gonen } 448e35e4d28SHila Gonen 44991d3ab46SVidyullatha Kanchanapally static inline void rdev_abort_scan(struct cfg80211_registered_device *rdev, 45091d3ab46SVidyullatha Kanchanapally struct wireless_dev *wdev) 45191d3ab46SVidyullatha Kanchanapally { 45291d3ab46SVidyullatha Kanchanapally trace_rdev_abort_scan(&rdev->wiphy, wdev); 45391d3ab46SVidyullatha Kanchanapally rdev->ops->abort_scan(&rdev->wiphy, wdev); 45491d3ab46SVidyullatha Kanchanapally trace_rdev_return_void(&rdev->wiphy); 45591d3ab46SVidyullatha Kanchanapally } 45691d3ab46SVidyullatha Kanchanapally 457e35e4d28SHila Gonen static inline int rdev_auth(struct cfg80211_registered_device *rdev, 458e35e4d28SHila Gonen struct net_device *dev, 459e35e4d28SHila Gonen struct cfg80211_auth_request *req) 460e35e4d28SHila Gonen { 46114e8a3c4SBeni Lev int ret; 46214e8a3c4SBeni Lev trace_rdev_auth(&rdev->wiphy, dev, req); 46314e8a3c4SBeni Lev ret = rdev->ops->auth(&rdev->wiphy, dev, req); 46414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 46514e8a3c4SBeni Lev return ret; 466e35e4d28SHila Gonen } 467e35e4d28SHila Gonen 468e35e4d28SHila Gonen static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 469e35e4d28SHila Gonen struct net_device *dev, 470e35e4d28SHila Gonen struct cfg80211_assoc_request *req) 471e35e4d28SHila Gonen { 47214e8a3c4SBeni Lev int ret; 47364a87472SJohannes Berg 474*1d4c0f04SJohannes Berg trace_rdev_assoc(&rdev->wiphy, dev, req); 47514e8a3c4SBeni Lev ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 47614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 47714e8a3c4SBeni Lev return ret; 478e35e4d28SHila Gonen } 479e35e4d28SHila Gonen 480e35e4d28SHila Gonen static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 481e35e4d28SHila Gonen struct net_device *dev, 482e35e4d28SHila Gonen struct cfg80211_deauth_request *req) 483e35e4d28SHila Gonen { 48414e8a3c4SBeni Lev int ret; 48514e8a3c4SBeni Lev trace_rdev_deauth(&rdev->wiphy, dev, req); 48614e8a3c4SBeni Lev ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 48714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 48814e8a3c4SBeni Lev return ret; 489e35e4d28SHila Gonen } 490e35e4d28SHila Gonen 491e35e4d28SHila Gonen static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 492e35e4d28SHila Gonen struct net_device *dev, 493e35e4d28SHila Gonen struct cfg80211_disassoc_request *req) 494e35e4d28SHila Gonen { 49514e8a3c4SBeni Lev int ret; 49614e8a3c4SBeni Lev trace_rdev_disassoc(&rdev->wiphy, dev, req); 49714e8a3c4SBeni Lev ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 49814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 49914e8a3c4SBeni Lev return ret; 500e35e4d28SHila Gonen } 501e35e4d28SHila Gonen 502e35e4d28SHila Gonen static inline int rdev_connect(struct cfg80211_registered_device *rdev, 503e35e4d28SHila Gonen struct net_device *dev, 504e35e4d28SHila Gonen struct cfg80211_connect_params *sme) 505e35e4d28SHila Gonen { 50614e8a3c4SBeni Lev int ret; 50714e8a3c4SBeni Lev trace_rdev_connect(&rdev->wiphy, dev, sme); 50814e8a3c4SBeni Lev ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 50914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 51014e8a3c4SBeni Lev return ret; 511e35e4d28SHila Gonen } 512e35e4d28SHila Gonen 513088e8df8Svamsi krishna static inline int 514088e8df8Svamsi krishna rdev_update_connect_params(struct cfg80211_registered_device *rdev, 515088e8df8Svamsi krishna struct net_device *dev, 516088e8df8Svamsi krishna struct cfg80211_connect_params *sme, u32 changed) 517088e8df8Svamsi krishna { 518088e8df8Svamsi krishna int ret; 519088e8df8Svamsi krishna trace_rdev_update_connect_params(&rdev->wiphy, dev, sme, changed); 520088e8df8Svamsi krishna ret = rdev->ops->update_connect_params(&rdev->wiphy, dev, sme, changed); 521088e8df8Svamsi krishna trace_rdev_return_int(&rdev->wiphy, ret); 522088e8df8Svamsi krishna return ret; 523088e8df8Svamsi krishna } 524088e8df8Svamsi krishna 525e35e4d28SHila Gonen static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 526e35e4d28SHila Gonen struct net_device *dev, u16 reason_code) 527e35e4d28SHila Gonen { 52814e8a3c4SBeni Lev int ret; 52914e8a3c4SBeni Lev trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 53014e8a3c4SBeni Lev ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 53114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 53214e8a3c4SBeni Lev return ret; 533e35e4d28SHila Gonen } 534e35e4d28SHila Gonen 535e35e4d28SHila Gonen static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 536e35e4d28SHila Gonen struct net_device *dev, 537e35e4d28SHila Gonen struct cfg80211_ibss_params *params) 538e35e4d28SHila Gonen { 53914e8a3c4SBeni Lev int ret; 54014e8a3c4SBeni Lev trace_rdev_join_ibss(&rdev->wiphy, dev, params); 54114e8a3c4SBeni Lev ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 54214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 54314e8a3c4SBeni Lev return ret; 544e35e4d28SHila Gonen } 545e35e4d28SHila Gonen 546e35e4d28SHila Gonen static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 547e35e4d28SHila Gonen struct net_device *dev) 548e35e4d28SHila Gonen { 54914e8a3c4SBeni Lev int ret; 55014e8a3c4SBeni Lev trace_rdev_leave_ibss(&rdev->wiphy, dev); 55114e8a3c4SBeni Lev ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 55214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 55314e8a3c4SBeni Lev return ret; 554e35e4d28SHila Gonen } 555e35e4d28SHila Gonen 556e35e4d28SHila Gonen static inline int 557e35e4d28SHila Gonen rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 558e35e4d28SHila Gonen { 55914e8a3c4SBeni Lev int ret; 56024953de0SJohannes Berg 56124953de0SJohannes Berg if (!rdev->ops->set_wiphy_params) 56224953de0SJohannes Berg return -EOPNOTSUPP; 56324953de0SJohannes Berg 56414e8a3c4SBeni Lev trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 56514e8a3c4SBeni Lev ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 56614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 56714e8a3c4SBeni Lev return ret; 568e35e4d28SHila Gonen } 569e35e4d28SHila Gonen 570e35e4d28SHila Gonen static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 571c8442118SJohannes Berg struct wireless_dev *wdev, 572e35e4d28SHila Gonen enum nl80211_tx_power_setting type, int mbm) 573e35e4d28SHila Gonen { 57414e8a3c4SBeni Lev int ret; 575c8442118SJohannes Berg trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 576c8442118SJohannes Berg ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 57714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 57814e8a3c4SBeni Lev return ret; 579e35e4d28SHila Gonen } 580e35e4d28SHila Gonen 581e35e4d28SHila Gonen static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 582c8442118SJohannes Berg struct wireless_dev *wdev, int *dbm) 583e35e4d28SHila Gonen { 58414e8a3c4SBeni Lev int ret; 585c8442118SJohannes Berg trace_rdev_get_tx_power(&rdev->wiphy, wdev); 586c8442118SJohannes Berg ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 58714e8a3c4SBeni Lev trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 58814e8a3c4SBeni Lev return ret; 589e35e4d28SHila Gonen } 590e35e4d28SHila Gonen 591ce0ce13aSMichael Braun static inline int 592ce0ce13aSMichael Braun rdev_set_multicast_to_unicast(struct cfg80211_registered_device *rdev, 593ce0ce13aSMichael Braun struct net_device *dev, 594ce0ce13aSMichael Braun const bool enabled) 595ce0ce13aSMichael Braun { 596ce0ce13aSMichael Braun int ret; 597ce0ce13aSMichael Braun trace_rdev_set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 598ce0ce13aSMichael Braun ret = rdev->ops->set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 599ce0ce13aSMichael Braun trace_rdev_return_int(&rdev->wiphy, ret); 600ce0ce13aSMichael Braun return ret; 601ce0ce13aSMichael Braun } 602ce0ce13aSMichael Braun 60352539ca8SToke Høiland-Jørgensen static inline int 60452539ca8SToke Høiland-Jørgensen rdev_get_txq_stats(struct cfg80211_registered_device *rdev, 60552539ca8SToke Høiland-Jørgensen struct wireless_dev *wdev, 60652539ca8SToke Høiland-Jørgensen struct cfg80211_txq_stats *txqstats) 60752539ca8SToke Høiland-Jørgensen { 60852539ca8SToke Høiland-Jørgensen int ret; 60952539ca8SToke Høiland-Jørgensen trace_rdev_get_txq_stats(&rdev->wiphy, wdev); 61052539ca8SToke Høiland-Jørgensen ret = rdev->ops->get_txq_stats(&rdev->wiphy, wdev, txqstats); 61152539ca8SToke Høiland-Jørgensen trace_rdev_return_int(&rdev->wiphy, ret); 61252539ca8SToke Høiland-Jørgensen return ret; 61352539ca8SToke Høiland-Jørgensen } 61452539ca8SToke Høiland-Jørgensen 615e35e4d28SHila Gonen static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 616e35e4d28SHila Gonen { 61714e8a3c4SBeni Lev trace_rdev_rfkill_poll(&rdev->wiphy); 618e35e4d28SHila Gonen rdev->ops->rfkill_poll(&rdev->wiphy); 61914e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 620e35e4d28SHila Gonen } 621e35e4d28SHila Gonen 622e35e4d28SHila Gonen 623e35e4d28SHila Gonen #ifdef CONFIG_NL80211_TESTMODE 624e35e4d28SHila Gonen static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 625fc73f11fSDavid Spinadel struct wireless_dev *wdev, 626e35e4d28SHila Gonen void *data, int len) 627e35e4d28SHila Gonen { 62814e8a3c4SBeni Lev int ret; 629fc73f11fSDavid Spinadel trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 630fc73f11fSDavid Spinadel ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 63114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 63214e8a3c4SBeni Lev return ret; 633e35e4d28SHila Gonen } 634e35e4d28SHila Gonen 635e35e4d28SHila Gonen static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 636e35e4d28SHila Gonen struct sk_buff *skb, 637e35e4d28SHila Gonen struct netlink_callback *cb, void *data, 638e35e4d28SHila Gonen int len) 639e35e4d28SHila Gonen { 64014e8a3c4SBeni Lev int ret; 64114e8a3c4SBeni Lev trace_rdev_testmode_dump(&rdev->wiphy); 64214e8a3c4SBeni Lev ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 64314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 64414e8a3c4SBeni Lev return ret; 645e35e4d28SHila Gonen } 646e35e4d28SHila Gonen #endif 647e35e4d28SHila Gonen 648e35e4d28SHila Gonen static inline int 649e35e4d28SHila Gonen rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 6507b0a0e3cSJohannes Berg struct net_device *dev, unsigned int link_id, 6517b0a0e3cSJohannes Berg const u8 *peer, 652e35e4d28SHila Gonen const struct cfg80211_bitrate_mask *mask) 653e35e4d28SHila Gonen { 65414e8a3c4SBeni Lev int ret; 6557b0a0e3cSJohannes Berg trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, link_id, peer, mask); 6567b0a0e3cSJohannes Berg ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, link_id, 6577b0a0e3cSJohannes Berg peer, mask); 65814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 65914e8a3c4SBeni Lev return ret; 660e35e4d28SHila Gonen } 661e35e4d28SHila Gonen 662e35e4d28SHila Gonen static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 663e35e4d28SHila Gonen struct net_device *netdev, int idx, 664e35e4d28SHila Gonen struct survey_info *info) 665e35e4d28SHila Gonen { 66614e8a3c4SBeni Lev int ret; 66714e8a3c4SBeni Lev trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 66814e8a3c4SBeni Lev ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 66914e8a3c4SBeni Lev if (ret < 0) 67014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 67114e8a3c4SBeni Lev else 67214e8a3c4SBeni Lev trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 67314e8a3c4SBeni Lev return ret; 674e35e4d28SHila Gonen } 675e35e4d28SHila Gonen 676e35e4d28SHila Gonen static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 677e35e4d28SHila Gonen struct net_device *netdev, 678e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 679e35e4d28SHila Gonen { 68014e8a3c4SBeni Lev int ret; 68114e8a3c4SBeni Lev trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 68214e8a3c4SBeni Lev ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 68314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 68414e8a3c4SBeni Lev return ret; 685e35e4d28SHila Gonen } 686e35e4d28SHila Gonen 687e35e4d28SHila Gonen static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 688e35e4d28SHila Gonen struct net_device *netdev, 689e35e4d28SHila Gonen struct cfg80211_pmksa *pmksa) 690e35e4d28SHila Gonen { 69114e8a3c4SBeni Lev int ret; 69214e8a3c4SBeni Lev trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 69314e8a3c4SBeni Lev ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 69414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 69514e8a3c4SBeni Lev return ret; 696e35e4d28SHila Gonen } 697e35e4d28SHila Gonen 698e35e4d28SHila Gonen static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 699e35e4d28SHila Gonen struct net_device *netdev) 700e35e4d28SHila Gonen { 70114e8a3c4SBeni Lev int ret; 70214e8a3c4SBeni Lev trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 70314e8a3c4SBeni Lev ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 70414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 70514e8a3c4SBeni Lev return ret; 706e35e4d28SHila Gonen } 707e35e4d28SHila Gonen 708e35e4d28SHila Gonen static inline int 709e35e4d28SHila Gonen rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 710e35e4d28SHila Gonen struct wireless_dev *wdev, 711e35e4d28SHila Gonen struct ieee80211_channel *chan, 712e35e4d28SHila Gonen unsigned int duration, u64 *cookie) 713e35e4d28SHila Gonen { 71414e8a3c4SBeni Lev int ret; 71542d97a59SJohannes Berg trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 71614e8a3c4SBeni Lev ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 71742d97a59SJohannes Berg duration, cookie); 71814e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 71914e8a3c4SBeni Lev return ret; 720e35e4d28SHila Gonen } 721e35e4d28SHila Gonen 722e35e4d28SHila Gonen static inline int 723e35e4d28SHila Gonen rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 724e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 725e35e4d28SHila Gonen { 72614e8a3c4SBeni Lev int ret; 72714e8a3c4SBeni Lev trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 72814e8a3c4SBeni Lev ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 72914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 73014e8a3c4SBeni Lev return ret; 731e35e4d28SHila Gonen } 732e35e4d28SHila Gonen 733e35e4d28SHila Gonen static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 734e35e4d28SHila Gonen struct wireless_dev *wdev, 735b176e629SAndrei Otcheretianski struct cfg80211_mgmt_tx_params *params, 736b176e629SAndrei Otcheretianski u64 *cookie) 737e35e4d28SHila Gonen { 73814e8a3c4SBeni Lev int ret; 739b176e629SAndrei Otcheretianski trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 740b176e629SAndrei Otcheretianski ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 74114e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 74214e8a3c4SBeni Lev return ret; 743e35e4d28SHila Gonen } 744e35e4d28SHila Gonen 7452576a9acSDenis Kenzior static inline int rdev_tx_control_port(struct cfg80211_registered_device *rdev, 7462576a9acSDenis Kenzior struct net_device *dev, 7472576a9acSDenis Kenzior const void *buf, size_t len, 7488d74a623SJohannes Berg const u8 *dest, __be16 proto, 749dca9ca2dSMarkus Theil const bool noencrypt, u64 *cookie) 7502576a9acSDenis Kenzior { 7512576a9acSDenis Kenzior int ret; 7522576a9acSDenis Kenzior trace_rdev_tx_control_port(&rdev->wiphy, dev, buf, len, 7538d74a623SJohannes Berg dest, proto, noencrypt); 7542576a9acSDenis Kenzior ret = rdev->ops->tx_control_port(&rdev->wiphy, dev, buf, len, 755dca9ca2dSMarkus Theil dest, proto, noencrypt, cookie); 756dca9ca2dSMarkus Theil if (cookie) 757dca9ca2dSMarkus Theil trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 758dca9ca2dSMarkus Theil else 7592576a9acSDenis Kenzior trace_rdev_return_int(&rdev->wiphy, ret); 7602576a9acSDenis Kenzior return ret; 7612576a9acSDenis Kenzior } 7622576a9acSDenis Kenzior 763e35e4d28SHila Gonen static inline int 764e35e4d28SHila Gonen rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 765e35e4d28SHila Gonen struct wireless_dev *wdev, u64 cookie) 766e35e4d28SHila Gonen { 76714e8a3c4SBeni Lev int ret; 76814e8a3c4SBeni Lev trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 76914e8a3c4SBeni Lev ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 77014e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 77114e8a3c4SBeni Lev return ret; 772e35e4d28SHila Gonen } 773e35e4d28SHila Gonen 774e35e4d28SHila Gonen static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 775e35e4d28SHila Gonen struct net_device *dev, bool enabled, 776e35e4d28SHila Gonen int timeout) 777e35e4d28SHila Gonen { 77814e8a3c4SBeni Lev int ret; 77914e8a3c4SBeni Lev trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 78014e8a3c4SBeni Lev ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 78114e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 78214e8a3c4SBeni Lev return ret; 783e35e4d28SHila Gonen } 784e35e4d28SHila Gonen 785e35e4d28SHila Gonen static inline int 786e35e4d28SHila Gonen rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 787e35e4d28SHila Gonen struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 788e35e4d28SHila Gonen { 78914e8a3c4SBeni Lev int ret; 79014e8a3c4SBeni Lev trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 791e35e4d28SHila Gonen rssi_hyst); 79214e8a3c4SBeni Lev ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 79314e8a3c4SBeni Lev rssi_hyst); 79414e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 79514e8a3c4SBeni Lev return ret; 796e35e4d28SHila Gonen } 797e35e4d28SHila Gonen 798e35e4d28SHila Gonen static inline int 7994a4b8169SAndrew Zaborowski rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev, 8004a4b8169SAndrew Zaborowski struct net_device *dev, s32 low, s32 high) 8014a4b8169SAndrew Zaborowski { 8024a4b8169SAndrew Zaborowski int ret; 8034a4b8169SAndrew Zaborowski trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high); 8044a4b8169SAndrew Zaborowski ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev, 8054a4b8169SAndrew Zaborowski low, high); 8064a4b8169SAndrew Zaborowski trace_rdev_return_int(&rdev->wiphy, ret); 8074a4b8169SAndrew Zaborowski return ret; 8084a4b8169SAndrew Zaborowski } 8094a4b8169SAndrew Zaborowski 8104a4b8169SAndrew Zaborowski static inline int 811e35e4d28SHila Gonen rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 812e35e4d28SHila Gonen struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 813e35e4d28SHila Gonen { 81414e8a3c4SBeni Lev int ret; 81514e8a3c4SBeni Lev trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 81614e8a3c4SBeni Lev ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 817e35e4d28SHila Gonen intvl); 81814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 81914e8a3c4SBeni Lev return ret; 820e35e4d28SHila Gonen } 821e35e4d28SHila Gonen 822e35e4d28SHila Gonen static inline void 8236cd536feSJohannes Berg rdev_update_mgmt_frame_registrations(struct cfg80211_registered_device *rdev, 8246cd536feSJohannes Berg struct wireless_dev *wdev, 8256cd536feSJohannes Berg struct mgmt_frame_regs *upd) 826e35e4d28SHila Gonen { 82733d8783cSJohannes Berg might_sleep(); 82833d8783cSJohannes Berg 8296cd536feSJohannes Berg trace_rdev_update_mgmt_frame_registrations(&rdev->wiphy, wdev, upd); 8306cd536feSJohannes Berg if (rdev->ops->update_mgmt_frame_registrations) 8316cd536feSJohannes Berg rdev->ops->update_mgmt_frame_registrations(&rdev->wiphy, wdev, 8326cd536feSJohannes Berg upd); 83314e8a3c4SBeni Lev trace_rdev_return_void(&rdev->wiphy); 834e35e4d28SHila Gonen } 835e35e4d28SHila Gonen 836e35e4d28SHila Gonen static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 837e35e4d28SHila Gonen u32 tx_ant, u32 rx_ant) 838e35e4d28SHila Gonen { 83914e8a3c4SBeni Lev int ret; 84014e8a3c4SBeni Lev trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 84114e8a3c4SBeni Lev ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 84214e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 84314e8a3c4SBeni Lev return ret; 844e35e4d28SHila Gonen } 845e35e4d28SHila Gonen 846e35e4d28SHila Gonen static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 847e35e4d28SHila Gonen u32 *tx_ant, u32 *rx_ant) 848e35e4d28SHila Gonen { 84914e8a3c4SBeni Lev int ret; 85014e8a3c4SBeni Lev trace_rdev_get_antenna(&rdev->wiphy); 85114e8a3c4SBeni Lev ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 85214e8a3c4SBeni Lev if (ret) 85314e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 85414e8a3c4SBeni Lev else 85514e8a3c4SBeni Lev trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 85614e8a3c4SBeni Lev *rx_ant); 85714e8a3c4SBeni Lev return ret; 858e35e4d28SHila Gonen } 859e35e4d28SHila Gonen 860e35e4d28SHila Gonen static inline int 861e35e4d28SHila Gonen rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 862e35e4d28SHila Gonen struct net_device *dev, 863e35e4d28SHila Gonen struct cfg80211_sched_scan_request *request) 864e35e4d28SHila Gonen { 86514e8a3c4SBeni Lev int ret; 866ca986ad9SArend Van Spriel trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid); 86714e8a3c4SBeni Lev ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 86814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 86914e8a3c4SBeni Lev return ret; 870e35e4d28SHila Gonen } 871e35e4d28SHila Gonen 872e35e4d28SHila Gonen static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 8733a3ecf1dSArend Van Spriel struct net_device *dev, u64 reqid) 874e35e4d28SHila Gonen { 87514e8a3c4SBeni Lev int ret; 8763a3ecf1dSArend Van Spriel trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid); 8773a3ecf1dSArend Van Spriel ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid); 87814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 87914e8a3c4SBeni Lev return ret; 880e35e4d28SHila Gonen } 881e35e4d28SHila Gonen 882e35e4d28SHila Gonen static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 883e35e4d28SHila Gonen struct net_device *dev, 884e35e4d28SHila Gonen struct cfg80211_gtk_rekey_data *data) 885e35e4d28SHila Gonen { 88614e8a3c4SBeni Lev int ret; 88714e8a3c4SBeni Lev trace_rdev_set_rekey_data(&rdev->wiphy, dev); 88814e8a3c4SBeni Lev ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 88914e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 89014e8a3c4SBeni Lev return ret; 891e35e4d28SHila Gonen } 892e35e4d28SHila Gonen 893e35e4d28SHila Gonen static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 894e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 895e35e4d28SHila Gonen u8 action_code, u8 dialog_token, 896df942e7bSSunil Dutt Undekari u16 status_code, u32 peer_capability, 89731fa97c5SArik Nemtsov bool initiator, const u8 *buf, size_t len) 898e35e4d28SHila Gonen { 89914e8a3c4SBeni Lev int ret; 90014e8a3c4SBeni Lev trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 901df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 90231fa97c5SArik Nemtsov initiator, buf, len); 90314e8a3c4SBeni Lev ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 904df942e7bSSunil Dutt Undekari dialog_token, status_code, peer_capability, 90531fa97c5SArik Nemtsov initiator, buf, len); 90614e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 90714e8a3c4SBeni Lev return ret; 908e35e4d28SHila Gonen } 909e35e4d28SHila Gonen 910e35e4d28SHila Gonen static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 911e35e4d28SHila Gonen struct net_device *dev, u8 *peer, 912e35e4d28SHila Gonen enum nl80211_tdls_operation oper) 913e35e4d28SHila Gonen { 91414e8a3c4SBeni Lev int ret; 91514e8a3c4SBeni Lev trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 91614e8a3c4SBeni Lev ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 91714e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 91814e8a3c4SBeni Lev return ret; 919e35e4d28SHila Gonen } 920e35e4d28SHila Gonen 921e35e4d28SHila Gonen static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 922e35e4d28SHila Gonen struct net_device *dev, const u8 *peer, 923e35e4d28SHila Gonen u64 *cookie) 924e35e4d28SHila Gonen { 92514e8a3c4SBeni Lev int ret; 92614e8a3c4SBeni Lev trace_rdev_probe_client(&rdev->wiphy, dev, peer); 92714e8a3c4SBeni Lev ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 92814e8a3c4SBeni Lev trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 92914e8a3c4SBeni Lev return ret; 930e35e4d28SHila Gonen } 931e35e4d28SHila Gonen 932e35e4d28SHila Gonen static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 933e35e4d28SHila Gonen struct net_device *dev, u16 noack_map) 934e35e4d28SHila Gonen { 93514e8a3c4SBeni Lev int ret; 93614e8a3c4SBeni Lev trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 93714e8a3c4SBeni Lev ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 93814e8a3c4SBeni Lev trace_rdev_return_int(&rdev->wiphy, ret); 93914e8a3c4SBeni Lev return ret; 940e35e4d28SHila Gonen } 941e35e4d28SHila Gonen 942e35e4d28SHila Gonen static inline int 943683b6d3bSJohannes Berg rdev_get_channel(struct cfg80211_registered_device *rdev, 944683b6d3bSJohannes Berg struct wireless_dev *wdev, 9457b0a0e3cSJohannes Berg unsigned int link_id, 946683b6d3bSJohannes Berg struct cfg80211_chan_def *chandef) 947e35e4d28SHila Gonen { 948683b6d3bSJohannes Berg int ret; 949683b6d3bSJohannes Berg 9507b0a0e3cSJohannes Berg trace_rdev_get_channel(&rdev->wiphy, wdev, link_id); 9517b0a0e3cSJohannes Berg ret = rdev->ops->get_channel(&rdev->wiphy, wdev, link_id, chandef); 952683b6d3bSJohannes Berg trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 953683b6d3bSJohannes Berg 95414e8a3c4SBeni Lev return ret; 955e35e4d28SHila Gonen } 956e35e4d28SHila Gonen 957eeb126e9SJohannes Berg static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 958eeb126e9SJohannes Berg struct wireless_dev *wdev) 959eeb126e9SJohannes Berg { 960eeb126e9SJohannes Berg int ret; 961eeb126e9SJohannes Berg 962eeb126e9SJohannes Berg trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 963eeb126e9SJohannes Berg ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 964eeb126e9SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 965eeb126e9SJohannes Berg return ret; 966eeb126e9SJohannes Berg } 967eeb126e9SJohannes Berg 968eeb126e9SJohannes Berg static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 969eeb126e9SJohannes Berg struct wireless_dev *wdev) 970eeb126e9SJohannes Berg { 971eeb126e9SJohannes Berg trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 972eeb126e9SJohannes Berg rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 973eeb126e9SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 974eeb126e9SJohannes Berg } 97577765eafSVasanthakumar Thiagarajan 976cb3b7d87SAyala Beker static inline int rdev_start_nan(struct cfg80211_registered_device *rdev, 977cb3b7d87SAyala Beker struct wireless_dev *wdev, 978cb3b7d87SAyala Beker struct cfg80211_nan_conf *conf) 979cb3b7d87SAyala Beker { 980cb3b7d87SAyala Beker int ret; 981cb3b7d87SAyala Beker 982cb3b7d87SAyala Beker trace_rdev_start_nan(&rdev->wiphy, wdev, conf); 983cb3b7d87SAyala Beker ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf); 984cb3b7d87SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 985cb3b7d87SAyala Beker return ret; 986cb3b7d87SAyala Beker } 987cb3b7d87SAyala Beker 988cb3b7d87SAyala Beker static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev, 989cb3b7d87SAyala Beker struct wireless_dev *wdev) 990cb3b7d87SAyala Beker { 991cb3b7d87SAyala Beker trace_rdev_stop_nan(&rdev->wiphy, wdev); 992cb3b7d87SAyala Beker rdev->ops->stop_nan(&rdev->wiphy, wdev); 993cb3b7d87SAyala Beker trace_rdev_return_void(&rdev->wiphy); 994cb3b7d87SAyala Beker } 995cb3b7d87SAyala Beker 996a442b761SAyala Beker static inline int 997a442b761SAyala Beker rdev_add_nan_func(struct cfg80211_registered_device *rdev, 998a442b761SAyala Beker struct wireless_dev *wdev, 999a442b761SAyala Beker struct cfg80211_nan_func *nan_func) 1000a442b761SAyala Beker { 1001a442b761SAyala Beker int ret; 1002a442b761SAyala Beker 1003a442b761SAyala Beker trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func); 1004a442b761SAyala Beker ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func); 1005a442b761SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 1006a442b761SAyala Beker return ret; 1007a442b761SAyala Beker } 1008a442b761SAyala Beker 1009a442b761SAyala Beker static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev, 1010a442b761SAyala Beker struct wireless_dev *wdev, u64 cookie) 1011a442b761SAyala Beker { 1012a442b761SAyala Beker trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie); 1013a442b761SAyala Beker rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie); 1014a442b761SAyala Beker trace_rdev_return_void(&rdev->wiphy); 1015a442b761SAyala Beker } 1016a442b761SAyala Beker 1017a5a9dcf2SAyala Beker static inline int 1018a5a9dcf2SAyala Beker rdev_nan_change_conf(struct cfg80211_registered_device *rdev, 1019a5a9dcf2SAyala Beker struct wireless_dev *wdev, 1020a5a9dcf2SAyala Beker struct cfg80211_nan_conf *conf, u32 changes) 1021a5a9dcf2SAyala Beker { 1022a5a9dcf2SAyala Beker int ret; 1023a5a9dcf2SAyala Beker 1024a5a9dcf2SAyala Beker trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes); 1025a5a9dcf2SAyala Beker if (rdev->ops->nan_change_conf) 1026a5a9dcf2SAyala Beker ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf, 1027a5a9dcf2SAyala Beker changes); 1028a5a9dcf2SAyala Beker else 1029a5a9dcf2SAyala Beker ret = -ENOTSUPP; 1030a5a9dcf2SAyala Beker trace_rdev_return_int(&rdev->wiphy, ret); 1031a5a9dcf2SAyala Beker return ret; 1032a5a9dcf2SAyala Beker } 1033a5a9dcf2SAyala Beker 103477765eafSVasanthakumar Thiagarajan static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 103577765eafSVasanthakumar Thiagarajan struct net_device *dev, 103677765eafSVasanthakumar Thiagarajan struct cfg80211_acl_data *params) 103777765eafSVasanthakumar Thiagarajan { 103877765eafSVasanthakumar Thiagarajan int ret; 103977765eafSVasanthakumar Thiagarajan 104077765eafSVasanthakumar Thiagarajan trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 104177765eafSVasanthakumar Thiagarajan ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 104277765eafSVasanthakumar Thiagarajan trace_rdev_return_int(&rdev->wiphy, ret); 104377765eafSVasanthakumar Thiagarajan return ret; 104477765eafSVasanthakumar Thiagarajan } 1045355199e0SJouni Malinen 1046355199e0SJouni Malinen static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 1047355199e0SJouni Malinen struct net_device *dev, 1048355199e0SJouni Malinen struct cfg80211_update_ft_ies_params *ftie) 1049355199e0SJouni Malinen { 1050355199e0SJouni Malinen int ret; 1051355199e0SJouni Malinen 1052355199e0SJouni Malinen trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 1053355199e0SJouni Malinen ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 1054355199e0SJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1055355199e0SJouni Malinen return ret; 10565de17984SArend van Spriel } 10575de17984SArend van Spriel 10585de17984SArend van Spriel static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 10595de17984SArend van Spriel struct wireless_dev *wdev, 10605de17984SArend van Spriel enum nl80211_crit_proto_id protocol, 10615de17984SArend van Spriel u16 duration) 10625de17984SArend van Spriel { 10635de17984SArend van Spriel int ret; 10645de17984SArend van Spriel 10655de17984SArend van Spriel trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 10665de17984SArend van Spriel ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 10675de17984SArend van Spriel protocol, duration); 10685de17984SArend van Spriel trace_rdev_return_int(&rdev->wiphy, ret); 10695de17984SArend van Spriel return ret; 10705de17984SArend van Spriel } 10715de17984SArend van Spriel 10725de17984SArend van Spriel static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 10735de17984SArend van Spriel struct wireless_dev *wdev) 10745de17984SArend van Spriel { 10755de17984SArend van Spriel trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 10765de17984SArend van Spriel rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 10775de17984SArend van Spriel trace_rdev_return_void(&rdev->wiphy); 1078355199e0SJouni Malinen } 1079355199e0SJouni Malinen 108016ef1fe2SSimon Wunderlich static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 108116ef1fe2SSimon Wunderlich struct net_device *dev, 108216ef1fe2SSimon Wunderlich struct cfg80211_csa_settings *params) 108316ef1fe2SSimon Wunderlich { 108416ef1fe2SSimon Wunderlich int ret; 108516ef1fe2SSimon Wunderlich 108616ef1fe2SSimon Wunderlich trace_rdev_channel_switch(&rdev->wiphy, dev, params); 108716ef1fe2SSimon Wunderlich ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 108816ef1fe2SSimon Wunderlich trace_rdev_return_int(&rdev->wiphy, ret); 108916ef1fe2SSimon Wunderlich return ret; 109016ef1fe2SSimon Wunderlich } 109116ef1fe2SSimon Wunderlich 1092fa9ffc74SKyeyoon Park static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 1093fa9ffc74SKyeyoon Park struct net_device *dev, 1094fa9ffc74SKyeyoon Park struct cfg80211_qos_map *qos_map) 1095fa9ffc74SKyeyoon Park { 1096fa9ffc74SKyeyoon Park int ret = -EOPNOTSUPP; 1097fa9ffc74SKyeyoon Park 1098fa9ffc74SKyeyoon Park if (rdev->ops->set_qos_map) { 1099fa9ffc74SKyeyoon Park trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 1100fa9ffc74SKyeyoon Park ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 1101fa9ffc74SKyeyoon Park trace_rdev_return_int(&rdev->wiphy, ret); 1102fa9ffc74SKyeyoon Park } 1103fa9ffc74SKyeyoon Park 1104fa9ffc74SKyeyoon Park return ret; 1105fa9ffc74SKyeyoon Park } 1106fa9ffc74SKyeyoon Park 1107e16821bcSJouni Malinen static inline int 1108e16821bcSJouni Malinen rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 11097b0a0e3cSJohannes Berg struct net_device *dev, 11107b0a0e3cSJohannes Berg unsigned int link_id, 11117b0a0e3cSJohannes Berg struct cfg80211_chan_def *chandef) 1112e16821bcSJouni Malinen { 1113e16821bcSJouni Malinen int ret; 1114e16821bcSJouni Malinen 11157b0a0e3cSJohannes Berg trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, link_id, chandef); 11167b0a0e3cSJohannes Berg ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, link_id, chandef); 1117e16821bcSJouni Malinen trace_rdev_return_int(&rdev->wiphy, ret); 1118e16821bcSJouni Malinen 1119e16821bcSJouni Malinen return ret; 1120e16821bcSJouni Malinen } 1121e16821bcSJouni Malinen 1122960d01acSJohannes Berg static inline int 1123960d01acSJohannes Berg rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 1124960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer, 1125960d01acSJohannes Berg u8 user_prio, u16 admitted_time) 1126960d01acSJohannes Berg { 1127960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1128960d01acSJohannes Berg 1129960d01acSJohannes Berg trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1130960d01acSJohannes Berg user_prio, admitted_time); 1131960d01acSJohannes Berg if (rdev->ops->add_tx_ts) 1132960d01acSJohannes Berg ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1133960d01acSJohannes Berg user_prio, admitted_time); 1134960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1135960d01acSJohannes Berg 1136960d01acSJohannes Berg return ret; 1137960d01acSJohannes Berg } 1138960d01acSJohannes Berg 1139960d01acSJohannes Berg static inline int 1140960d01acSJohannes Berg rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 1141960d01acSJohannes Berg struct net_device *dev, u8 tsid, const u8 *peer) 1142960d01acSJohannes Berg { 1143960d01acSJohannes Berg int ret = -EOPNOTSUPP; 1144960d01acSJohannes Berg 1145960d01acSJohannes Berg trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1146960d01acSJohannes Berg if (rdev->ops->del_tx_ts) 1147960d01acSJohannes Berg ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1148960d01acSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1149960d01acSJohannes Berg 1150960d01acSJohannes Berg return ret; 1151960d01acSJohannes Berg } 1152960d01acSJohannes Berg 11531057d35eSArik Nemtsov static inline int 11541057d35eSArik Nemtsov rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev, 11551057d35eSArik Nemtsov struct net_device *dev, const u8 *addr, 11561057d35eSArik Nemtsov u8 oper_class, struct cfg80211_chan_def *chandef) 11571057d35eSArik Nemtsov { 11581057d35eSArik Nemtsov int ret; 11591057d35eSArik Nemtsov 11601057d35eSArik Nemtsov trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class, 11611057d35eSArik Nemtsov chandef); 11621057d35eSArik Nemtsov ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr, 11631057d35eSArik Nemtsov oper_class, chandef); 11641057d35eSArik Nemtsov trace_rdev_return_int(&rdev->wiphy, ret); 11651057d35eSArik Nemtsov return ret; 11661057d35eSArik Nemtsov } 11671057d35eSArik Nemtsov 11681057d35eSArik Nemtsov static inline void 11691057d35eSArik Nemtsov rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev, 11701057d35eSArik Nemtsov struct net_device *dev, const u8 *addr) 11711057d35eSArik Nemtsov { 11721057d35eSArik Nemtsov trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11731057d35eSArik Nemtsov rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 11741057d35eSArik Nemtsov trace_rdev_return_void(&rdev->wiphy); 11751057d35eSArik Nemtsov } 11761057d35eSArik Nemtsov 1177a1056b1bSIlan Peer static inline int 1178a1056b1bSIlan Peer rdev_start_radar_detection(struct cfg80211_registered_device *rdev, 1179a1056b1bSIlan Peer struct net_device *dev, 1180a1056b1bSIlan Peer struct cfg80211_chan_def *chandef, 1181a1056b1bSIlan Peer u32 cac_time_ms) 1182a1056b1bSIlan Peer { 1183a1056b1bSIlan Peer int ret = -ENOTSUPP; 1184a1056b1bSIlan Peer 1185a1056b1bSIlan Peer trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef, 1186a1056b1bSIlan Peer cac_time_ms); 1187a1056b1bSIlan Peer if (rdev->ops->start_radar_detection) 1188a1056b1bSIlan Peer ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev, 1189a1056b1bSIlan Peer chandef, cac_time_ms); 1190a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1191a1056b1bSIlan Peer return ret; 1192a1056b1bSIlan Peer } 1193a1056b1bSIlan Peer 119426ec17a1SOrr Mazor static inline void 119526ec17a1SOrr Mazor rdev_end_cac(struct cfg80211_registered_device *rdev, 119626ec17a1SOrr Mazor struct net_device *dev) 119726ec17a1SOrr Mazor { 119826ec17a1SOrr Mazor trace_rdev_end_cac(&rdev->wiphy, dev); 119926ec17a1SOrr Mazor if (rdev->ops->end_cac) 120026ec17a1SOrr Mazor rdev->ops->end_cac(&rdev->wiphy, dev); 120126ec17a1SOrr Mazor trace_rdev_return_void(&rdev->wiphy); 120226ec17a1SOrr Mazor } 120326ec17a1SOrr Mazor 1204a1056b1bSIlan Peer static inline int 1205a1056b1bSIlan Peer rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, 1206a1056b1bSIlan Peer struct net_device *dev, 120757fbcce3SJohannes Berg int mcast_rate[NUM_NL80211_BANDS]) 1208a1056b1bSIlan Peer { 1209a1056b1bSIlan Peer int ret = -ENOTSUPP; 1210a1056b1bSIlan Peer 1211a1056b1bSIlan Peer trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1212a1056b1bSIlan Peer if (rdev->ops->set_mcast_rate) 1213a1056b1bSIlan Peer ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1214a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1215a1056b1bSIlan Peer return ret; 1216a1056b1bSIlan Peer } 1217a1056b1bSIlan Peer 1218a1056b1bSIlan Peer static inline int 1219a1056b1bSIlan Peer rdev_set_coalesce(struct cfg80211_registered_device *rdev, 1220a1056b1bSIlan Peer struct cfg80211_coalesce *coalesce) 1221a1056b1bSIlan Peer { 1222a1056b1bSIlan Peer int ret = -ENOTSUPP; 1223a1056b1bSIlan Peer 1224a1056b1bSIlan Peer trace_rdev_set_coalesce(&rdev->wiphy, coalesce); 1225a1056b1bSIlan Peer if (rdev->ops->set_coalesce) 1226a1056b1bSIlan Peer ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce); 1227a1056b1bSIlan Peer trace_rdev_return_int(&rdev->wiphy, ret); 1228a1056b1bSIlan Peer return ret; 1229a1056b1bSIlan Peer } 12303a00df57SAvraham Stern 12313a00df57SAvraham Stern static inline int rdev_set_pmk(struct cfg80211_registered_device *rdev, 12323a00df57SAvraham Stern struct net_device *dev, 12333a00df57SAvraham Stern struct cfg80211_pmk_conf *pmk_conf) 12343a00df57SAvraham Stern { 12353a00df57SAvraham Stern int ret = -EOPNOTSUPP; 12363a00df57SAvraham Stern 12373a00df57SAvraham Stern trace_rdev_set_pmk(&rdev->wiphy, dev, pmk_conf); 12383a00df57SAvraham Stern if (rdev->ops->set_pmk) 12393a00df57SAvraham Stern ret = rdev->ops->set_pmk(&rdev->wiphy, dev, pmk_conf); 12403a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 12413a00df57SAvraham Stern return ret; 12423a00df57SAvraham Stern } 12433a00df57SAvraham Stern 12443a00df57SAvraham Stern static inline int rdev_del_pmk(struct cfg80211_registered_device *rdev, 12453a00df57SAvraham Stern struct net_device *dev, const u8 *aa) 12463a00df57SAvraham Stern { 12473a00df57SAvraham Stern int ret = -EOPNOTSUPP; 12483a00df57SAvraham Stern 12493a00df57SAvraham Stern trace_rdev_del_pmk(&rdev->wiphy, dev, aa); 12503a00df57SAvraham Stern if (rdev->ops->del_pmk) 12513a00df57SAvraham Stern ret = rdev->ops->del_pmk(&rdev->wiphy, dev, aa); 12523a00df57SAvraham Stern trace_rdev_return_int(&rdev->wiphy, ret); 12533a00df57SAvraham Stern return ret; 12543a00df57SAvraham Stern } 125540cbfa90SSrinivas Dasari 125640cbfa90SSrinivas Dasari static inline int 125740cbfa90SSrinivas Dasari rdev_external_auth(struct cfg80211_registered_device *rdev, 125840cbfa90SSrinivas Dasari struct net_device *dev, 125940cbfa90SSrinivas Dasari struct cfg80211_external_auth_params *params) 126040cbfa90SSrinivas Dasari { 126140cbfa90SSrinivas Dasari int ret = -EOPNOTSUPP; 126240cbfa90SSrinivas Dasari 126340cbfa90SSrinivas Dasari trace_rdev_external_auth(&rdev->wiphy, dev, params); 126440cbfa90SSrinivas Dasari if (rdev->ops->external_auth) 126540cbfa90SSrinivas Dasari ret = rdev->ops->external_auth(&rdev->wiphy, dev, params); 126640cbfa90SSrinivas Dasari trace_rdev_return_int(&rdev->wiphy, ret); 126740cbfa90SSrinivas Dasari return ret; 126840cbfa90SSrinivas Dasari } 126940cbfa90SSrinivas Dasari 127081e54d08SPradeep Kumar Chitrapu static inline int 127181e54d08SPradeep Kumar Chitrapu rdev_get_ftm_responder_stats(struct cfg80211_registered_device *rdev, 127281e54d08SPradeep Kumar Chitrapu struct net_device *dev, 127381e54d08SPradeep Kumar Chitrapu struct cfg80211_ftm_responder_stats *ftm_stats) 127481e54d08SPradeep Kumar Chitrapu { 127581e54d08SPradeep Kumar Chitrapu int ret = -EOPNOTSUPP; 127681e54d08SPradeep Kumar Chitrapu 127781e54d08SPradeep Kumar Chitrapu trace_rdev_get_ftm_responder_stats(&rdev->wiphy, dev, ftm_stats); 127881e54d08SPradeep Kumar Chitrapu if (rdev->ops->get_ftm_responder_stats) 127981e54d08SPradeep Kumar Chitrapu ret = rdev->ops->get_ftm_responder_stats(&rdev->wiphy, dev, 128081e54d08SPradeep Kumar Chitrapu ftm_stats); 128181e54d08SPradeep Kumar Chitrapu trace_rdev_return_int(&rdev->wiphy, ret); 128281e54d08SPradeep Kumar Chitrapu return ret; 128381e54d08SPradeep Kumar Chitrapu } 128481e54d08SPradeep Kumar Chitrapu 12859bb7e0f2SJohannes Berg static inline int 12869bb7e0f2SJohannes Berg rdev_start_pmsr(struct cfg80211_registered_device *rdev, 12879bb7e0f2SJohannes Berg struct wireless_dev *wdev, 12889bb7e0f2SJohannes Berg struct cfg80211_pmsr_request *request) 12899bb7e0f2SJohannes Berg { 12909bb7e0f2SJohannes Berg int ret = -EOPNOTSUPP; 12919bb7e0f2SJohannes Berg 12929bb7e0f2SJohannes Berg trace_rdev_start_pmsr(&rdev->wiphy, wdev, request->cookie); 12939bb7e0f2SJohannes Berg if (rdev->ops->start_pmsr) 12949bb7e0f2SJohannes Berg ret = rdev->ops->start_pmsr(&rdev->wiphy, wdev, request); 12959bb7e0f2SJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 12969bb7e0f2SJohannes Berg return ret; 12979bb7e0f2SJohannes Berg } 12989bb7e0f2SJohannes Berg 12999bb7e0f2SJohannes Berg static inline void 13009bb7e0f2SJohannes Berg rdev_abort_pmsr(struct cfg80211_registered_device *rdev, 13019bb7e0f2SJohannes Berg struct wireless_dev *wdev, 13029bb7e0f2SJohannes Berg struct cfg80211_pmsr_request *request) 13039bb7e0f2SJohannes Berg { 13049bb7e0f2SJohannes Berg trace_rdev_abort_pmsr(&rdev->wiphy, wdev, request->cookie); 13059bb7e0f2SJohannes Berg if (rdev->ops->abort_pmsr) 13069bb7e0f2SJohannes Berg rdev->ops->abort_pmsr(&rdev->wiphy, wdev, request); 13079bb7e0f2SJohannes Berg trace_rdev_return_void(&rdev->wiphy); 13089bb7e0f2SJohannes Berg } 13099bb7e0f2SJohannes Berg 1310cb74e977SSunil Dutt static inline int rdev_update_owe_info(struct cfg80211_registered_device *rdev, 1311cb74e977SSunil Dutt struct net_device *dev, 1312cb74e977SSunil Dutt struct cfg80211_update_owe_info *oweinfo) 1313cb74e977SSunil Dutt { 1314cb74e977SSunil Dutt int ret = -EOPNOTSUPP; 1315cb74e977SSunil Dutt 1316cb74e977SSunil Dutt trace_rdev_update_owe_info(&rdev->wiphy, dev, oweinfo); 1317cb74e977SSunil Dutt if (rdev->ops->update_owe_info) 1318cb74e977SSunil Dutt ret = rdev->ops->update_owe_info(&rdev->wiphy, dev, oweinfo); 1319cb74e977SSunil Dutt trace_rdev_return_int(&rdev->wiphy, ret); 1320cb74e977SSunil Dutt return ret; 1321cb74e977SSunil Dutt } 1322cb74e977SSunil Dutt 13235ab92e7fSRajkumar Manoharan static inline int 13245ab92e7fSRajkumar Manoharan rdev_probe_mesh_link(struct cfg80211_registered_device *rdev, 13255ab92e7fSRajkumar Manoharan struct net_device *dev, const u8 *dest, 13265ab92e7fSRajkumar Manoharan const void *buf, size_t len) 13275ab92e7fSRajkumar Manoharan { 13285ab92e7fSRajkumar Manoharan int ret; 13295ab92e7fSRajkumar Manoharan 13305ab92e7fSRajkumar Manoharan trace_rdev_probe_mesh_link(&rdev->wiphy, dev, dest, buf, len); 13315ab92e7fSRajkumar Manoharan ret = rdev->ops->probe_mesh_link(&rdev->wiphy, dev, buf, len); 13325ab92e7fSRajkumar Manoharan trace_rdev_return_int(&rdev->wiphy, ret); 13335ab92e7fSRajkumar Manoharan return ret; 13345ab92e7fSRajkumar Manoharan } 13355ab92e7fSRajkumar Manoharan 133677f576deSTamizh chelvam static inline int rdev_set_tid_config(struct cfg80211_registered_device *rdev, 133777f576deSTamizh chelvam struct net_device *dev, 13383710a8a6SJohannes Berg struct cfg80211_tid_config *tid_conf) 133977f576deSTamizh chelvam { 134077f576deSTamizh chelvam int ret; 134177f576deSTamizh chelvam 134277f576deSTamizh chelvam trace_rdev_set_tid_config(&rdev->wiphy, dev, tid_conf); 134377f576deSTamizh chelvam ret = rdev->ops->set_tid_config(&rdev->wiphy, dev, tid_conf); 134477f576deSTamizh chelvam trace_rdev_return_int(&rdev->wiphy, ret); 134577f576deSTamizh chelvam return ret; 134677f576deSTamizh chelvam } 134777f576deSTamizh chelvam 134877f576deSTamizh chelvam static inline int rdev_reset_tid_config(struct cfg80211_registered_device *rdev, 134977f576deSTamizh chelvam struct net_device *dev, const u8 *peer, 13503710a8a6SJohannes Berg u8 tids) 135177f576deSTamizh chelvam { 135277f576deSTamizh chelvam int ret; 135377f576deSTamizh chelvam 13543710a8a6SJohannes Berg trace_rdev_reset_tid_config(&rdev->wiphy, dev, peer, tids); 13553710a8a6SJohannes Berg ret = rdev->ops->reset_tid_config(&rdev->wiphy, dev, peer, tids); 135677f576deSTamizh chelvam trace_rdev_return_int(&rdev->wiphy, ret); 135777f576deSTamizh chelvam return ret; 135877f576deSTamizh chelvam } 135977f576deSTamizh chelvam 13606bdb68ceSCarl Huang static inline int rdev_set_sar_specs(struct cfg80211_registered_device *rdev, 13616bdb68ceSCarl Huang struct cfg80211_sar_specs *sar) 13626bdb68ceSCarl Huang { 13636bdb68ceSCarl Huang int ret; 13646bdb68ceSCarl Huang 13656bdb68ceSCarl Huang trace_rdev_set_sar_specs(&rdev->wiphy, sar); 13666bdb68ceSCarl Huang ret = rdev->ops->set_sar_specs(&rdev->wiphy, sar); 13676bdb68ceSCarl Huang trace_rdev_return_int(&rdev->wiphy, ret); 13686bdb68ceSCarl Huang 13696bdb68ceSCarl Huang return ret; 13706bdb68ceSCarl Huang } 13716bdb68ceSCarl Huang 13720d2ab3aeSJohn Crispin static inline int rdev_color_change(struct cfg80211_registered_device *rdev, 13730d2ab3aeSJohn Crispin struct net_device *dev, 13740d2ab3aeSJohn Crispin struct cfg80211_color_change_settings *params) 13750d2ab3aeSJohn Crispin { 13760d2ab3aeSJohn Crispin int ret; 13770d2ab3aeSJohn Crispin 13780d2ab3aeSJohn Crispin trace_rdev_color_change(&rdev->wiphy, dev, params); 13790d2ab3aeSJohn Crispin ret = rdev->ops->color_change(&rdev->wiphy, dev, params); 13800d2ab3aeSJohn Crispin trace_rdev_return_int(&rdev->wiphy, ret); 13810d2ab3aeSJohn Crispin 13820d2ab3aeSJohn Crispin return ret; 13830d2ab3aeSJohn Crispin } 13840d2ab3aeSJohn Crispin 1385e306784aSSubrat Mishra static inline int 1386e306784aSSubrat Mishra rdev_set_fils_aad(struct cfg80211_registered_device *rdev, 1387e306784aSSubrat Mishra struct net_device *dev, struct cfg80211_fils_aad *fils_aad) 1388e306784aSSubrat Mishra { 1389e306784aSSubrat Mishra int ret = -EOPNOTSUPP; 1390e306784aSSubrat Mishra 1391e306784aSSubrat Mishra trace_rdev_set_fils_aad(&rdev->wiphy, dev, fils_aad); 1392e306784aSSubrat Mishra if (rdev->ops->set_fils_aad) 1393e306784aSSubrat Mishra ret = rdev->ops->set_fils_aad(&rdev->wiphy, dev, fils_aad); 1394e306784aSSubrat Mishra trace_rdev_return_int(&rdev->wiphy, ret); 1395e306784aSSubrat Mishra 1396e306784aSSubrat Mishra return ret; 1397e306784aSSubrat Mishra } 1398e306784aSSubrat Mishra 1399bc2dfc02SLorenzo Bianconi static inline int 1400a95bfb87SLorenzo Bianconi rdev_set_radar_background(struct cfg80211_registered_device *rdev, 1401bc2dfc02SLorenzo Bianconi struct cfg80211_chan_def *chandef) 1402bc2dfc02SLorenzo Bianconi { 1403bc2dfc02SLorenzo Bianconi struct wiphy *wiphy = &rdev->wiphy; 1404bc2dfc02SLorenzo Bianconi int ret; 1405bc2dfc02SLorenzo Bianconi 1406a95bfb87SLorenzo Bianconi if (!rdev->ops->set_radar_background) 1407bc2dfc02SLorenzo Bianconi return -EOPNOTSUPP; 1408bc2dfc02SLorenzo Bianconi 1409a95bfb87SLorenzo Bianconi trace_rdev_set_radar_background(wiphy, chandef); 1410a95bfb87SLorenzo Bianconi ret = rdev->ops->set_radar_background(wiphy, chandef); 1411bc2dfc02SLorenzo Bianconi trace_rdev_return_int(wiphy, ret); 1412bc2dfc02SLorenzo Bianconi 1413bc2dfc02SLorenzo Bianconi return ret; 1414bc2dfc02SLorenzo Bianconi } 1415bc2dfc02SLorenzo Bianconi 1416f2a0290bSJohannes Berg static inline int 1417f2a0290bSJohannes Berg rdev_add_intf_link(struct cfg80211_registered_device *rdev, 1418f2a0290bSJohannes Berg struct wireless_dev *wdev, 1419f2a0290bSJohannes Berg unsigned int link_id) 1420f2a0290bSJohannes Berg { 1421f2a0290bSJohannes Berg int ret = 0; 1422f2a0290bSJohannes Berg 1423f2a0290bSJohannes Berg trace_rdev_add_intf_link(&rdev->wiphy, wdev, link_id); 1424f2a0290bSJohannes Berg if (rdev->ops->add_intf_link) 1425f2a0290bSJohannes Berg ret = rdev->ops->add_intf_link(&rdev->wiphy, wdev, link_id); 1426f2a0290bSJohannes Berg trace_rdev_return_int(&rdev->wiphy, ret); 1427f2a0290bSJohannes Berg 1428f2a0290bSJohannes Berg return ret; 1429f2a0290bSJohannes Berg } 1430f2a0290bSJohannes Berg 1431f2a0290bSJohannes Berg static inline void 1432f2a0290bSJohannes Berg rdev_del_intf_link(struct cfg80211_registered_device *rdev, 1433f2a0290bSJohannes Berg struct wireless_dev *wdev, 1434f2a0290bSJohannes Berg unsigned int link_id) 1435f2a0290bSJohannes Berg { 1436f2a0290bSJohannes Berg trace_rdev_del_intf_link(&rdev->wiphy, wdev, link_id); 1437f2a0290bSJohannes Berg if (rdev->ops->add_intf_link) 1438f2a0290bSJohannes Berg rdev->ops->add_intf_link(&rdev->wiphy, wdev, link_id); 1439f2a0290bSJohannes Berg trace_rdev_return_void(&rdev->wiphy); 1440f2a0290bSJohannes Berg } 1441f2a0290bSJohannes Berg 1442577e5b8cSShaul Triebitz static inline int 1443577e5b8cSShaul Triebitz rdev_add_link_station(struct cfg80211_registered_device *rdev, 1444577e5b8cSShaul Triebitz struct net_device *dev, 1445577e5b8cSShaul Triebitz struct link_station_parameters *params) 1446577e5b8cSShaul Triebitz { 1447577e5b8cSShaul Triebitz int ret; 1448577e5b8cSShaul Triebitz 1449577e5b8cSShaul Triebitz if (!rdev->ops->add_link_station) 1450577e5b8cSShaul Triebitz return -EOPNOTSUPP; 1451577e5b8cSShaul Triebitz 1452577e5b8cSShaul Triebitz trace_rdev_add_link_station(&rdev->wiphy, dev, params); 1453577e5b8cSShaul Triebitz ret = rdev->ops->add_link_station(&rdev->wiphy, dev, params); 1454577e5b8cSShaul Triebitz trace_rdev_return_int(&rdev->wiphy, ret); 1455577e5b8cSShaul Triebitz return ret; 1456577e5b8cSShaul Triebitz } 1457577e5b8cSShaul Triebitz 1458577e5b8cSShaul Triebitz static inline int 1459577e5b8cSShaul Triebitz rdev_mod_link_station(struct cfg80211_registered_device *rdev, 1460577e5b8cSShaul Triebitz struct net_device *dev, 1461577e5b8cSShaul Triebitz struct link_station_parameters *params) 1462577e5b8cSShaul Triebitz { 1463577e5b8cSShaul Triebitz int ret; 1464577e5b8cSShaul Triebitz 1465577e5b8cSShaul Triebitz if (!rdev->ops->mod_link_station) 1466577e5b8cSShaul Triebitz return -EOPNOTSUPP; 1467577e5b8cSShaul Triebitz 1468577e5b8cSShaul Triebitz trace_rdev_mod_link_station(&rdev->wiphy, dev, params); 1469577e5b8cSShaul Triebitz ret = rdev->ops->mod_link_station(&rdev->wiphy, dev, params); 1470577e5b8cSShaul Triebitz trace_rdev_return_int(&rdev->wiphy, ret); 1471577e5b8cSShaul Triebitz return ret; 1472577e5b8cSShaul Triebitz } 1473577e5b8cSShaul Triebitz 1474577e5b8cSShaul Triebitz static inline int 1475577e5b8cSShaul Triebitz rdev_del_link_station(struct cfg80211_registered_device *rdev, 1476577e5b8cSShaul Triebitz struct net_device *dev, 1477577e5b8cSShaul Triebitz struct link_station_del_parameters *params) 1478577e5b8cSShaul Triebitz { 1479577e5b8cSShaul Triebitz int ret; 1480577e5b8cSShaul Triebitz 1481577e5b8cSShaul Triebitz if (!rdev->ops->del_link_station) 1482577e5b8cSShaul Triebitz return -EOPNOTSUPP; 1483577e5b8cSShaul Triebitz 1484577e5b8cSShaul Triebitz trace_rdev_del_link_station(&rdev->wiphy, dev, params); 1485577e5b8cSShaul Triebitz ret = rdev->ops->del_link_station(&rdev->wiphy, dev, params); 1486577e5b8cSShaul Triebitz trace_rdev_return_int(&rdev->wiphy, ret); 1487577e5b8cSShaul Triebitz return ret; 1488577e5b8cSShaul Triebitz } 1489577e5b8cSShaul Triebitz 1490e35e4d28SHila Gonen #endif /* __CFG80211_RDEV_OPS */ 1491