rdev-ops.h 27.5 KB
Newer Older
1 2 3 4 5 6
#ifndef __CFG80211_RDEV_OPS
#define __CFG80211_RDEV_OPS

#include <linux/rtnetlink.h>
#include <net/cfg80211.h>
#include "core.h"
B
Beni Lev 已提交
7
#include "trace.h"
8

9 10
static inline int rdev_suspend(struct cfg80211_registered_device *rdev,
			       struct cfg80211_wowlan *wowlan)
11
{
B
Beni Lev 已提交
12
	int ret;
13 14
	trace_rdev_suspend(&rdev->wiphy, wowlan);
	ret = rdev->ops->suspend(&rdev->wiphy, wowlan);
B
Beni Lev 已提交
15 16
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
17 18 19 20
}

static inline int rdev_resume(struct cfg80211_registered_device *rdev)
{
B
Beni Lev 已提交
21 22 23 24 25
	int ret;
	trace_rdev_resume(&rdev->wiphy);
	ret = rdev->ops->resume(&rdev->wiphy);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
26 27 28 29 30
}

static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev,
				   bool enabled)
{
B
Beni Lev 已提交
31
	trace_rdev_set_wakeup(&rdev->wiphy, enabled);
32
	rdev->ops->set_wakeup(&rdev->wiphy, enabled);
B
Beni Lev 已提交
33
	trace_rdev_return_void(&rdev->wiphy);
34 35 36 37 38 39 40
}

static inline struct wireless_dev
*rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name,
		       enum nl80211_iftype type, u32 *flags,
		       struct vif_params *params)
{
B
Beni Lev 已提交
41 42 43 44 45 46
	struct wireless_dev *ret;
	trace_rdev_add_virtual_intf(&rdev->wiphy, name, type);
	ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, type, flags,
					  params);
	trace_rdev_return_wdev(&rdev->wiphy, ret);
	return ret;
47 48 49 50 51 52
}

static inline int
rdev_del_virtual_intf(struct cfg80211_registered_device *rdev,
		      struct wireless_dev *wdev)
{
B
Beni Lev 已提交
53 54 55 56 57
	int ret;
	trace_rdev_del_virtual_intf(&rdev->wiphy, wdev);
	ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
58 59 60 61 62 63 64
}

static inline int
rdev_change_virtual_intf(struct cfg80211_registered_device *rdev,
			 struct net_device *dev, enum nl80211_iftype type,
			 u32 *flags, struct vif_params *params)
{
B
Beni Lev 已提交
65 66 67 68 69 70
	int ret;
	trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type);
	ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, flags,
					     params);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
71 72 73 74 75 76 77
}

static inline int rdev_add_key(struct cfg80211_registered_device *rdev,
			       struct net_device *netdev, u8 key_index,
			       bool pairwise, const u8 *mac_addr,
			       struct key_params *params)
{
B
Beni Lev 已提交
78 79 80
	int ret;
	trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
	ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise,
81
				  mac_addr, params);
B
Beni Lev 已提交
82 83
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
84 85 86 87 88 89 90
}

static inline int
rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev,
	     u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie,
	     void (*callback)(void *cookie, struct key_params*))
{
B
Beni Lev 已提交
91 92 93
	int ret;
	trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
	ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise,
94
				  mac_addr, cookie, callback);
B
Beni Lev 已提交
95 96
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
97 98 99 100 101 102
}

static inline int rdev_del_key(struct cfg80211_registered_device *rdev,
			       struct net_device *netdev, u8 key_index,
			       bool pairwise, const u8 *mac_addr)
{
B
Beni Lev 已提交
103 104 105
	int ret;
	trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
	ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise,
106
				  mac_addr);
B
Beni Lev 已提交
107 108
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
109 110 111 112 113 114 115
}

static inline int
rdev_set_default_key(struct cfg80211_registered_device *rdev,
		     struct net_device *netdev, u8 key_index, bool unicast,
		     bool multicast)
{
B
Beni Lev 已提交
116 117 118 119
	int ret;
	trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index,
				   unicast, multicast);
	ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index,
120
					  unicast, multicast);
B
Beni Lev 已提交
121 122
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
123 124 125 126 127 128
}

static inline int
rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev,
			  struct net_device *netdev, u8 key_index)
{
B
Beni Lev 已提交
129 130 131
	int ret;
	trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index);
	ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev,
132
					       key_index);
B
Beni Lev 已提交
133 134
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
135 136 137 138 139 140
}

static inline int rdev_start_ap(struct cfg80211_registered_device *rdev,
				struct net_device *dev,
				struct cfg80211_ap_settings *settings)
{
B
Beni Lev 已提交
141 142 143 144 145
	int ret;
	trace_rdev_start_ap(&rdev->wiphy, dev, settings);
	ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
146 147 148 149 150 151
}

static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev,
				     struct net_device *dev,
				     struct cfg80211_beacon_data *info)
{
B
Beni Lev 已提交
152 153 154 155 156
	int ret;
	trace_rdev_change_beacon(&rdev->wiphy, dev, info);
	ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
157 158 159 160 161
}

static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev,
			       struct net_device *dev)
{
B
Beni Lev 已提交
162 163 164 165 166
	int ret;
	trace_rdev_stop_ap(&rdev->wiphy, dev);
	ret = rdev->ops->stop_ap(&rdev->wiphy, dev);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
167 168 169 170 171 172
}

static inline int rdev_add_station(struct cfg80211_registered_device *rdev,
				   struct net_device *dev, u8 *mac,
				   struct station_parameters *params)
{
B
Beni Lev 已提交
173 174 175 176 177
	int ret;
	trace_rdev_add_station(&rdev->wiphy, dev, mac, params);
	ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
178 179 180 181 182
}

static inline int rdev_del_station(struct cfg80211_registered_device *rdev,
				   struct net_device *dev, u8 *mac)
{
B
Beni Lev 已提交
183 184 185 186 187
	int ret;
	trace_rdev_del_station(&rdev->wiphy, dev, mac);
	ret = rdev->ops->del_station(&rdev->wiphy, dev, mac);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
188 189 190 191 192 193
}

static inline int rdev_change_station(struct cfg80211_registered_device *rdev,
				      struct net_device *dev, u8 *mac,
				      struct station_parameters *params)
{
B
Beni Lev 已提交
194 195 196 197 198
	int ret;
	trace_rdev_change_station(&rdev->wiphy, dev, mac, params);
	ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
199 200 201 202 203 204
}

static inline int rdev_get_station(struct cfg80211_registered_device *rdev,
				   struct net_device *dev, u8 *mac,
				   struct station_info *sinfo)
{
B
Beni Lev 已提交
205 206 207 208 209
	int ret;
	trace_rdev_get_station(&rdev->wiphy, dev, mac);
	ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo);
	trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo);
	return ret;
210 211 212 213 214 215
}

static inline int rdev_dump_station(struct cfg80211_registered_device *rdev,
				    struct net_device *dev, int idx, u8 *mac,
				    struct station_info *sinfo)
{
B
Beni Lev 已提交
216 217 218 219 220
	int ret;
	trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac);
	ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo);
	trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo);
	return ret;
221 222 223 224 225
}

static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *dst, u8 *next_hop)
{
B
Beni Lev 已提交
226 227 228 229 230
	int ret;
	trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop);
	ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
231 232 233 234 235
}

static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *dst)
{
B
Beni Lev 已提交
236 237 238 239 240
	int ret;
	trace_rdev_del_mpath(&rdev->wiphy, dev, dst);
	ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
241 242 243 244 245 246
}

static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev,
				    struct net_device *dev, u8 *dst,
				    u8 *next_hop)
{
B
Beni Lev 已提交
247 248 249 250 251
	int ret;
	trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop);
	ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
252 253 254 255 256 257
}

static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *dst, u8 *next_hop,
				 struct mpath_info *pinfo)
{
B
Beni Lev 已提交
258 259 260 261 262 263
	int ret;
	trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop);
	ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo);
	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
	return ret;

264 265 266 267 268 269 270
}

static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev,
				  struct net_device *dev, int idx, u8 *dst,
				  u8 *next_hop, struct mpath_info *pinfo)

{
B
Beni Lev 已提交
271 272 273
	int ret;
	trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop);
	ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop,
274
				     pinfo);
B
Beni Lev 已提交
275 276
	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
	return ret;
277 278 279 280 281 282
}

static inline int
rdev_get_mesh_config(struct cfg80211_registered_device *rdev,
		     struct net_device *dev, struct mesh_config *conf)
{
B
Beni Lev 已提交
283 284 285 286 287
	int ret;
	trace_rdev_get_mesh_config(&rdev->wiphy, dev);
	ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf);
	trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf);
	return ret;
288 289 290 291 292 293 294
}

static inline int
rdev_update_mesh_config(struct cfg80211_registered_device *rdev,
			struct net_device *dev, u32 mask,
			const struct mesh_config *nconf)
{
B
Beni Lev 已提交
295 296 297 298 299
	int ret;
	trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf);
	ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
300 301 302 303 304 305 306
}

static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev,
				 struct net_device *dev,
				 const struct mesh_config *conf,
				 const struct mesh_setup *setup)
{
B
Beni Lev 已提交
307 308 309 310 311
	int ret;
	trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup);
	ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
312 313 314 315 316 317
}


static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev,
				  struct net_device *dev)
{
B
Beni Lev 已提交
318 319 320 321 322
	int ret;
	trace_rdev_leave_mesh(&rdev->wiphy, dev);
	ret = rdev->ops->leave_mesh(&rdev->wiphy, dev);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
323 324 325 326 327 328 329
}

static inline int rdev_change_bss(struct cfg80211_registered_device *rdev,
				  struct net_device *dev,
				  struct bss_parameters *params)

{
B
Beni Lev 已提交
330 331 332 333 334
	int ret;
	trace_rdev_change_bss(&rdev->wiphy, dev, params);
	ret = rdev->ops->change_bss(&rdev->wiphy, dev, params);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
335 336 337 338 339 340 341
}

static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev,
				      struct net_device *dev,
				      struct ieee80211_txq_params *params)

{
B
Beni Lev 已提交
342 343 344 345 346
	int ret;
	trace_rdev_set_txq_params(&rdev->wiphy, dev, params);
	ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
347 348 349 350 351 352 353
}

static inline int
rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev,
			       struct net_device *dev,
			       struct ieee80211_channel *chan)
{
B
Beni Lev 已提交
354 355 356 357 358
	int ret;
	trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan);
	ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
359 360 361 362
}

static inline int
rdev_set_monitor_channel(struct cfg80211_registered_device *rdev,
363
			 struct cfg80211_chan_def *chandef)
364
{
B
Beni Lev 已提交
365
	int ret;
366 367
	trace_rdev_set_monitor_channel(&rdev->wiphy, chandef);
	ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef);
B
Beni Lev 已提交
368 369
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
370 371 372 373 374
}

static inline int rdev_scan(struct cfg80211_registered_device *rdev,
			    struct cfg80211_scan_request *request)
{
B
Beni Lev 已提交
375 376 377 378 379
	int ret;
	trace_rdev_scan(&rdev->wiphy, request);
	ret = rdev->ops->scan(&rdev->wiphy, request);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
380 381 382 383 384 385
}

static inline int rdev_auth(struct cfg80211_registered_device *rdev,
			    struct net_device *dev,
			    struct cfg80211_auth_request *req)
{
B
Beni Lev 已提交
386 387 388 389 390
	int ret;
	trace_rdev_auth(&rdev->wiphy, dev, req);
	ret = rdev->ops->auth(&rdev->wiphy, dev, req);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
391 392 393 394 395 396
}

static inline int rdev_assoc(struct cfg80211_registered_device *rdev,
			     struct net_device *dev,
			     struct cfg80211_assoc_request *req)
{
B
Beni Lev 已提交
397 398 399 400 401
	int ret;
	trace_rdev_assoc(&rdev->wiphy, dev, req);
	ret = rdev->ops->assoc(&rdev->wiphy, dev, req);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
402 403 404 405 406 407
}

static inline int rdev_deauth(struct cfg80211_registered_device *rdev,
			      struct net_device *dev,
			      struct cfg80211_deauth_request *req)
{
B
Beni Lev 已提交
408 409 410 411 412
	int ret;
	trace_rdev_deauth(&rdev->wiphy, dev, req);
	ret = rdev->ops->deauth(&rdev->wiphy, dev, req);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
413 414 415 416 417 418
}

static inline int rdev_disassoc(struct cfg80211_registered_device *rdev,
				struct net_device *dev,
				struct cfg80211_disassoc_request *req)
{
B
Beni Lev 已提交
419 420 421 422 423
	int ret;
	trace_rdev_disassoc(&rdev->wiphy, dev, req);
	ret = rdev->ops->disassoc(&rdev->wiphy, dev, req);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
424 425 426 427 428 429
}

static inline int rdev_connect(struct cfg80211_registered_device *rdev,
			       struct net_device *dev,
			       struct cfg80211_connect_params *sme)
{
B
Beni Lev 已提交
430 431 432 433 434
	int ret;
	trace_rdev_connect(&rdev->wiphy, dev, sme);
	ret = rdev->ops->connect(&rdev->wiphy, dev, sme);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
435 436 437 438 439
}

static inline int rdev_disconnect(struct cfg80211_registered_device *rdev,
				  struct net_device *dev, u16 reason_code)
{
B
Beni Lev 已提交
440 441 442 443 444
	int ret;
	trace_rdev_disconnect(&rdev->wiphy, dev, reason_code);
	ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
445 446 447 448 449 450
}

static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev,
				 struct net_device *dev,
				 struct cfg80211_ibss_params *params)
{
B
Beni Lev 已提交
451 452 453 454 455
	int ret;
	trace_rdev_join_ibss(&rdev->wiphy, dev, params);
	ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
456 457 458 459 460
}

static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev,
				  struct net_device *dev)
{
B
Beni Lev 已提交
461 462 463 464 465
	int ret;
	trace_rdev_leave_ibss(&rdev->wiphy, dev);
	ret = rdev->ops->leave_ibss(&rdev->wiphy, dev);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
466 467 468 469 470
}

static inline int
rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed)
{
B
Beni Lev 已提交
471 472 473 474 475
	int ret;
	trace_rdev_set_wiphy_params(&rdev->wiphy, changed);
	ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
476 477 478
}

static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev,
479
				    struct wireless_dev *wdev,
480 481
				    enum nl80211_tx_power_setting type, int mbm)
{
B
Beni Lev 已提交
482
	int ret;
483 484
	trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm);
	ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm);
B
Beni Lev 已提交
485 486
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
487 488 489
}

static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev,
490
				    struct wireless_dev *wdev, int *dbm)
491
{
B
Beni Lev 已提交
492
	int ret;
493 494
	trace_rdev_get_tx_power(&rdev->wiphy, wdev);
	ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm);
B
Beni Lev 已提交
495 496
	trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm);
	return ret;
497 498 499 500 501
}

static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev,
				    struct net_device *dev, const u8 *addr)
{
B
Beni Lev 已提交
502 503 504 505 506
	int ret;
	trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr);
	ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
507 508 509 510
}

static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev)
{
B
Beni Lev 已提交
511
	trace_rdev_rfkill_poll(&rdev->wiphy);
512
	rdev->ops->rfkill_poll(&rdev->wiphy);
B
Beni Lev 已提交
513
	trace_rdev_return_void(&rdev->wiphy);
514 515 516 517 518
}


#ifdef CONFIG_NL80211_TESTMODE
static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev,
519
				    struct wireless_dev *wdev,
520 521
				    void *data, int len)
{
B
Beni Lev 已提交
522
	int ret;
523 524
	trace_rdev_testmode_cmd(&rdev->wiphy, wdev);
	ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len);
B
Beni Lev 已提交
525 526
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
527 528 529 530 531 532 533
}

static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev,
				     struct sk_buff *skb,
				     struct netlink_callback *cb, void *data,
				     int len)
{
B
Beni Lev 已提交
534 535 536 537 538
	int ret;
	trace_rdev_testmode_dump(&rdev->wiphy);
	ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
539 540 541 542 543 544 545 546
}
#endif

static inline int
rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev,
		      struct net_device *dev, const u8 *peer,
		      const struct cfg80211_bitrate_mask *mask)
{
B
Beni Lev 已提交
547 548 549 550 551
	int ret;
	trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
	ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
552 553 554 555 556 557
}

static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev,
				   struct net_device *netdev, int idx,
				   struct survey_info *info)
{
B
Beni Lev 已提交
558 559 560 561 562 563 564 565
	int ret;
	trace_rdev_dump_survey(&rdev->wiphy, netdev, idx);
	ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info);
	if (ret < 0)
		trace_rdev_return_int(&rdev->wiphy, ret);
	else
		trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info);
	return ret;
566 567 568 569 570 571
}

static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev,
				 struct net_device *netdev,
				 struct cfg80211_pmksa *pmksa)
{
B
Beni Lev 已提交
572 573 574 575 576
	int ret;
	trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa);
	ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
577 578 579 580 581 582
}

static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev,
				 struct net_device *netdev,
				 struct cfg80211_pmksa *pmksa)
{
B
Beni Lev 已提交
583 584 585 586 587
	int ret;
	trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa);
	ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
588 589 590 591 592
}

static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev,
				   struct net_device *netdev)
{
B
Beni Lev 已提交
593 594 595 596 597
	int ret;
	trace_rdev_flush_pmksa(&rdev->wiphy, netdev);
	ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
598 599 600 601 602 603 604 605
}

static inline int
rdev_remain_on_channel(struct cfg80211_registered_device *rdev,
		       struct wireless_dev *wdev,
		       struct ieee80211_channel *chan,
		       unsigned int duration, u64 *cookie)
{
B
Beni Lev 已提交
606
	int ret;
607
	trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration);
B
Beni Lev 已提交
608
	ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan,
609
					   duration, cookie);
B
Beni Lev 已提交
610 611
	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
	return ret;
612 613 614 615 616 617
}

static inline int
rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev,
			      struct wireless_dev *wdev, u64 cookie)
{
B
Beni Lev 已提交
618 619 620 621 622
	int ret;
	trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
	ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
623 624 625 626 627
}

static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev,
			       struct wireless_dev *wdev,
			       struct ieee80211_channel *chan, bool offchan,
628 629
			       unsigned int wait, const u8 *buf, size_t len,
			       bool no_cck, bool dont_wait_for_ack, u64 *cookie)
630
{
B
Beni Lev 已提交
631
	int ret;
632 633
	trace_rdev_mgmt_tx(&rdev->wiphy, wdev, chan, offchan,
			   wait, no_cck, dont_wait_for_ack);
B
Beni Lev 已提交
634
	ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, chan, offchan,
635 636
				  wait, buf, len, no_cck,
				  dont_wait_for_ack, cookie);
B
Beni Lev 已提交
637 638
	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
	return ret;
639 640 641 642 643 644
}

static inline int
rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev,
			 struct wireless_dev *wdev, u64 cookie)
{
B
Beni Lev 已提交
645 646 647 648 649
	int ret;
	trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
	ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
650 651 652 653 654 655
}

static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev,
				      struct net_device *dev, bool enabled,
				      int timeout)
{
B
Beni Lev 已提交
656 657 658 659 660
	int ret;
	trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
	ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
661 662 663 664 665 666
}

static inline int
rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev,
			 struct net_device *dev, s32 rssi_thold, u32 rssi_hyst)
{
B
Beni Lev 已提交
667 668 669 670 671 672 673
	int ret;
	trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
				       rssi_hyst);
	ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
				       rssi_hyst);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
674 675 676 677 678 679
}

static inline int
rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev,
			struct net_device *dev, u32 rate, u32 pkts, u32 intvl)
{
B
Beni Lev 已提交
680 681 682
	int ret;
	trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl);
	ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts,
683
					     intvl);
B
Beni Lev 已提交
684 685
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
686 687 688 689 690 691
}

static inline void
rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev,
			 struct wireless_dev *wdev, u16 frame_type, bool reg)
{
B
Beni Lev 已提交
692 693 694
	trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg);
	rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg);
	trace_rdev_return_void(&rdev->wiphy);
695 696 697 698 699
}

static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev,
				   u32 tx_ant, u32 rx_ant)
{
B
Beni Lev 已提交
700 701 702 703 704
	int ret;
	trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant);
	ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
705 706 707 708 709
}

static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev,
				   u32 *tx_ant, u32 *rx_ant)
{
B
Beni Lev 已提交
710 711 712 713 714 715 716 717 718
	int ret;
	trace_rdev_get_antenna(&rdev->wiphy);
	ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant);
	if (ret)
		trace_rdev_return_int(&rdev->wiphy, ret);
	else
		trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant,
					    *rx_ant);
	return ret;
719 720 721 722 723
}

static inline int rdev_set_ringparam(struct cfg80211_registered_device *rdev,
				     u32 tx, u32 rx)
{
B
Beni Lev 已提交
724 725 726 727 728
	int ret;
	trace_rdev_set_ringparam(&rdev->wiphy, tx, rx);
	ret = rdev->ops->set_ringparam(&rdev->wiphy, tx, rx);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
729 730 731 732 733 734
}

static inline void rdev_get_ringparam(struct cfg80211_registered_device *rdev,
				      u32 *tx, u32 *tx_max, u32 *rx,
				      u32 *rx_max)
{
B
Beni Lev 已提交
735
	trace_rdev_get_ringparam(&rdev->wiphy);
736
	rdev->ops->get_ringparam(&rdev->wiphy, tx, tx_max, rx, rx_max);
B
Beni Lev 已提交
737
	trace_rdev_return_void_tx_rx(&rdev->wiphy, *tx, *tx_max, *rx, *rx_max);
738 739 740 741 742 743 744
}

static inline int
rdev_sched_scan_start(struct cfg80211_registered_device *rdev,
		      struct net_device *dev,
		      struct cfg80211_sched_scan_request *request)
{
B
Beni Lev 已提交
745 746 747 748 749
	int ret;
	trace_rdev_sched_scan_start(&rdev->wiphy, dev, request);
	ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
750 751 752 753 754
}

static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev,
				       struct net_device *dev)
{
B
Beni Lev 已提交
755 756 757 758 759
	int ret;
	trace_rdev_sched_scan_stop(&rdev->wiphy, dev);
	ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
760 761 762 763 764 765
}

static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev,
				      struct net_device *dev,
				      struct cfg80211_gtk_rekey_data *data)
{
B
Beni Lev 已提交
766 767 768 769 770
	int ret;
	trace_rdev_set_rekey_data(&rdev->wiphy, dev);
	ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
771 772 773 774 775 776 777
}

static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *peer,
				 u8 action_code, u8 dialog_token,
				 u16 status_code, const u8 *buf, size_t len)
{
B
Beni Lev 已提交
778 779 780 781 782 783 784
	int ret;
	trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
			     dialog_token, status_code, buf, len);
	ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
				   dialog_token, status_code, buf, len);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
785 786 787 788 789 790
}

static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *peer,
				 enum nl80211_tdls_operation oper)
{
B
Beni Lev 已提交
791 792 793 794 795
	int ret;
	trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper);
	ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
796 797 798 799 800 801
}

static inline int rdev_probe_client(struct cfg80211_registered_device *rdev,
				    struct net_device *dev, const u8 *peer,
				    u64 *cookie)
{
B
Beni Lev 已提交
802 803 804 805 806
	int ret;
	trace_rdev_probe_client(&rdev->wiphy, dev, peer);
	ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie);
	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
	return ret;
807 808 809 810 811
}

static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev,
				     struct net_device *dev, u16 noack_map)
{
B
Beni Lev 已提交
812 813 814 815 816
	int ret;
	trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map);
	ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
817 818 819 820 821 822
}

static inline int
rdev_get_et_sset_count(struct cfg80211_registered_device *rdev,
		       struct net_device *dev, int sset)
{
B
Beni Lev 已提交
823 824 825 826 827
	int ret;
	trace_rdev_get_et_sset_count(&rdev->wiphy, dev, sset);
	ret = rdev->ops->get_et_sset_count(&rdev->wiphy, dev, sset);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
828 829 830 831 832 833
}

static inline void rdev_get_et_stats(struct cfg80211_registered_device *rdev,
				     struct net_device *dev,
				     struct ethtool_stats *stats, u64 *data)
{
B
Beni Lev 已提交
834
	trace_rdev_get_et_stats(&rdev->wiphy, dev);
835
	rdev->ops->get_et_stats(&rdev->wiphy, dev, stats, data);
B
Beni Lev 已提交
836
	trace_rdev_return_void(&rdev->wiphy);
837 838 839 840 841 842
}

static inline void rdev_get_et_strings(struct cfg80211_registered_device *rdev,
				       struct net_device *dev, u32 sset,
				       u8 *data)
{
B
Beni Lev 已提交
843
	trace_rdev_get_et_strings(&rdev->wiphy, dev, sset);
844
	rdev->ops->get_et_strings(&rdev->wiphy, dev, sset, data);
B
Beni Lev 已提交
845
	trace_rdev_return_void(&rdev->wiphy);
846 847
}

848 849 850 851
static inline int
rdev_get_channel(struct cfg80211_registered_device *rdev,
		 struct wireless_dev *wdev,
		 struct cfg80211_chan_def *chandef)
852
{
853 854
	int ret;

B
Beni Lev 已提交
855
	trace_rdev_get_channel(&rdev->wiphy, wdev);
856 857 858
	ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef);
	trace_rdev_return_chandef(&rdev->wiphy, ret, chandef);

B
Beni Lev 已提交
859
	return ret;
860 861
}

862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878
static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev,
					struct wireless_dev *wdev)
{
	int ret;

	trace_rdev_start_p2p_device(&rdev->wiphy, wdev);
	ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
}

static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev,
					struct wireless_dev *wdev)
{
	trace_rdev_stop_p2p_device(&rdev->wiphy, wdev);
	rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
	trace_rdev_return_void(&rdev->wiphy);
879
}
880 881 882 883 884 885 886 887 888 889 890 891

static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev,
				   struct net_device *dev,
				   struct cfg80211_acl_data *params)
{
	int ret;

	trace_rdev_set_mac_acl(&rdev->wiphy, dev, params);
	ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
}
892 893 894 895 896 897 898 899 900 901 902 903 904

static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev,
				     struct net_device *dev,
				     struct cfg80211_update_ft_ies_params *ftie)
{
	int ret;

	trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie);
	ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
}

905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926
static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev,
					struct wireless_dev *wdev,
					enum nl80211_crit_proto_id protocol,
					u16 duration)
{
	int ret;

	trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration);
	ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev,
					  protocol, duration);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
}

static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev,
				       struct wireless_dev *wdev)
{
	trace_rdev_crit_proto_stop(&rdev->wiphy, wdev);
	rdev->ops->crit_proto_stop(&rdev->wiphy, wdev);
	trace_rdev_return_void(&rdev->wiphy);
}

927 928 929 930 931 932 933 934 935 936 937 938
static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev,
				      struct net_device *dev,
				      struct cfg80211_csa_settings *params)
{
	int ret;

	trace_rdev_channel_switch(&rdev->wiphy, dev, params);
	ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
}

939
#endif /* __CFG80211_RDEV_OPS */