162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Portions of this file
462306a36Sopenharmony_ci * Copyright(c) 2016-2017 Intel Deutschland GmbH
562306a36Sopenharmony_ci * Copyright (C) 2018, 2021-2023 Intel Corporation
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci#ifndef __CFG80211_RDEV_OPS
862306a36Sopenharmony_ci#define __CFG80211_RDEV_OPS
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <linux/rtnetlink.h>
1162306a36Sopenharmony_ci#include <net/cfg80211.h>
1262306a36Sopenharmony_ci#include "core.h"
1362306a36Sopenharmony_ci#include "trace.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic inline int rdev_suspend(struct cfg80211_registered_device *rdev,
1662306a36Sopenharmony_ci			       struct cfg80211_wowlan *wowlan)
1762306a36Sopenharmony_ci{
1862306a36Sopenharmony_ci	int ret;
1962306a36Sopenharmony_ci	trace_rdev_suspend(&rdev->wiphy, wowlan);
2062306a36Sopenharmony_ci	ret = rdev->ops->suspend(&rdev->wiphy, wowlan);
2162306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
2262306a36Sopenharmony_ci	return ret;
2362306a36Sopenharmony_ci}
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistatic inline int rdev_resume(struct cfg80211_registered_device *rdev)
2662306a36Sopenharmony_ci{
2762306a36Sopenharmony_ci	int ret;
2862306a36Sopenharmony_ci	trace_rdev_resume(&rdev->wiphy);
2962306a36Sopenharmony_ci	ret = rdev->ops->resume(&rdev->wiphy);
3062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
3162306a36Sopenharmony_ci	return ret;
3262306a36Sopenharmony_ci}
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistatic inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev,
3562306a36Sopenharmony_ci				   bool enabled)
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci	trace_rdev_set_wakeup(&rdev->wiphy, enabled);
3862306a36Sopenharmony_ci	rdev->ops->set_wakeup(&rdev->wiphy, enabled);
3962306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
4062306a36Sopenharmony_ci}
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistatic inline struct wireless_dev
4362306a36Sopenharmony_ci*rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name,
4462306a36Sopenharmony_ci		       unsigned char name_assign_type,
4562306a36Sopenharmony_ci		       enum nl80211_iftype type,
4662306a36Sopenharmony_ci		       struct vif_params *params)
4762306a36Sopenharmony_ci{
4862306a36Sopenharmony_ci	struct wireless_dev *ret;
4962306a36Sopenharmony_ci	trace_rdev_add_virtual_intf(&rdev->wiphy, name, type);
5062306a36Sopenharmony_ci	ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, name_assign_type,
5162306a36Sopenharmony_ci					  type, params);
5262306a36Sopenharmony_ci	trace_rdev_return_wdev(&rdev->wiphy, ret);
5362306a36Sopenharmony_ci	return ret;
5462306a36Sopenharmony_ci}
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cistatic inline int
5762306a36Sopenharmony_cirdev_del_virtual_intf(struct cfg80211_registered_device *rdev,
5862306a36Sopenharmony_ci		      struct wireless_dev *wdev)
5962306a36Sopenharmony_ci{
6062306a36Sopenharmony_ci	int ret;
6162306a36Sopenharmony_ci	trace_rdev_del_virtual_intf(&rdev->wiphy, wdev);
6262306a36Sopenharmony_ci	ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev);
6362306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
6462306a36Sopenharmony_ci	return ret;
6562306a36Sopenharmony_ci}
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_cistatic inline int
6862306a36Sopenharmony_cirdev_change_virtual_intf(struct cfg80211_registered_device *rdev,
6962306a36Sopenharmony_ci			 struct net_device *dev, enum nl80211_iftype type,
7062306a36Sopenharmony_ci			 struct vif_params *params)
7162306a36Sopenharmony_ci{
7262306a36Sopenharmony_ci	int ret;
7362306a36Sopenharmony_ci	trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type);
7462306a36Sopenharmony_ci	ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, params);
7562306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
7662306a36Sopenharmony_ci	return ret;
7762306a36Sopenharmony_ci}
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_cistatic inline int rdev_add_key(struct cfg80211_registered_device *rdev,
8062306a36Sopenharmony_ci			       struct net_device *netdev, int link_id,
8162306a36Sopenharmony_ci			       u8 key_index, bool pairwise, const u8 *mac_addr,
8262306a36Sopenharmony_ci			       struct key_params *params)
8362306a36Sopenharmony_ci{
8462306a36Sopenharmony_ci	int ret;
8562306a36Sopenharmony_ci	trace_rdev_add_key(&rdev->wiphy, netdev, link_id, key_index, pairwise,
8662306a36Sopenharmony_ci			   mac_addr, params->mode);
8762306a36Sopenharmony_ci	ret = rdev->ops->add_key(&rdev->wiphy, netdev, link_id, key_index,
8862306a36Sopenharmony_ci				  pairwise, mac_addr, params);
8962306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
9062306a36Sopenharmony_ci	return ret;
9162306a36Sopenharmony_ci}
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_cistatic inline int
9462306a36Sopenharmony_cirdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev,
9562306a36Sopenharmony_ci	     int link_id, u8 key_index, bool pairwise, const u8 *mac_addr,
9662306a36Sopenharmony_ci	     void *cookie,
9762306a36Sopenharmony_ci	     void (*callback)(void *cookie, struct key_params*))
9862306a36Sopenharmony_ci{
9962306a36Sopenharmony_ci	int ret;
10062306a36Sopenharmony_ci	trace_rdev_get_key(&rdev->wiphy, netdev, link_id, key_index, pairwise,
10162306a36Sopenharmony_ci			   mac_addr);
10262306a36Sopenharmony_ci	ret = rdev->ops->get_key(&rdev->wiphy, netdev, link_id, key_index,
10362306a36Sopenharmony_ci				  pairwise, mac_addr, cookie, callback);
10462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
10562306a36Sopenharmony_ci	return ret;
10662306a36Sopenharmony_ci}
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_cistatic inline int rdev_del_key(struct cfg80211_registered_device *rdev,
10962306a36Sopenharmony_ci			       struct net_device *netdev, int link_id,
11062306a36Sopenharmony_ci			       u8 key_index, bool pairwise, const u8 *mac_addr)
11162306a36Sopenharmony_ci{
11262306a36Sopenharmony_ci	int ret;
11362306a36Sopenharmony_ci	trace_rdev_del_key(&rdev->wiphy, netdev, link_id, key_index, pairwise,
11462306a36Sopenharmony_ci			   mac_addr);
11562306a36Sopenharmony_ci	ret = rdev->ops->del_key(&rdev->wiphy, netdev, link_id, key_index,
11662306a36Sopenharmony_ci				  pairwise, mac_addr);
11762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
11862306a36Sopenharmony_ci	return ret;
11962306a36Sopenharmony_ci}
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_cistatic inline int
12262306a36Sopenharmony_cirdev_set_default_key(struct cfg80211_registered_device *rdev,
12362306a36Sopenharmony_ci		     struct net_device *netdev, int link_id, u8 key_index,
12462306a36Sopenharmony_ci		     bool unicast, bool multicast)
12562306a36Sopenharmony_ci{
12662306a36Sopenharmony_ci	int ret;
12762306a36Sopenharmony_ci	trace_rdev_set_default_key(&rdev->wiphy, netdev, link_id, key_index,
12862306a36Sopenharmony_ci				   unicast, multicast);
12962306a36Sopenharmony_ci	ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, link_id,
13062306a36Sopenharmony_ci					  key_index, unicast, multicast);
13162306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
13262306a36Sopenharmony_ci	return ret;
13362306a36Sopenharmony_ci}
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cistatic inline int
13662306a36Sopenharmony_cirdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev,
13762306a36Sopenharmony_ci			  struct net_device *netdev, int link_id, u8 key_index)
13862306a36Sopenharmony_ci{
13962306a36Sopenharmony_ci	int ret;
14062306a36Sopenharmony_ci	trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, link_id,
14162306a36Sopenharmony_ci					key_index);
14262306a36Sopenharmony_ci	ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, link_id,
14362306a36Sopenharmony_ci					       key_index);
14462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
14562306a36Sopenharmony_ci	return ret;
14662306a36Sopenharmony_ci}
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_cistatic inline int
14962306a36Sopenharmony_cirdev_set_default_beacon_key(struct cfg80211_registered_device *rdev,
15062306a36Sopenharmony_ci			    struct net_device *netdev, int link_id,
15162306a36Sopenharmony_ci			    u8 key_index)
15262306a36Sopenharmony_ci{
15362306a36Sopenharmony_ci	int ret;
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci	trace_rdev_set_default_beacon_key(&rdev->wiphy, netdev, link_id,
15662306a36Sopenharmony_ci					  key_index);
15762306a36Sopenharmony_ci	ret = rdev->ops->set_default_beacon_key(&rdev->wiphy, netdev, link_id,
15862306a36Sopenharmony_ci						 key_index);
15962306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
16062306a36Sopenharmony_ci	return ret;
16162306a36Sopenharmony_ci}
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_cistatic inline int rdev_start_ap(struct cfg80211_registered_device *rdev,
16462306a36Sopenharmony_ci				struct net_device *dev,
16562306a36Sopenharmony_ci				struct cfg80211_ap_settings *settings)
16662306a36Sopenharmony_ci{
16762306a36Sopenharmony_ci	int ret;
16862306a36Sopenharmony_ci	trace_rdev_start_ap(&rdev->wiphy, dev, settings);
16962306a36Sopenharmony_ci	ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings);
17062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
17162306a36Sopenharmony_ci	return ret;
17262306a36Sopenharmony_ci}
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_cistatic inline int rdev_change_beacon(struct cfg80211_registered_device *rdev,
17562306a36Sopenharmony_ci				     struct net_device *dev,
17662306a36Sopenharmony_ci				     struct cfg80211_beacon_data *info)
17762306a36Sopenharmony_ci{
17862306a36Sopenharmony_ci	int ret;
17962306a36Sopenharmony_ci	trace_rdev_change_beacon(&rdev->wiphy, dev, info);
18062306a36Sopenharmony_ci	ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info);
18162306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
18262306a36Sopenharmony_ci	return ret;
18362306a36Sopenharmony_ci}
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_cistatic inline int rdev_stop_ap(struct cfg80211_registered_device *rdev,
18662306a36Sopenharmony_ci			       struct net_device *dev, unsigned int link_id)
18762306a36Sopenharmony_ci{
18862306a36Sopenharmony_ci	int ret;
18962306a36Sopenharmony_ci	trace_rdev_stop_ap(&rdev->wiphy, dev, link_id);
19062306a36Sopenharmony_ci	ret = rdev->ops->stop_ap(&rdev->wiphy, dev, link_id);
19162306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
19262306a36Sopenharmony_ci	return ret;
19362306a36Sopenharmony_ci}
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_cistatic inline int rdev_add_station(struct cfg80211_registered_device *rdev,
19662306a36Sopenharmony_ci				   struct net_device *dev, u8 *mac,
19762306a36Sopenharmony_ci				   struct station_parameters *params)
19862306a36Sopenharmony_ci{
19962306a36Sopenharmony_ci	int ret;
20062306a36Sopenharmony_ci	trace_rdev_add_station(&rdev->wiphy, dev, mac, params);
20162306a36Sopenharmony_ci	ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params);
20262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
20362306a36Sopenharmony_ci	return ret;
20462306a36Sopenharmony_ci}
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_cistatic inline int rdev_del_station(struct cfg80211_registered_device *rdev,
20762306a36Sopenharmony_ci				   struct net_device *dev,
20862306a36Sopenharmony_ci				   struct station_del_parameters *params)
20962306a36Sopenharmony_ci{
21062306a36Sopenharmony_ci	int ret;
21162306a36Sopenharmony_ci	trace_rdev_del_station(&rdev->wiphy, dev, params);
21262306a36Sopenharmony_ci	ret = rdev->ops->del_station(&rdev->wiphy, dev, params);
21362306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
21462306a36Sopenharmony_ci	return ret;
21562306a36Sopenharmony_ci}
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_cistatic inline int rdev_change_station(struct cfg80211_registered_device *rdev,
21862306a36Sopenharmony_ci				      struct net_device *dev, u8 *mac,
21962306a36Sopenharmony_ci				      struct station_parameters *params)
22062306a36Sopenharmony_ci{
22162306a36Sopenharmony_ci	int ret;
22262306a36Sopenharmony_ci	trace_rdev_change_station(&rdev->wiphy, dev, mac, params);
22362306a36Sopenharmony_ci	ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params);
22462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
22562306a36Sopenharmony_ci	return ret;
22662306a36Sopenharmony_ci}
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_cistatic inline int rdev_get_station(struct cfg80211_registered_device *rdev,
22962306a36Sopenharmony_ci				   struct net_device *dev, const u8 *mac,
23062306a36Sopenharmony_ci				   struct station_info *sinfo)
23162306a36Sopenharmony_ci{
23262306a36Sopenharmony_ci	int ret;
23362306a36Sopenharmony_ci	trace_rdev_get_station(&rdev->wiphy, dev, mac);
23462306a36Sopenharmony_ci	ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo);
23562306a36Sopenharmony_ci	trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo);
23662306a36Sopenharmony_ci	return ret;
23762306a36Sopenharmony_ci}
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_cistatic inline int rdev_dump_station(struct cfg80211_registered_device *rdev,
24062306a36Sopenharmony_ci				    struct net_device *dev, int idx, u8 *mac,
24162306a36Sopenharmony_ci				    struct station_info *sinfo)
24262306a36Sopenharmony_ci{
24362306a36Sopenharmony_ci	int ret;
24462306a36Sopenharmony_ci	trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac);
24562306a36Sopenharmony_ci	ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo);
24662306a36Sopenharmony_ci	trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo);
24762306a36Sopenharmony_ci	return ret;
24862306a36Sopenharmony_ci}
24962306a36Sopenharmony_ci
25062306a36Sopenharmony_cistatic inline int rdev_add_mpath(struct cfg80211_registered_device *rdev,
25162306a36Sopenharmony_ci				 struct net_device *dev, u8 *dst, u8 *next_hop)
25262306a36Sopenharmony_ci{
25362306a36Sopenharmony_ci	int ret;
25462306a36Sopenharmony_ci	trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop);
25562306a36Sopenharmony_ci	ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop);
25662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
25762306a36Sopenharmony_ci	return ret;
25862306a36Sopenharmony_ci}
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_cistatic inline int rdev_del_mpath(struct cfg80211_registered_device *rdev,
26162306a36Sopenharmony_ci				 struct net_device *dev, u8 *dst)
26262306a36Sopenharmony_ci{
26362306a36Sopenharmony_ci	int ret;
26462306a36Sopenharmony_ci	trace_rdev_del_mpath(&rdev->wiphy, dev, dst);
26562306a36Sopenharmony_ci	ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst);
26662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
26762306a36Sopenharmony_ci	return ret;
26862306a36Sopenharmony_ci}
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_cistatic inline int rdev_change_mpath(struct cfg80211_registered_device *rdev,
27162306a36Sopenharmony_ci				    struct net_device *dev, u8 *dst,
27262306a36Sopenharmony_ci				    u8 *next_hop)
27362306a36Sopenharmony_ci{
27462306a36Sopenharmony_ci	int ret;
27562306a36Sopenharmony_ci	trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop);
27662306a36Sopenharmony_ci	ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop);
27762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
27862306a36Sopenharmony_ci	return ret;
27962306a36Sopenharmony_ci}
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_cistatic inline int rdev_get_mpath(struct cfg80211_registered_device *rdev,
28262306a36Sopenharmony_ci				 struct net_device *dev, u8 *dst, u8 *next_hop,
28362306a36Sopenharmony_ci				 struct mpath_info *pinfo)
28462306a36Sopenharmony_ci{
28562306a36Sopenharmony_ci	int ret;
28662306a36Sopenharmony_ci	trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop);
28762306a36Sopenharmony_ci	ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo);
28862306a36Sopenharmony_ci	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
28962306a36Sopenharmony_ci	return ret;
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ci}
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_cistatic inline int rdev_get_mpp(struct cfg80211_registered_device *rdev,
29462306a36Sopenharmony_ci			       struct net_device *dev, u8 *dst, u8 *mpp,
29562306a36Sopenharmony_ci			       struct mpath_info *pinfo)
29662306a36Sopenharmony_ci{
29762306a36Sopenharmony_ci	int ret;
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci	trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp);
30062306a36Sopenharmony_ci	ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo);
30162306a36Sopenharmony_ci	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
30262306a36Sopenharmony_ci	return ret;
30362306a36Sopenharmony_ci}
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_cistatic inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev,
30662306a36Sopenharmony_ci				  struct net_device *dev, int idx, u8 *dst,
30762306a36Sopenharmony_ci				  u8 *next_hop, struct mpath_info *pinfo)
30862306a36Sopenharmony_ci
30962306a36Sopenharmony_ci{
31062306a36Sopenharmony_ci	int ret;
31162306a36Sopenharmony_ci	trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop);
31262306a36Sopenharmony_ci	ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop,
31362306a36Sopenharmony_ci				    pinfo);
31462306a36Sopenharmony_ci	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
31562306a36Sopenharmony_ci	return ret;
31662306a36Sopenharmony_ci}
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_cistatic inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev,
31962306a36Sopenharmony_ci				struct net_device *dev, int idx, u8 *dst,
32062306a36Sopenharmony_ci				u8 *mpp, struct mpath_info *pinfo)
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ci{
32362306a36Sopenharmony_ci	int ret;
32462306a36Sopenharmony_ci
32562306a36Sopenharmony_ci	trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp);
32662306a36Sopenharmony_ci	ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo);
32762306a36Sopenharmony_ci	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
32862306a36Sopenharmony_ci	return ret;
32962306a36Sopenharmony_ci}
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_cistatic inline int
33262306a36Sopenharmony_cirdev_get_mesh_config(struct cfg80211_registered_device *rdev,
33362306a36Sopenharmony_ci		     struct net_device *dev, struct mesh_config *conf)
33462306a36Sopenharmony_ci{
33562306a36Sopenharmony_ci	int ret;
33662306a36Sopenharmony_ci	trace_rdev_get_mesh_config(&rdev->wiphy, dev);
33762306a36Sopenharmony_ci	ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf);
33862306a36Sopenharmony_ci	trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf);
33962306a36Sopenharmony_ci	return ret;
34062306a36Sopenharmony_ci}
34162306a36Sopenharmony_ci
34262306a36Sopenharmony_cistatic inline int
34362306a36Sopenharmony_cirdev_update_mesh_config(struct cfg80211_registered_device *rdev,
34462306a36Sopenharmony_ci			struct net_device *dev, u32 mask,
34562306a36Sopenharmony_ci			const struct mesh_config *nconf)
34662306a36Sopenharmony_ci{
34762306a36Sopenharmony_ci	int ret;
34862306a36Sopenharmony_ci	trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf);
34962306a36Sopenharmony_ci	ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf);
35062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
35162306a36Sopenharmony_ci	return ret;
35262306a36Sopenharmony_ci}
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_cistatic inline int rdev_join_mesh(struct cfg80211_registered_device *rdev,
35562306a36Sopenharmony_ci				 struct net_device *dev,
35662306a36Sopenharmony_ci				 const struct mesh_config *conf,
35762306a36Sopenharmony_ci				 const struct mesh_setup *setup)
35862306a36Sopenharmony_ci{
35962306a36Sopenharmony_ci	int ret;
36062306a36Sopenharmony_ci	trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup);
36162306a36Sopenharmony_ci	ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup);
36262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
36362306a36Sopenharmony_ci	return ret;
36462306a36Sopenharmony_ci}
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_cistatic inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev,
36862306a36Sopenharmony_ci				  struct net_device *dev)
36962306a36Sopenharmony_ci{
37062306a36Sopenharmony_ci	int ret;
37162306a36Sopenharmony_ci	trace_rdev_leave_mesh(&rdev->wiphy, dev);
37262306a36Sopenharmony_ci	ret = rdev->ops->leave_mesh(&rdev->wiphy, dev);
37362306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
37462306a36Sopenharmony_ci	return ret;
37562306a36Sopenharmony_ci}
37662306a36Sopenharmony_ci
37762306a36Sopenharmony_cistatic inline int rdev_join_ocb(struct cfg80211_registered_device *rdev,
37862306a36Sopenharmony_ci				struct net_device *dev,
37962306a36Sopenharmony_ci				struct ocb_setup *setup)
38062306a36Sopenharmony_ci{
38162306a36Sopenharmony_ci	int ret;
38262306a36Sopenharmony_ci	trace_rdev_join_ocb(&rdev->wiphy, dev, setup);
38362306a36Sopenharmony_ci	ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup);
38462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
38562306a36Sopenharmony_ci	return ret;
38662306a36Sopenharmony_ci}
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_cistatic inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev,
38962306a36Sopenharmony_ci				 struct net_device *dev)
39062306a36Sopenharmony_ci{
39162306a36Sopenharmony_ci	int ret;
39262306a36Sopenharmony_ci	trace_rdev_leave_ocb(&rdev->wiphy, dev);
39362306a36Sopenharmony_ci	ret = rdev->ops->leave_ocb(&rdev->wiphy, dev);
39462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
39562306a36Sopenharmony_ci	return ret;
39662306a36Sopenharmony_ci}
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_cistatic inline int rdev_change_bss(struct cfg80211_registered_device *rdev,
39962306a36Sopenharmony_ci				  struct net_device *dev,
40062306a36Sopenharmony_ci				  struct bss_parameters *params)
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ci{
40362306a36Sopenharmony_ci	int ret;
40462306a36Sopenharmony_ci	trace_rdev_change_bss(&rdev->wiphy, dev, params);
40562306a36Sopenharmony_ci	ret = rdev->ops->change_bss(&rdev->wiphy, dev, params);
40662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
40762306a36Sopenharmony_ci	return ret;
40862306a36Sopenharmony_ci}
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_cistatic inline void rdev_inform_bss(struct cfg80211_registered_device *rdev,
41162306a36Sopenharmony_ci				   struct cfg80211_bss *bss,
41262306a36Sopenharmony_ci				   const struct cfg80211_bss_ies *ies,
41362306a36Sopenharmony_ci				   void *drv_data)
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ci{
41662306a36Sopenharmony_ci	trace_rdev_inform_bss(&rdev->wiphy, bss);
41762306a36Sopenharmony_ci	if (rdev->ops->inform_bss)
41862306a36Sopenharmony_ci		rdev->ops->inform_bss(&rdev->wiphy, bss, ies, drv_data);
41962306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
42062306a36Sopenharmony_ci}
42162306a36Sopenharmony_ci
42262306a36Sopenharmony_cistatic inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev,
42362306a36Sopenharmony_ci				      struct net_device *dev,
42462306a36Sopenharmony_ci				      struct ieee80211_txq_params *params)
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_ci{
42762306a36Sopenharmony_ci	int ret;
42862306a36Sopenharmony_ci	trace_rdev_set_txq_params(&rdev->wiphy, dev, params);
42962306a36Sopenharmony_ci	ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params);
43062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
43162306a36Sopenharmony_ci	return ret;
43262306a36Sopenharmony_ci}
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_cistatic inline int
43562306a36Sopenharmony_cirdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev,
43662306a36Sopenharmony_ci			       struct net_device *dev,
43762306a36Sopenharmony_ci			       struct ieee80211_channel *chan)
43862306a36Sopenharmony_ci{
43962306a36Sopenharmony_ci	int ret;
44062306a36Sopenharmony_ci	trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan);
44162306a36Sopenharmony_ci	ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan);
44262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
44362306a36Sopenharmony_ci	return ret;
44462306a36Sopenharmony_ci}
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_cistatic inline int
44762306a36Sopenharmony_cirdev_set_monitor_channel(struct cfg80211_registered_device *rdev,
44862306a36Sopenharmony_ci			 struct cfg80211_chan_def *chandef)
44962306a36Sopenharmony_ci{
45062306a36Sopenharmony_ci	int ret;
45162306a36Sopenharmony_ci	trace_rdev_set_monitor_channel(&rdev->wiphy, chandef);
45262306a36Sopenharmony_ci	ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef);
45362306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
45462306a36Sopenharmony_ci	return ret;
45562306a36Sopenharmony_ci}
45662306a36Sopenharmony_ci
45762306a36Sopenharmony_cistatic inline int rdev_scan(struct cfg80211_registered_device *rdev,
45862306a36Sopenharmony_ci			    struct cfg80211_scan_request *request)
45962306a36Sopenharmony_ci{
46062306a36Sopenharmony_ci	int ret;
46162306a36Sopenharmony_ci	trace_rdev_scan(&rdev->wiphy, request);
46262306a36Sopenharmony_ci	ret = rdev->ops->scan(&rdev->wiphy, request);
46362306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
46462306a36Sopenharmony_ci	return ret;
46562306a36Sopenharmony_ci}
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_cistatic inline void rdev_abort_scan(struct cfg80211_registered_device *rdev,
46862306a36Sopenharmony_ci				   struct wireless_dev *wdev)
46962306a36Sopenharmony_ci{
47062306a36Sopenharmony_ci	trace_rdev_abort_scan(&rdev->wiphy, wdev);
47162306a36Sopenharmony_ci	rdev->ops->abort_scan(&rdev->wiphy, wdev);
47262306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
47362306a36Sopenharmony_ci}
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_cistatic inline int rdev_auth(struct cfg80211_registered_device *rdev,
47662306a36Sopenharmony_ci			    struct net_device *dev,
47762306a36Sopenharmony_ci			    struct cfg80211_auth_request *req)
47862306a36Sopenharmony_ci{
47962306a36Sopenharmony_ci	int ret;
48062306a36Sopenharmony_ci	trace_rdev_auth(&rdev->wiphy, dev, req);
48162306a36Sopenharmony_ci	ret = rdev->ops->auth(&rdev->wiphy, dev, req);
48262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
48362306a36Sopenharmony_ci	return ret;
48462306a36Sopenharmony_ci}
48562306a36Sopenharmony_ci
48662306a36Sopenharmony_cistatic inline int rdev_assoc(struct cfg80211_registered_device *rdev,
48762306a36Sopenharmony_ci			     struct net_device *dev,
48862306a36Sopenharmony_ci			     struct cfg80211_assoc_request *req)
48962306a36Sopenharmony_ci{
49062306a36Sopenharmony_ci	int ret;
49162306a36Sopenharmony_ci
49262306a36Sopenharmony_ci	trace_rdev_assoc(&rdev->wiphy, dev, req);
49362306a36Sopenharmony_ci	ret = rdev->ops->assoc(&rdev->wiphy, dev, req);
49462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
49562306a36Sopenharmony_ci	return ret;
49662306a36Sopenharmony_ci}
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_cistatic inline int rdev_deauth(struct cfg80211_registered_device *rdev,
49962306a36Sopenharmony_ci			      struct net_device *dev,
50062306a36Sopenharmony_ci			      struct cfg80211_deauth_request *req)
50162306a36Sopenharmony_ci{
50262306a36Sopenharmony_ci	int ret;
50362306a36Sopenharmony_ci	trace_rdev_deauth(&rdev->wiphy, dev, req);
50462306a36Sopenharmony_ci	ret = rdev->ops->deauth(&rdev->wiphy, dev, req);
50562306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
50662306a36Sopenharmony_ci	return ret;
50762306a36Sopenharmony_ci}
50862306a36Sopenharmony_ci
50962306a36Sopenharmony_cistatic inline int rdev_disassoc(struct cfg80211_registered_device *rdev,
51062306a36Sopenharmony_ci				struct net_device *dev,
51162306a36Sopenharmony_ci				struct cfg80211_disassoc_request *req)
51262306a36Sopenharmony_ci{
51362306a36Sopenharmony_ci	int ret;
51462306a36Sopenharmony_ci	trace_rdev_disassoc(&rdev->wiphy, dev, req);
51562306a36Sopenharmony_ci	ret = rdev->ops->disassoc(&rdev->wiphy, dev, req);
51662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
51762306a36Sopenharmony_ci	return ret;
51862306a36Sopenharmony_ci}
51962306a36Sopenharmony_ci
52062306a36Sopenharmony_cistatic inline int rdev_connect(struct cfg80211_registered_device *rdev,
52162306a36Sopenharmony_ci			       struct net_device *dev,
52262306a36Sopenharmony_ci			       struct cfg80211_connect_params *sme)
52362306a36Sopenharmony_ci{
52462306a36Sopenharmony_ci	int ret;
52562306a36Sopenharmony_ci	trace_rdev_connect(&rdev->wiphy, dev, sme);
52662306a36Sopenharmony_ci	ret = rdev->ops->connect(&rdev->wiphy, dev, sme);
52762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
52862306a36Sopenharmony_ci	return ret;
52962306a36Sopenharmony_ci}
53062306a36Sopenharmony_ci
53162306a36Sopenharmony_cistatic inline int
53262306a36Sopenharmony_cirdev_update_connect_params(struct cfg80211_registered_device *rdev,
53362306a36Sopenharmony_ci			   struct net_device *dev,
53462306a36Sopenharmony_ci			   struct cfg80211_connect_params *sme, u32 changed)
53562306a36Sopenharmony_ci{
53662306a36Sopenharmony_ci	int ret;
53762306a36Sopenharmony_ci	trace_rdev_update_connect_params(&rdev->wiphy, dev, sme, changed);
53862306a36Sopenharmony_ci	ret = rdev->ops->update_connect_params(&rdev->wiphy, dev, sme, changed);
53962306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
54062306a36Sopenharmony_ci	return ret;
54162306a36Sopenharmony_ci}
54262306a36Sopenharmony_ci
54362306a36Sopenharmony_cistatic inline int rdev_disconnect(struct cfg80211_registered_device *rdev,
54462306a36Sopenharmony_ci				  struct net_device *dev, u16 reason_code)
54562306a36Sopenharmony_ci{
54662306a36Sopenharmony_ci	int ret;
54762306a36Sopenharmony_ci	trace_rdev_disconnect(&rdev->wiphy, dev, reason_code);
54862306a36Sopenharmony_ci	ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code);
54962306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
55062306a36Sopenharmony_ci	return ret;
55162306a36Sopenharmony_ci}
55262306a36Sopenharmony_ci
55362306a36Sopenharmony_cistatic inline int rdev_join_ibss(struct cfg80211_registered_device *rdev,
55462306a36Sopenharmony_ci				 struct net_device *dev,
55562306a36Sopenharmony_ci				 struct cfg80211_ibss_params *params)
55662306a36Sopenharmony_ci{
55762306a36Sopenharmony_ci	int ret;
55862306a36Sopenharmony_ci	trace_rdev_join_ibss(&rdev->wiphy, dev, params);
55962306a36Sopenharmony_ci	ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params);
56062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
56162306a36Sopenharmony_ci	return ret;
56262306a36Sopenharmony_ci}
56362306a36Sopenharmony_ci
56462306a36Sopenharmony_cistatic inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev,
56562306a36Sopenharmony_ci				  struct net_device *dev)
56662306a36Sopenharmony_ci{
56762306a36Sopenharmony_ci	int ret;
56862306a36Sopenharmony_ci	trace_rdev_leave_ibss(&rdev->wiphy, dev);
56962306a36Sopenharmony_ci	ret = rdev->ops->leave_ibss(&rdev->wiphy, dev);
57062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
57162306a36Sopenharmony_ci	return ret;
57262306a36Sopenharmony_ci}
57362306a36Sopenharmony_ci
57462306a36Sopenharmony_cistatic inline int
57562306a36Sopenharmony_cirdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed)
57662306a36Sopenharmony_ci{
57762306a36Sopenharmony_ci	int ret;
57862306a36Sopenharmony_ci
57962306a36Sopenharmony_ci	if (!rdev->ops->set_wiphy_params)
58062306a36Sopenharmony_ci		return -EOPNOTSUPP;
58162306a36Sopenharmony_ci
58262306a36Sopenharmony_ci	trace_rdev_set_wiphy_params(&rdev->wiphy, changed);
58362306a36Sopenharmony_ci	ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed);
58462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
58562306a36Sopenharmony_ci	return ret;
58662306a36Sopenharmony_ci}
58762306a36Sopenharmony_ci
58862306a36Sopenharmony_cistatic inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev,
58962306a36Sopenharmony_ci				    struct wireless_dev *wdev,
59062306a36Sopenharmony_ci				    enum nl80211_tx_power_setting type, int mbm)
59162306a36Sopenharmony_ci{
59262306a36Sopenharmony_ci	int ret;
59362306a36Sopenharmony_ci	trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm);
59462306a36Sopenharmony_ci	ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm);
59562306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
59662306a36Sopenharmony_ci	return ret;
59762306a36Sopenharmony_ci}
59862306a36Sopenharmony_ci
59962306a36Sopenharmony_cistatic inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev,
60062306a36Sopenharmony_ci				    struct wireless_dev *wdev, int *dbm)
60162306a36Sopenharmony_ci{
60262306a36Sopenharmony_ci	int ret;
60362306a36Sopenharmony_ci	trace_rdev_get_tx_power(&rdev->wiphy, wdev);
60462306a36Sopenharmony_ci	ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm);
60562306a36Sopenharmony_ci	trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm);
60662306a36Sopenharmony_ci	return ret;
60762306a36Sopenharmony_ci}
60862306a36Sopenharmony_ci
60962306a36Sopenharmony_cistatic inline int
61062306a36Sopenharmony_cirdev_set_multicast_to_unicast(struct cfg80211_registered_device *rdev,
61162306a36Sopenharmony_ci			      struct net_device *dev,
61262306a36Sopenharmony_ci			      const bool enabled)
61362306a36Sopenharmony_ci{
61462306a36Sopenharmony_ci	int ret;
61562306a36Sopenharmony_ci	trace_rdev_set_multicast_to_unicast(&rdev->wiphy, dev, enabled);
61662306a36Sopenharmony_ci	ret = rdev->ops->set_multicast_to_unicast(&rdev->wiphy, dev, enabled);
61762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
61862306a36Sopenharmony_ci	return ret;
61962306a36Sopenharmony_ci}
62062306a36Sopenharmony_ci
62162306a36Sopenharmony_cistatic inline int
62262306a36Sopenharmony_cirdev_get_txq_stats(struct cfg80211_registered_device *rdev,
62362306a36Sopenharmony_ci		   struct wireless_dev *wdev,
62462306a36Sopenharmony_ci		   struct cfg80211_txq_stats *txqstats)
62562306a36Sopenharmony_ci{
62662306a36Sopenharmony_ci	int ret;
62762306a36Sopenharmony_ci	trace_rdev_get_txq_stats(&rdev->wiphy, wdev);
62862306a36Sopenharmony_ci	ret = rdev->ops->get_txq_stats(&rdev->wiphy, wdev, txqstats);
62962306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
63062306a36Sopenharmony_ci	return ret;
63162306a36Sopenharmony_ci}
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_cistatic inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev)
63462306a36Sopenharmony_ci{
63562306a36Sopenharmony_ci	trace_rdev_rfkill_poll(&rdev->wiphy);
63662306a36Sopenharmony_ci	rdev->ops->rfkill_poll(&rdev->wiphy);
63762306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
63862306a36Sopenharmony_ci}
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ci
64162306a36Sopenharmony_ci#ifdef CONFIG_NL80211_TESTMODE
64262306a36Sopenharmony_cistatic inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev,
64362306a36Sopenharmony_ci				    struct wireless_dev *wdev,
64462306a36Sopenharmony_ci				    void *data, int len)
64562306a36Sopenharmony_ci{
64662306a36Sopenharmony_ci	int ret;
64762306a36Sopenharmony_ci	trace_rdev_testmode_cmd(&rdev->wiphy, wdev);
64862306a36Sopenharmony_ci	ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len);
64962306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
65062306a36Sopenharmony_ci	return ret;
65162306a36Sopenharmony_ci}
65262306a36Sopenharmony_ci
65362306a36Sopenharmony_cistatic inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev,
65462306a36Sopenharmony_ci				     struct sk_buff *skb,
65562306a36Sopenharmony_ci				     struct netlink_callback *cb, void *data,
65662306a36Sopenharmony_ci				     int len)
65762306a36Sopenharmony_ci{
65862306a36Sopenharmony_ci	int ret;
65962306a36Sopenharmony_ci	trace_rdev_testmode_dump(&rdev->wiphy);
66062306a36Sopenharmony_ci	ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len);
66162306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
66262306a36Sopenharmony_ci	return ret;
66362306a36Sopenharmony_ci}
66462306a36Sopenharmony_ci#endif
66562306a36Sopenharmony_ci
66662306a36Sopenharmony_cistatic inline int
66762306a36Sopenharmony_cirdev_set_bitrate_mask(struct cfg80211_registered_device *rdev,
66862306a36Sopenharmony_ci		      struct net_device *dev, unsigned int link_id,
66962306a36Sopenharmony_ci		      const u8 *peer,
67062306a36Sopenharmony_ci		      const struct cfg80211_bitrate_mask *mask)
67162306a36Sopenharmony_ci{
67262306a36Sopenharmony_ci	int ret;
67362306a36Sopenharmony_ci	trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, link_id, peer, mask);
67462306a36Sopenharmony_ci	ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, link_id,
67562306a36Sopenharmony_ci					  peer, mask);
67662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
67762306a36Sopenharmony_ci	return ret;
67862306a36Sopenharmony_ci}
67962306a36Sopenharmony_ci
68062306a36Sopenharmony_cistatic inline int rdev_dump_survey(struct cfg80211_registered_device *rdev,
68162306a36Sopenharmony_ci				   struct net_device *netdev, int idx,
68262306a36Sopenharmony_ci				   struct survey_info *info)
68362306a36Sopenharmony_ci{
68462306a36Sopenharmony_ci	int ret;
68562306a36Sopenharmony_ci	trace_rdev_dump_survey(&rdev->wiphy, netdev, idx);
68662306a36Sopenharmony_ci	ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info);
68762306a36Sopenharmony_ci	if (ret < 0)
68862306a36Sopenharmony_ci		trace_rdev_return_int(&rdev->wiphy, ret);
68962306a36Sopenharmony_ci	else
69062306a36Sopenharmony_ci		trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info);
69162306a36Sopenharmony_ci	return ret;
69262306a36Sopenharmony_ci}
69362306a36Sopenharmony_ci
69462306a36Sopenharmony_cistatic inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev,
69562306a36Sopenharmony_ci				 struct net_device *netdev,
69662306a36Sopenharmony_ci				 struct cfg80211_pmksa *pmksa)
69762306a36Sopenharmony_ci{
69862306a36Sopenharmony_ci	int ret;
69962306a36Sopenharmony_ci	trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa);
70062306a36Sopenharmony_ci	ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa);
70162306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
70262306a36Sopenharmony_ci	return ret;
70362306a36Sopenharmony_ci}
70462306a36Sopenharmony_ci
70562306a36Sopenharmony_cistatic inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev,
70662306a36Sopenharmony_ci				 struct net_device *netdev,
70762306a36Sopenharmony_ci				 struct cfg80211_pmksa *pmksa)
70862306a36Sopenharmony_ci{
70962306a36Sopenharmony_ci	int ret;
71062306a36Sopenharmony_ci	trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa);
71162306a36Sopenharmony_ci	ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa);
71262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
71362306a36Sopenharmony_ci	return ret;
71462306a36Sopenharmony_ci}
71562306a36Sopenharmony_ci
71662306a36Sopenharmony_cistatic inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev,
71762306a36Sopenharmony_ci				   struct net_device *netdev)
71862306a36Sopenharmony_ci{
71962306a36Sopenharmony_ci	int ret;
72062306a36Sopenharmony_ci	trace_rdev_flush_pmksa(&rdev->wiphy, netdev);
72162306a36Sopenharmony_ci	ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev);
72262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
72362306a36Sopenharmony_ci	return ret;
72462306a36Sopenharmony_ci}
72562306a36Sopenharmony_ci
72662306a36Sopenharmony_cistatic inline int
72762306a36Sopenharmony_cirdev_remain_on_channel(struct cfg80211_registered_device *rdev,
72862306a36Sopenharmony_ci		       struct wireless_dev *wdev,
72962306a36Sopenharmony_ci		       struct ieee80211_channel *chan,
73062306a36Sopenharmony_ci		       unsigned int duration, u64 *cookie)
73162306a36Sopenharmony_ci{
73262306a36Sopenharmony_ci	int ret;
73362306a36Sopenharmony_ci	trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration);
73462306a36Sopenharmony_ci	ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan,
73562306a36Sopenharmony_ci					   duration, cookie);
73662306a36Sopenharmony_ci	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
73762306a36Sopenharmony_ci	return ret;
73862306a36Sopenharmony_ci}
73962306a36Sopenharmony_ci
74062306a36Sopenharmony_cistatic inline int
74162306a36Sopenharmony_cirdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev,
74262306a36Sopenharmony_ci			      struct wireless_dev *wdev, u64 cookie)
74362306a36Sopenharmony_ci{
74462306a36Sopenharmony_ci	int ret;
74562306a36Sopenharmony_ci	trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
74662306a36Sopenharmony_ci	ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
74762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
74862306a36Sopenharmony_ci	return ret;
74962306a36Sopenharmony_ci}
75062306a36Sopenharmony_ci
75162306a36Sopenharmony_cistatic inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev,
75262306a36Sopenharmony_ci			       struct wireless_dev *wdev,
75362306a36Sopenharmony_ci			       struct cfg80211_mgmt_tx_params *params,
75462306a36Sopenharmony_ci			       u64 *cookie)
75562306a36Sopenharmony_ci{
75662306a36Sopenharmony_ci	int ret;
75762306a36Sopenharmony_ci	trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params);
75862306a36Sopenharmony_ci	ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie);
75962306a36Sopenharmony_ci	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
76062306a36Sopenharmony_ci	return ret;
76162306a36Sopenharmony_ci}
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_cistatic inline int rdev_tx_control_port(struct cfg80211_registered_device *rdev,
76462306a36Sopenharmony_ci				       struct net_device *dev,
76562306a36Sopenharmony_ci				       const void *buf, size_t len,
76662306a36Sopenharmony_ci				       const u8 *dest, __be16 proto,
76762306a36Sopenharmony_ci				       const bool noencrypt, int link,
76862306a36Sopenharmony_ci				       u64 *cookie)
76962306a36Sopenharmony_ci{
77062306a36Sopenharmony_ci	int ret;
77162306a36Sopenharmony_ci	trace_rdev_tx_control_port(&rdev->wiphy, dev, buf, len,
77262306a36Sopenharmony_ci				   dest, proto, noencrypt, link);
77362306a36Sopenharmony_ci	ret = rdev->ops->tx_control_port(&rdev->wiphy, dev, buf, len,
77462306a36Sopenharmony_ci					 dest, proto, noencrypt, link, cookie);
77562306a36Sopenharmony_ci	if (cookie)
77662306a36Sopenharmony_ci		trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
77762306a36Sopenharmony_ci	else
77862306a36Sopenharmony_ci		trace_rdev_return_int(&rdev->wiphy, ret);
77962306a36Sopenharmony_ci	return ret;
78062306a36Sopenharmony_ci}
78162306a36Sopenharmony_ci
78262306a36Sopenharmony_cistatic inline int
78362306a36Sopenharmony_cirdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev,
78462306a36Sopenharmony_ci			 struct wireless_dev *wdev, u64 cookie)
78562306a36Sopenharmony_ci{
78662306a36Sopenharmony_ci	int ret;
78762306a36Sopenharmony_ci	trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
78862306a36Sopenharmony_ci	ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
78962306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
79062306a36Sopenharmony_ci	return ret;
79162306a36Sopenharmony_ci}
79262306a36Sopenharmony_ci
79362306a36Sopenharmony_cistatic inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev,
79462306a36Sopenharmony_ci				      struct net_device *dev, bool enabled,
79562306a36Sopenharmony_ci				      int timeout)
79662306a36Sopenharmony_ci{
79762306a36Sopenharmony_ci	int ret;
79862306a36Sopenharmony_ci	trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
79962306a36Sopenharmony_ci	ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
80062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
80162306a36Sopenharmony_ci	return ret;
80262306a36Sopenharmony_ci}
80362306a36Sopenharmony_ci
80462306a36Sopenharmony_cistatic inline int
80562306a36Sopenharmony_cirdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev,
80662306a36Sopenharmony_ci			 struct net_device *dev, s32 rssi_thold, u32 rssi_hyst)
80762306a36Sopenharmony_ci{
80862306a36Sopenharmony_ci	int ret;
80962306a36Sopenharmony_ci	trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
81062306a36Sopenharmony_ci				       rssi_hyst);
81162306a36Sopenharmony_ci	ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
81262306a36Sopenharmony_ci				       rssi_hyst);
81362306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
81462306a36Sopenharmony_ci	return ret;
81562306a36Sopenharmony_ci}
81662306a36Sopenharmony_ci
81762306a36Sopenharmony_cistatic inline int
81862306a36Sopenharmony_cirdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev,
81962306a36Sopenharmony_ci			       struct net_device *dev, s32 low, s32 high)
82062306a36Sopenharmony_ci{
82162306a36Sopenharmony_ci	int ret;
82262306a36Sopenharmony_ci	trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high);
82362306a36Sopenharmony_ci	ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev,
82462306a36Sopenharmony_ci						   low, high);
82562306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
82662306a36Sopenharmony_ci	return ret;
82762306a36Sopenharmony_ci}
82862306a36Sopenharmony_ci
82962306a36Sopenharmony_cistatic inline int
83062306a36Sopenharmony_cirdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev,
83162306a36Sopenharmony_ci			struct net_device *dev, u32 rate, u32 pkts, u32 intvl)
83262306a36Sopenharmony_ci{
83362306a36Sopenharmony_ci	int ret;
83462306a36Sopenharmony_ci	trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl);
83562306a36Sopenharmony_ci	ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts,
83662306a36Sopenharmony_ci					     intvl);
83762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
83862306a36Sopenharmony_ci	return ret;
83962306a36Sopenharmony_ci}
84062306a36Sopenharmony_ci
84162306a36Sopenharmony_cistatic inline void
84262306a36Sopenharmony_cirdev_update_mgmt_frame_registrations(struct cfg80211_registered_device *rdev,
84362306a36Sopenharmony_ci				     struct wireless_dev *wdev,
84462306a36Sopenharmony_ci				     struct mgmt_frame_regs *upd)
84562306a36Sopenharmony_ci{
84662306a36Sopenharmony_ci	might_sleep();
84762306a36Sopenharmony_ci
84862306a36Sopenharmony_ci	trace_rdev_update_mgmt_frame_registrations(&rdev->wiphy, wdev, upd);
84962306a36Sopenharmony_ci	if (rdev->ops->update_mgmt_frame_registrations)
85062306a36Sopenharmony_ci		rdev->ops->update_mgmt_frame_registrations(&rdev->wiphy, wdev,
85162306a36Sopenharmony_ci							   upd);
85262306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
85362306a36Sopenharmony_ci}
85462306a36Sopenharmony_ci
85562306a36Sopenharmony_cistatic inline int rdev_set_antenna(struct cfg80211_registered_device *rdev,
85662306a36Sopenharmony_ci				   u32 tx_ant, u32 rx_ant)
85762306a36Sopenharmony_ci{
85862306a36Sopenharmony_ci	int ret;
85962306a36Sopenharmony_ci	trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant);
86062306a36Sopenharmony_ci	ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant);
86162306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
86262306a36Sopenharmony_ci	return ret;
86362306a36Sopenharmony_ci}
86462306a36Sopenharmony_ci
86562306a36Sopenharmony_cistatic inline int rdev_get_antenna(struct cfg80211_registered_device *rdev,
86662306a36Sopenharmony_ci				   u32 *tx_ant, u32 *rx_ant)
86762306a36Sopenharmony_ci{
86862306a36Sopenharmony_ci	int ret;
86962306a36Sopenharmony_ci	trace_rdev_get_antenna(&rdev->wiphy);
87062306a36Sopenharmony_ci	ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant);
87162306a36Sopenharmony_ci	if (ret)
87262306a36Sopenharmony_ci		trace_rdev_return_int(&rdev->wiphy, ret);
87362306a36Sopenharmony_ci	else
87462306a36Sopenharmony_ci		trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant,
87562306a36Sopenharmony_ci					    *rx_ant);
87662306a36Sopenharmony_ci	return ret;
87762306a36Sopenharmony_ci}
87862306a36Sopenharmony_ci
87962306a36Sopenharmony_cistatic inline int
88062306a36Sopenharmony_cirdev_sched_scan_start(struct cfg80211_registered_device *rdev,
88162306a36Sopenharmony_ci		      struct net_device *dev,
88262306a36Sopenharmony_ci		      struct cfg80211_sched_scan_request *request)
88362306a36Sopenharmony_ci{
88462306a36Sopenharmony_ci	int ret;
88562306a36Sopenharmony_ci	trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid);
88662306a36Sopenharmony_ci	ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request);
88762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
88862306a36Sopenharmony_ci	return ret;
88962306a36Sopenharmony_ci}
89062306a36Sopenharmony_ci
89162306a36Sopenharmony_cistatic inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev,
89262306a36Sopenharmony_ci				       struct net_device *dev, u64 reqid)
89362306a36Sopenharmony_ci{
89462306a36Sopenharmony_ci	int ret;
89562306a36Sopenharmony_ci	trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid);
89662306a36Sopenharmony_ci	ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid);
89762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
89862306a36Sopenharmony_ci	return ret;
89962306a36Sopenharmony_ci}
90062306a36Sopenharmony_ci
90162306a36Sopenharmony_cistatic inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev,
90262306a36Sopenharmony_ci				      struct net_device *dev,
90362306a36Sopenharmony_ci				      struct cfg80211_gtk_rekey_data *data)
90462306a36Sopenharmony_ci{
90562306a36Sopenharmony_ci	int ret;
90662306a36Sopenharmony_ci	trace_rdev_set_rekey_data(&rdev->wiphy, dev);
90762306a36Sopenharmony_ci	ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data);
90862306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
90962306a36Sopenharmony_ci	return ret;
91062306a36Sopenharmony_ci}
91162306a36Sopenharmony_ci
91262306a36Sopenharmony_cistatic inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev,
91362306a36Sopenharmony_ci				 struct net_device *dev, u8 *peer,
91462306a36Sopenharmony_ci				 int link_id, u8 action_code,
91562306a36Sopenharmony_ci				 u8 dialog_token, u16 status_code,
91662306a36Sopenharmony_ci				 u32 peer_capability, bool initiator,
91762306a36Sopenharmony_ci				 const u8 *buf, size_t len)
91862306a36Sopenharmony_ci{
91962306a36Sopenharmony_ci	int ret;
92062306a36Sopenharmony_ci	trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, link_id, action_code,
92162306a36Sopenharmony_ci			     dialog_token, status_code, peer_capability,
92262306a36Sopenharmony_ci			     initiator, buf, len);
92362306a36Sopenharmony_ci	ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, link_id,
92462306a36Sopenharmony_ci				   action_code, dialog_token, status_code,
92562306a36Sopenharmony_ci				   peer_capability, initiator, buf, len);
92662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
92762306a36Sopenharmony_ci	return ret;
92862306a36Sopenharmony_ci}
92962306a36Sopenharmony_ci
93062306a36Sopenharmony_cistatic inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev,
93162306a36Sopenharmony_ci				 struct net_device *dev, u8 *peer,
93262306a36Sopenharmony_ci				 enum nl80211_tdls_operation oper)
93362306a36Sopenharmony_ci{
93462306a36Sopenharmony_ci	int ret;
93562306a36Sopenharmony_ci	trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper);
93662306a36Sopenharmony_ci	ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper);
93762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
93862306a36Sopenharmony_ci	return ret;
93962306a36Sopenharmony_ci}
94062306a36Sopenharmony_ci
94162306a36Sopenharmony_cistatic inline int rdev_probe_client(struct cfg80211_registered_device *rdev,
94262306a36Sopenharmony_ci				    struct net_device *dev, const u8 *peer,
94362306a36Sopenharmony_ci				    u64 *cookie)
94462306a36Sopenharmony_ci{
94562306a36Sopenharmony_ci	int ret;
94662306a36Sopenharmony_ci	trace_rdev_probe_client(&rdev->wiphy, dev, peer);
94762306a36Sopenharmony_ci	ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie);
94862306a36Sopenharmony_ci	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
94962306a36Sopenharmony_ci	return ret;
95062306a36Sopenharmony_ci}
95162306a36Sopenharmony_ci
95262306a36Sopenharmony_cistatic inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev,
95362306a36Sopenharmony_ci				     struct net_device *dev, u16 noack_map)
95462306a36Sopenharmony_ci{
95562306a36Sopenharmony_ci	int ret;
95662306a36Sopenharmony_ci	trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map);
95762306a36Sopenharmony_ci	ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map);
95862306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
95962306a36Sopenharmony_ci	return ret;
96062306a36Sopenharmony_ci}
96162306a36Sopenharmony_ci
96262306a36Sopenharmony_cistatic inline int
96362306a36Sopenharmony_cirdev_get_channel(struct cfg80211_registered_device *rdev,
96462306a36Sopenharmony_ci		 struct wireless_dev *wdev,
96562306a36Sopenharmony_ci		 unsigned int link_id,
96662306a36Sopenharmony_ci		 struct cfg80211_chan_def *chandef)
96762306a36Sopenharmony_ci{
96862306a36Sopenharmony_ci	int ret;
96962306a36Sopenharmony_ci
97062306a36Sopenharmony_ci	trace_rdev_get_channel(&rdev->wiphy, wdev, link_id);
97162306a36Sopenharmony_ci	ret = rdev->ops->get_channel(&rdev->wiphy, wdev, link_id, chandef);
97262306a36Sopenharmony_ci	trace_rdev_return_chandef(&rdev->wiphy, ret, chandef);
97362306a36Sopenharmony_ci
97462306a36Sopenharmony_ci	return ret;
97562306a36Sopenharmony_ci}
97662306a36Sopenharmony_ci
97762306a36Sopenharmony_cistatic inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev,
97862306a36Sopenharmony_ci					struct wireless_dev *wdev)
97962306a36Sopenharmony_ci{
98062306a36Sopenharmony_ci	int ret;
98162306a36Sopenharmony_ci
98262306a36Sopenharmony_ci	trace_rdev_start_p2p_device(&rdev->wiphy, wdev);
98362306a36Sopenharmony_ci	ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev);
98462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
98562306a36Sopenharmony_ci	return ret;
98662306a36Sopenharmony_ci}
98762306a36Sopenharmony_ci
98862306a36Sopenharmony_cistatic inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev,
98962306a36Sopenharmony_ci					struct wireless_dev *wdev)
99062306a36Sopenharmony_ci{
99162306a36Sopenharmony_ci	trace_rdev_stop_p2p_device(&rdev->wiphy, wdev);
99262306a36Sopenharmony_ci	rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
99362306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
99462306a36Sopenharmony_ci}
99562306a36Sopenharmony_ci
99662306a36Sopenharmony_cistatic inline int rdev_start_nan(struct cfg80211_registered_device *rdev,
99762306a36Sopenharmony_ci				 struct wireless_dev *wdev,
99862306a36Sopenharmony_ci				 struct cfg80211_nan_conf *conf)
99962306a36Sopenharmony_ci{
100062306a36Sopenharmony_ci	int ret;
100162306a36Sopenharmony_ci
100262306a36Sopenharmony_ci	trace_rdev_start_nan(&rdev->wiphy, wdev, conf);
100362306a36Sopenharmony_ci	ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf);
100462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
100562306a36Sopenharmony_ci	return ret;
100662306a36Sopenharmony_ci}
100762306a36Sopenharmony_ci
100862306a36Sopenharmony_cistatic inline void rdev_stop_nan(struct cfg80211_registered_device *rdev,
100962306a36Sopenharmony_ci				 struct wireless_dev *wdev)
101062306a36Sopenharmony_ci{
101162306a36Sopenharmony_ci	trace_rdev_stop_nan(&rdev->wiphy, wdev);
101262306a36Sopenharmony_ci	rdev->ops->stop_nan(&rdev->wiphy, wdev);
101362306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
101462306a36Sopenharmony_ci}
101562306a36Sopenharmony_ci
101662306a36Sopenharmony_cistatic inline int
101762306a36Sopenharmony_cirdev_add_nan_func(struct cfg80211_registered_device *rdev,
101862306a36Sopenharmony_ci		  struct wireless_dev *wdev,
101962306a36Sopenharmony_ci		  struct cfg80211_nan_func *nan_func)
102062306a36Sopenharmony_ci{
102162306a36Sopenharmony_ci	int ret;
102262306a36Sopenharmony_ci
102362306a36Sopenharmony_ci	trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func);
102462306a36Sopenharmony_ci	ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func);
102562306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
102662306a36Sopenharmony_ci	return ret;
102762306a36Sopenharmony_ci}
102862306a36Sopenharmony_ci
102962306a36Sopenharmony_cistatic inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev,
103062306a36Sopenharmony_ci				    struct wireless_dev *wdev, u64 cookie)
103162306a36Sopenharmony_ci{
103262306a36Sopenharmony_ci	trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie);
103362306a36Sopenharmony_ci	rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie);
103462306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
103562306a36Sopenharmony_ci}
103662306a36Sopenharmony_ci
103762306a36Sopenharmony_cistatic inline int
103862306a36Sopenharmony_cirdev_nan_change_conf(struct cfg80211_registered_device *rdev,
103962306a36Sopenharmony_ci		     struct wireless_dev *wdev,
104062306a36Sopenharmony_ci		     struct cfg80211_nan_conf *conf, u32 changes)
104162306a36Sopenharmony_ci{
104262306a36Sopenharmony_ci	int ret;
104362306a36Sopenharmony_ci
104462306a36Sopenharmony_ci	trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes);
104562306a36Sopenharmony_ci	if (rdev->ops->nan_change_conf)
104662306a36Sopenharmony_ci		ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf,
104762306a36Sopenharmony_ci						 changes);
104862306a36Sopenharmony_ci	else
104962306a36Sopenharmony_ci		ret = -ENOTSUPP;
105062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
105162306a36Sopenharmony_ci	return ret;
105262306a36Sopenharmony_ci}
105362306a36Sopenharmony_ci
105462306a36Sopenharmony_cistatic inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev,
105562306a36Sopenharmony_ci				   struct net_device *dev,
105662306a36Sopenharmony_ci				   struct cfg80211_acl_data *params)
105762306a36Sopenharmony_ci{
105862306a36Sopenharmony_ci	int ret;
105962306a36Sopenharmony_ci
106062306a36Sopenharmony_ci	trace_rdev_set_mac_acl(&rdev->wiphy, dev, params);
106162306a36Sopenharmony_ci	ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params);
106262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
106362306a36Sopenharmony_ci	return ret;
106462306a36Sopenharmony_ci}
106562306a36Sopenharmony_ci
106662306a36Sopenharmony_cistatic inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev,
106762306a36Sopenharmony_ci				     struct net_device *dev,
106862306a36Sopenharmony_ci				     struct cfg80211_update_ft_ies_params *ftie)
106962306a36Sopenharmony_ci{
107062306a36Sopenharmony_ci	int ret;
107162306a36Sopenharmony_ci
107262306a36Sopenharmony_ci	trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie);
107362306a36Sopenharmony_ci	ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie);
107462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
107562306a36Sopenharmony_ci	return ret;
107662306a36Sopenharmony_ci}
107762306a36Sopenharmony_ci
107862306a36Sopenharmony_cistatic inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev,
107962306a36Sopenharmony_ci					struct wireless_dev *wdev,
108062306a36Sopenharmony_ci					enum nl80211_crit_proto_id protocol,
108162306a36Sopenharmony_ci					u16 duration)
108262306a36Sopenharmony_ci{
108362306a36Sopenharmony_ci	int ret;
108462306a36Sopenharmony_ci
108562306a36Sopenharmony_ci	trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration);
108662306a36Sopenharmony_ci	ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev,
108762306a36Sopenharmony_ci					  protocol, duration);
108862306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
108962306a36Sopenharmony_ci	return ret;
109062306a36Sopenharmony_ci}
109162306a36Sopenharmony_ci
109262306a36Sopenharmony_cistatic inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev,
109362306a36Sopenharmony_ci				       struct wireless_dev *wdev)
109462306a36Sopenharmony_ci{
109562306a36Sopenharmony_ci	trace_rdev_crit_proto_stop(&rdev->wiphy, wdev);
109662306a36Sopenharmony_ci	rdev->ops->crit_proto_stop(&rdev->wiphy, wdev);
109762306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
109862306a36Sopenharmony_ci}
109962306a36Sopenharmony_ci
110062306a36Sopenharmony_cistatic inline int rdev_channel_switch(struct cfg80211_registered_device *rdev,
110162306a36Sopenharmony_ci				      struct net_device *dev,
110262306a36Sopenharmony_ci				      struct cfg80211_csa_settings *params)
110362306a36Sopenharmony_ci{
110462306a36Sopenharmony_ci	int ret;
110562306a36Sopenharmony_ci
110662306a36Sopenharmony_ci	trace_rdev_channel_switch(&rdev->wiphy, dev, params);
110762306a36Sopenharmony_ci	ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params);
110862306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
110962306a36Sopenharmony_ci	return ret;
111062306a36Sopenharmony_ci}
111162306a36Sopenharmony_ci
111262306a36Sopenharmony_cistatic inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev,
111362306a36Sopenharmony_ci				   struct net_device *dev,
111462306a36Sopenharmony_ci				   struct cfg80211_qos_map *qos_map)
111562306a36Sopenharmony_ci{
111662306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
111762306a36Sopenharmony_ci
111862306a36Sopenharmony_ci	if (rdev->ops->set_qos_map) {
111962306a36Sopenharmony_ci		trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map);
112062306a36Sopenharmony_ci		ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map);
112162306a36Sopenharmony_ci		trace_rdev_return_int(&rdev->wiphy, ret);
112262306a36Sopenharmony_ci	}
112362306a36Sopenharmony_ci
112462306a36Sopenharmony_ci	return ret;
112562306a36Sopenharmony_ci}
112662306a36Sopenharmony_ci
112762306a36Sopenharmony_cistatic inline int
112862306a36Sopenharmony_cirdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev,
112962306a36Sopenharmony_ci		      struct net_device *dev,
113062306a36Sopenharmony_ci		      unsigned int link_id,
113162306a36Sopenharmony_ci		      struct cfg80211_chan_def *chandef)
113262306a36Sopenharmony_ci{
113362306a36Sopenharmony_ci	int ret;
113462306a36Sopenharmony_ci
113562306a36Sopenharmony_ci	trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, link_id, chandef);
113662306a36Sopenharmony_ci	ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, link_id, chandef);
113762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
113862306a36Sopenharmony_ci
113962306a36Sopenharmony_ci	return ret;
114062306a36Sopenharmony_ci}
114162306a36Sopenharmony_ci
114262306a36Sopenharmony_cistatic inline int
114362306a36Sopenharmony_cirdev_add_tx_ts(struct cfg80211_registered_device *rdev,
114462306a36Sopenharmony_ci	       struct net_device *dev, u8 tsid, const u8 *peer,
114562306a36Sopenharmony_ci	       u8 user_prio, u16 admitted_time)
114662306a36Sopenharmony_ci{
114762306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
114862306a36Sopenharmony_ci
114962306a36Sopenharmony_ci	trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer,
115062306a36Sopenharmony_ci			     user_prio, admitted_time);
115162306a36Sopenharmony_ci	if (rdev->ops->add_tx_ts)
115262306a36Sopenharmony_ci		ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer,
115362306a36Sopenharmony_ci					   user_prio, admitted_time);
115462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
115562306a36Sopenharmony_ci
115662306a36Sopenharmony_ci	return ret;
115762306a36Sopenharmony_ci}
115862306a36Sopenharmony_ci
115962306a36Sopenharmony_cistatic inline int
116062306a36Sopenharmony_cirdev_del_tx_ts(struct cfg80211_registered_device *rdev,
116162306a36Sopenharmony_ci	       struct net_device *dev, u8 tsid, const u8 *peer)
116262306a36Sopenharmony_ci{
116362306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
116462306a36Sopenharmony_ci
116562306a36Sopenharmony_ci	trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer);
116662306a36Sopenharmony_ci	if (rdev->ops->del_tx_ts)
116762306a36Sopenharmony_ci		ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer);
116862306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
116962306a36Sopenharmony_ci
117062306a36Sopenharmony_ci	return ret;
117162306a36Sopenharmony_ci}
117262306a36Sopenharmony_ci
117362306a36Sopenharmony_cistatic inline int
117462306a36Sopenharmony_cirdev_tdls_channel_switch(struct cfg80211_registered_device *rdev,
117562306a36Sopenharmony_ci			 struct net_device *dev, const u8 *addr,
117662306a36Sopenharmony_ci			 u8 oper_class, struct cfg80211_chan_def *chandef)
117762306a36Sopenharmony_ci{
117862306a36Sopenharmony_ci	int ret;
117962306a36Sopenharmony_ci
118062306a36Sopenharmony_ci	trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class,
118162306a36Sopenharmony_ci				       chandef);
118262306a36Sopenharmony_ci	ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr,
118362306a36Sopenharmony_ci					     oper_class, chandef);
118462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
118562306a36Sopenharmony_ci	return ret;
118662306a36Sopenharmony_ci}
118762306a36Sopenharmony_ci
118862306a36Sopenharmony_cistatic inline void
118962306a36Sopenharmony_cirdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev,
119062306a36Sopenharmony_ci				struct net_device *dev, const u8 *addr)
119162306a36Sopenharmony_ci{
119262306a36Sopenharmony_ci	trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
119362306a36Sopenharmony_ci	rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
119462306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
119562306a36Sopenharmony_ci}
119662306a36Sopenharmony_ci
119762306a36Sopenharmony_cistatic inline int
119862306a36Sopenharmony_cirdev_start_radar_detection(struct cfg80211_registered_device *rdev,
119962306a36Sopenharmony_ci			   struct net_device *dev,
120062306a36Sopenharmony_ci			   struct cfg80211_chan_def *chandef,
120162306a36Sopenharmony_ci			   u32 cac_time_ms)
120262306a36Sopenharmony_ci{
120362306a36Sopenharmony_ci	int ret = -ENOTSUPP;
120462306a36Sopenharmony_ci
120562306a36Sopenharmony_ci	trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef,
120662306a36Sopenharmony_ci					 cac_time_ms);
120762306a36Sopenharmony_ci	if (rdev->ops->start_radar_detection)
120862306a36Sopenharmony_ci		ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev,
120962306a36Sopenharmony_ci						       chandef, cac_time_ms);
121062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
121162306a36Sopenharmony_ci	return ret;
121262306a36Sopenharmony_ci}
121362306a36Sopenharmony_ci
121462306a36Sopenharmony_cistatic inline void
121562306a36Sopenharmony_cirdev_end_cac(struct cfg80211_registered_device *rdev,
121662306a36Sopenharmony_ci	     struct net_device *dev)
121762306a36Sopenharmony_ci{
121862306a36Sopenharmony_ci	trace_rdev_end_cac(&rdev->wiphy, dev);
121962306a36Sopenharmony_ci	if (rdev->ops->end_cac)
122062306a36Sopenharmony_ci		rdev->ops->end_cac(&rdev->wiphy, dev);
122162306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
122262306a36Sopenharmony_ci}
122362306a36Sopenharmony_ci
122462306a36Sopenharmony_cistatic inline int
122562306a36Sopenharmony_cirdev_set_mcast_rate(struct cfg80211_registered_device *rdev,
122662306a36Sopenharmony_ci		    struct net_device *dev,
122762306a36Sopenharmony_ci		    int mcast_rate[NUM_NL80211_BANDS])
122862306a36Sopenharmony_ci{
122962306a36Sopenharmony_ci	int ret = -ENOTSUPP;
123062306a36Sopenharmony_ci
123162306a36Sopenharmony_ci	trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate);
123262306a36Sopenharmony_ci	if (rdev->ops->set_mcast_rate)
123362306a36Sopenharmony_ci		ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate);
123462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
123562306a36Sopenharmony_ci	return ret;
123662306a36Sopenharmony_ci}
123762306a36Sopenharmony_ci
123862306a36Sopenharmony_cistatic inline int
123962306a36Sopenharmony_cirdev_set_coalesce(struct cfg80211_registered_device *rdev,
124062306a36Sopenharmony_ci		  struct cfg80211_coalesce *coalesce)
124162306a36Sopenharmony_ci{
124262306a36Sopenharmony_ci	int ret = -ENOTSUPP;
124362306a36Sopenharmony_ci
124462306a36Sopenharmony_ci	trace_rdev_set_coalesce(&rdev->wiphy, coalesce);
124562306a36Sopenharmony_ci	if (rdev->ops->set_coalesce)
124662306a36Sopenharmony_ci		ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce);
124762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
124862306a36Sopenharmony_ci	return ret;
124962306a36Sopenharmony_ci}
125062306a36Sopenharmony_ci
125162306a36Sopenharmony_cistatic inline int rdev_set_pmk(struct cfg80211_registered_device *rdev,
125262306a36Sopenharmony_ci			       struct net_device *dev,
125362306a36Sopenharmony_ci			       struct cfg80211_pmk_conf *pmk_conf)
125462306a36Sopenharmony_ci{
125562306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
125662306a36Sopenharmony_ci
125762306a36Sopenharmony_ci	trace_rdev_set_pmk(&rdev->wiphy, dev, pmk_conf);
125862306a36Sopenharmony_ci	if (rdev->ops->set_pmk)
125962306a36Sopenharmony_ci		ret = rdev->ops->set_pmk(&rdev->wiphy, dev, pmk_conf);
126062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
126162306a36Sopenharmony_ci	return ret;
126262306a36Sopenharmony_ci}
126362306a36Sopenharmony_ci
126462306a36Sopenharmony_cistatic inline int rdev_del_pmk(struct cfg80211_registered_device *rdev,
126562306a36Sopenharmony_ci			       struct net_device *dev, const u8 *aa)
126662306a36Sopenharmony_ci{
126762306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
126862306a36Sopenharmony_ci
126962306a36Sopenharmony_ci	trace_rdev_del_pmk(&rdev->wiphy, dev, aa);
127062306a36Sopenharmony_ci	if (rdev->ops->del_pmk)
127162306a36Sopenharmony_ci		ret = rdev->ops->del_pmk(&rdev->wiphy, dev, aa);
127262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
127362306a36Sopenharmony_ci	return ret;
127462306a36Sopenharmony_ci}
127562306a36Sopenharmony_ci
127662306a36Sopenharmony_cistatic inline int
127762306a36Sopenharmony_cirdev_external_auth(struct cfg80211_registered_device *rdev,
127862306a36Sopenharmony_ci		   struct net_device *dev,
127962306a36Sopenharmony_ci		   struct cfg80211_external_auth_params *params)
128062306a36Sopenharmony_ci{
128162306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
128262306a36Sopenharmony_ci
128362306a36Sopenharmony_ci	trace_rdev_external_auth(&rdev->wiphy, dev, params);
128462306a36Sopenharmony_ci	if (rdev->ops->external_auth)
128562306a36Sopenharmony_ci		ret = rdev->ops->external_auth(&rdev->wiphy, dev, params);
128662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
128762306a36Sopenharmony_ci	return ret;
128862306a36Sopenharmony_ci}
128962306a36Sopenharmony_ci
129062306a36Sopenharmony_cistatic inline int
129162306a36Sopenharmony_cirdev_get_ftm_responder_stats(struct cfg80211_registered_device *rdev,
129262306a36Sopenharmony_ci			     struct net_device *dev,
129362306a36Sopenharmony_ci			     struct cfg80211_ftm_responder_stats *ftm_stats)
129462306a36Sopenharmony_ci{
129562306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
129662306a36Sopenharmony_ci
129762306a36Sopenharmony_ci	trace_rdev_get_ftm_responder_stats(&rdev->wiphy, dev, ftm_stats);
129862306a36Sopenharmony_ci	if (rdev->ops->get_ftm_responder_stats)
129962306a36Sopenharmony_ci		ret = rdev->ops->get_ftm_responder_stats(&rdev->wiphy, dev,
130062306a36Sopenharmony_ci							ftm_stats);
130162306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
130262306a36Sopenharmony_ci	return ret;
130362306a36Sopenharmony_ci}
130462306a36Sopenharmony_ci
130562306a36Sopenharmony_cistatic inline int
130662306a36Sopenharmony_cirdev_start_pmsr(struct cfg80211_registered_device *rdev,
130762306a36Sopenharmony_ci		struct wireless_dev *wdev,
130862306a36Sopenharmony_ci		struct cfg80211_pmsr_request *request)
130962306a36Sopenharmony_ci{
131062306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
131162306a36Sopenharmony_ci
131262306a36Sopenharmony_ci	trace_rdev_start_pmsr(&rdev->wiphy, wdev, request->cookie);
131362306a36Sopenharmony_ci	if (rdev->ops->start_pmsr)
131462306a36Sopenharmony_ci		ret = rdev->ops->start_pmsr(&rdev->wiphy, wdev, request);
131562306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
131662306a36Sopenharmony_ci	return ret;
131762306a36Sopenharmony_ci}
131862306a36Sopenharmony_ci
131962306a36Sopenharmony_cistatic inline void
132062306a36Sopenharmony_cirdev_abort_pmsr(struct cfg80211_registered_device *rdev,
132162306a36Sopenharmony_ci		struct wireless_dev *wdev,
132262306a36Sopenharmony_ci		struct cfg80211_pmsr_request *request)
132362306a36Sopenharmony_ci{
132462306a36Sopenharmony_ci	trace_rdev_abort_pmsr(&rdev->wiphy, wdev, request->cookie);
132562306a36Sopenharmony_ci	if (rdev->ops->abort_pmsr)
132662306a36Sopenharmony_ci		rdev->ops->abort_pmsr(&rdev->wiphy, wdev, request);
132762306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
132862306a36Sopenharmony_ci}
132962306a36Sopenharmony_ci
133062306a36Sopenharmony_cistatic inline int rdev_update_owe_info(struct cfg80211_registered_device *rdev,
133162306a36Sopenharmony_ci				       struct net_device *dev,
133262306a36Sopenharmony_ci				       struct cfg80211_update_owe_info *oweinfo)
133362306a36Sopenharmony_ci{
133462306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
133562306a36Sopenharmony_ci
133662306a36Sopenharmony_ci	trace_rdev_update_owe_info(&rdev->wiphy, dev, oweinfo);
133762306a36Sopenharmony_ci	if (rdev->ops->update_owe_info)
133862306a36Sopenharmony_ci		ret = rdev->ops->update_owe_info(&rdev->wiphy, dev, oweinfo);
133962306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
134062306a36Sopenharmony_ci	return ret;
134162306a36Sopenharmony_ci}
134262306a36Sopenharmony_ci
134362306a36Sopenharmony_cistatic inline int
134462306a36Sopenharmony_cirdev_probe_mesh_link(struct cfg80211_registered_device *rdev,
134562306a36Sopenharmony_ci		     struct net_device *dev, const u8 *dest,
134662306a36Sopenharmony_ci		     const void *buf, size_t len)
134762306a36Sopenharmony_ci{
134862306a36Sopenharmony_ci	int ret;
134962306a36Sopenharmony_ci
135062306a36Sopenharmony_ci	trace_rdev_probe_mesh_link(&rdev->wiphy, dev, dest, buf, len);
135162306a36Sopenharmony_ci	ret = rdev->ops->probe_mesh_link(&rdev->wiphy, dev, buf, len);
135262306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
135362306a36Sopenharmony_ci	return ret;
135462306a36Sopenharmony_ci}
135562306a36Sopenharmony_ci
135662306a36Sopenharmony_cistatic inline int rdev_set_tid_config(struct cfg80211_registered_device *rdev,
135762306a36Sopenharmony_ci				      struct net_device *dev,
135862306a36Sopenharmony_ci				      struct cfg80211_tid_config *tid_conf)
135962306a36Sopenharmony_ci{
136062306a36Sopenharmony_ci	int ret;
136162306a36Sopenharmony_ci
136262306a36Sopenharmony_ci	trace_rdev_set_tid_config(&rdev->wiphy, dev, tid_conf);
136362306a36Sopenharmony_ci	ret = rdev->ops->set_tid_config(&rdev->wiphy, dev, tid_conf);
136462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
136562306a36Sopenharmony_ci	return ret;
136662306a36Sopenharmony_ci}
136762306a36Sopenharmony_ci
136862306a36Sopenharmony_cistatic inline int rdev_reset_tid_config(struct cfg80211_registered_device *rdev,
136962306a36Sopenharmony_ci					struct net_device *dev, const u8 *peer,
137062306a36Sopenharmony_ci					u8 tids)
137162306a36Sopenharmony_ci{
137262306a36Sopenharmony_ci	int ret;
137362306a36Sopenharmony_ci
137462306a36Sopenharmony_ci	trace_rdev_reset_tid_config(&rdev->wiphy, dev, peer, tids);
137562306a36Sopenharmony_ci	ret = rdev->ops->reset_tid_config(&rdev->wiphy, dev, peer, tids);
137662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
137762306a36Sopenharmony_ci	return ret;
137862306a36Sopenharmony_ci}
137962306a36Sopenharmony_ci
138062306a36Sopenharmony_cistatic inline int rdev_set_sar_specs(struct cfg80211_registered_device *rdev,
138162306a36Sopenharmony_ci				     struct cfg80211_sar_specs *sar)
138262306a36Sopenharmony_ci{
138362306a36Sopenharmony_ci	int ret;
138462306a36Sopenharmony_ci
138562306a36Sopenharmony_ci	trace_rdev_set_sar_specs(&rdev->wiphy, sar);
138662306a36Sopenharmony_ci	ret = rdev->ops->set_sar_specs(&rdev->wiphy, sar);
138762306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
138862306a36Sopenharmony_ci
138962306a36Sopenharmony_ci	return ret;
139062306a36Sopenharmony_ci}
139162306a36Sopenharmony_ci
139262306a36Sopenharmony_cistatic inline int rdev_color_change(struct cfg80211_registered_device *rdev,
139362306a36Sopenharmony_ci				    struct net_device *dev,
139462306a36Sopenharmony_ci				    struct cfg80211_color_change_settings *params)
139562306a36Sopenharmony_ci{
139662306a36Sopenharmony_ci	int ret;
139762306a36Sopenharmony_ci
139862306a36Sopenharmony_ci	trace_rdev_color_change(&rdev->wiphy, dev, params);
139962306a36Sopenharmony_ci	ret = rdev->ops->color_change(&rdev->wiphy, dev, params);
140062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
140162306a36Sopenharmony_ci
140262306a36Sopenharmony_ci	return ret;
140362306a36Sopenharmony_ci}
140462306a36Sopenharmony_ci
140562306a36Sopenharmony_cistatic inline int
140662306a36Sopenharmony_cirdev_set_fils_aad(struct cfg80211_registered_device *rdev,
140762306a36Sopenharmony_ci		  struct net_device *dev, struct cfg80211_fils_aad *fils_aad)
140862306a36Sopenharmony_ci{
140962306a36Sopenharmony_ci	int ret = -EOPNOTSUPP;
141062306a36Sopenharmony_ci
141162306a36Sopenharmony_ci	trace_rdev_set_fils_aad(&rdev->wiphy, dev, fils_aad);
141262306a36Sopenharmony_ci	if (rdev->ops->set_fils_aad)
141362306a36Sopenharmony_ci		ret = rdev->ops->set_fils_aad(&rdev->wiphy, dev, fils_aad);
141462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
141562306a36Sopenharmony_ci
141662306a36Sopenharmony_ci	return ret;
141762306a36Sopenharmony_ci}
141862306a36Sopenharmony_ci
141962306a36Sopenharmony_cistatic inline int
142062306a36Sopenharmony_cirdev_set_radar_background(struct cfg80211_registered_device *rdev,
142162306a36Sopenharmony_ci			  struct cfg80211_chan_def *chandef)
142262306a36Sopenharmony_ci{
142362306a36Sopenharmony_ci	struct wiphy *wiphy = &rdev->wiphy;
142462306a36Sopenharmony_ci	int ret;
142562306a36Sopenharmony_ci
142662306a36Sopenharmony_ci	if (!rdev->ops->set_radar_background)
142762306a36Sopenharmony_ci		return -EOPNOTSUPP;
142862306a36Sopenharmony_ci
142962306a36Sopenharmony_ci	trace_rdev_set_radar_background(wiphy, chandef);
143062306a36Sopenharmony_ci	ret = rdev->ops->set_radar_background(wiphy, chandef);
143162306a36Sopenharmony_ci	trace_rdev_return_int(wiphy, ret);
143262306a36Sopenharmony_ci
143362306a36Sopenharmony_ci	return ret;
143462306a36Sopenharmony_ci}
143562306a36Sopenharmony_ci
143662306a36Sopenharmony_cistatic inline int
143762306a36Sopenharmony_cirdev_add_intf_link(struct cfg80211_registered_device *rdev,
143862306a36Sopenharmony_ci		   struct wireless_dev *wdev,
143962306a36Sopenharmony_ci		   unsigned int link_id)
144062306a36Sopenharmony_ci{
144162306a36Sopenharmony_ci	int ret = 0;
144262306a36Sopenharmony_ci
144362306a36Sopenharmony_ci	trace_rdev_add_intf_link(&rdev->wiphy, wdev, link_id);
144462306a36Sopenharmony_ci	if (rdev->ops->add_intf_link)
144562306a36Sopenharmony_ci		ret = rdev->ops->add_intf_link(&rdev->wiphy, wdev, link_id);
144662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
144762306a36Sopenharmony_ci
144862306a36Sopenharmony_ci	return ret;
144962306a36Sopenharmony_ci}
145062306a36Sopenharmony_ci
145162306a36Sopenharmony_cistatic inline void
145262306a36Sopenharmony_cirdev_del_intf_link(struct cfg80211_registered_device *rdev,
145362306a36Sopenharmony_ci		   struct wireless_dev *wdev,
145462306a36Sopenharmony_ci		   unsigned int link_id)
145562306a36Sopenharmony_ci{
145662306a36Sopenharmony_ci	trace_rdev_del_intf_link(&rdev->wiphy, wdev, link_id);
145762306a36Sopenharmony_ci	if (rdev->ops->del_intf_link)
145862306a36Sopenharmony_ci		rdev->ops->del_intf_link(&rdev->wiphy, wdev, link_id);
145962306a36Sopenharmony_ci	trace_rdev_return_void(&rdev->wiphy);
146062306a36Sopenharmony_ci}
146162306a36Sopenharmony_ci
146262306a36Sopenharmony_cistatic inline int
146362306a36Sopenharmony_cirdev_add_link_station(struct cfg80211_registered_device *rdev,
146462306a36Sopenharmony_ci		      struct net_device *dev,
146562306a36Sopenharmony_ci		      struct link_station_parameters *params)
146662306a36Sopenharmony_ci{
146762306a36Sopenharmony_ci	int ret;
146862306a36Sopenharmony_ci
146962306a36Sopenharmony_ci	if (!rdev->ops->add_link_station)
147062306a36Sopenharmony_ci		return -EOPNOTSUPP;
147162306a36Sopenharmony_ci
147262306a36Sopenharmony_ci	trace_rdev_add_link_station(&rdev->wiphy, dev, params);
147362306a36Sopenharmony_ci	ret = rdev->ops->add_link_station(&rdev->wiphy, dev, params);
147462306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
147562306a36Sopenharmony_ci	return ret;
147662306a36Sopenharmony_ci}
147762306a36Sopenharmony_ci
147862306a36Sopenharmony_cistatic inline int
147962306a36Sopenharmony_cirdev_mod_link_station(struct cfg80211_registered_device *rdev,
148062306a36Sopenharmony_ci		      struct net_device *dev,
148162306a36Sopenharmony_ci		      struct link_station_parameters *params)
148262306a36Sopenharmony_ci{
148362306a36Sopenharmony_ci	int ret;
148462306a36Sopenharmony_ci
148562306a36Sopenharmony_ci	if (!rdev->ops->mod_link_station)
148662306a36Sopenharmony_ci		return -EOPNOTSUPP;
148762306a36Sopenharmony_ci
148862306a36Sopenharmony_ci	trace_rdev_mod_link_station(&rdev->wiphy, dev, params);
148962306a36Sopenharmony_ci	ret = rdev->ops->mod_link_station(&rdev->wiphy, dev, params);
149062306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
149162306a36Sopenharmony_ci	return ret;
149262306a36Sopenharmony_ci}
149362306a36Sopenharmony_ci
149462306a36Sopenharmony_cistatic inline int
149562306a36Sopenharmony_cirdev_del_link_station(struct cfg80211_registered_device *rdev,
149662306a36Sopenharmony_ci		      struct net_device *dev,
149762306a36Sopenharmony_ci		      struct link_station_del_parameters *params)
149862306a36Sopenharmony_ci{
149962306a36Sopenharmony_ci	int ret;
150062306a36Sopenharmony_ci
150162306a36Sopenharmony_ci	if (!rdev->ops->del_link_station)
150262306a36Sopenharmony_ci		return -EOPNOTSUPP;
150362306a36Sopenharmony_ci
150462306a36Sopenharmony_ci	trace_rdev_del_link_station(&rdev->wiphy, dev, params);
150562306a36Sopenharmony_ci	ret = rdev->ops->del_link_station(&rdev->wiphy, dev, params);
150662306a36Sopenharmony_ci	trace_rdev_return_int(&rdev->wiphy, ret);
150762306a36Sopenharmony_ci	return ret;
150862306a36Sopenharmony_ci}
150962306a36Sopenharmony_ci
151062306a36Sopenharmony_cistatic inline int
151162306a36Sopenharmony_cirdev_set_hw_timestamp(struct cfg80211_registered_device *rdev,
151262306a36Sopenharmony_ci		      struct net_device *dev,
151362306a36Sopenharmony_ci		      struct cfg80211_set_hw_timestamp *hwts)
151462306a36Sopenharmony_ci{
151562306a36Sopenharmony_ci	struct wiphy *wiphy = &rdev->wiphy;
151662306a36Sopenharmony_ci	int ret;
151762306a36Sopenharmony_ci
151862306a36Sopenharmony_ci	if (!rdev->ops->set_hw_timestamp)
151962306a36Sopenharmony_ci		return -EOPNOTSUPP;
152062306a36Sopenharmony_ci
152162306a36Sopenharmony_ci	trace_rdev_set_hw_timestamp(wiphy, dev, hwts);
152262306a36Sopenharmony_ci	ret = rdev->ops->set_hw_timestamp(wiphy, dev, hwts);
152362306a36Sopenharmony_ci	trace_rdev_return_int(wiphy, ret);
152462306a36Sopenharmony_ci
152562306a36Sopenharmony_ci	return ret;
152662306a36Sopenharmony_ci}
152762306a36Sopenharmony_ci#endif /* __CFG80211_RDEV_OPS */
1528