rdev-ops.h 29.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"
Beni Lev's avatar
Beni Lev committed
7
#include "trace.h"
8

9 10
static inline int rdev_suspend(struct cfg80211_registered_device *rdev,
			       struct cfg80211_wowlan *wowlan)
11
{
Beni Lev's avatar
Beni Lev committed
12
	int ret;
13 14
	trace_rdev_suspend(&rdev->wiphy, wowlan);
	ret = rdev->ops->suspend(&rdev->wiphy, wowlan);
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
31
	trace_rdev_set_wakeup(&rdev->wiphy, enabled);
32
	rdev->ops->set_wakeup(&rdev->wiphy, enabled);
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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);
Beni Lev's avatar
Beni Lev committed
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*))
{
Beni Lev's avatar
Beni Lev committed
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);
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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);
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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);
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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);
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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)
{
Beni Lev's avatar
Beni Lev committed
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
}

static inline int rdev_del_station(struct cfg80211_registered_device *rdev,
181 182
				   struct net_device *dev,
				   struct station_del_parameters *params)
183
{
Beni Lev's avatar
Beni Lev committed
184
	int ret;
185 186
	trace_rdev_del_station(&rdev->wiphy, dev, params);
	ret = rdev->ops->del_station(&rdev->wiphy, dev, params);
Beni Lev's avatar
Beni Lev committed
187 188
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
189 190 191 192 193 194
}

static inline int rdev_change_station(struct cfg80211_registered_device *rdev,
				      struct net_device *dev, u8 *mac,
				      struct station_parameters *params)
{
Beni Lev's avatar
Beni Lev committed
195 196 197 198 199
	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;
200 201 202
}

static inline int rdev_get_station(struct cfg80211_registered_device *rdev,
203
				   struct net_device *dev, const u8 *mac,
204 205
				   struct station_info *sinfo)
{
Beni Lev's avatar
Beni Lev committed
206 207 208 209 210
	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;
211 212 213 214 215 216
}

static inline int rdev_dump_station(struct cfg80211_registered_device *rdev,
				    struct net_device *dev, int idx, u8 *mac,
				    struct station_info *sinfo)
{
Beni Lev's avatar
Beni Lev committed
217 218 219 220 221
	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;
222 223 224 225 226
}

static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *dst, u8 *next_hop)
{
Beni Lev's avatar
Beni Lev committed
227 228 229 230 231
	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;
232 233 234 235 236
}

static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *dst)
{
Beni Lev's avatar
Beni Lev committed
237 238 239 240 241
	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;
242 243 244 245 246 247
}

static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev,
				    struct net_device *dev, u8 *dst,
				    u8 *next_hop)
{
Beni Lev's avatar
Beni Lev committed
248 249 250 251 252
	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;
253 254 255 256 257 258
}

static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *dst, u8 *next_hop,
				 struct mpath_info *pinfo)
{
Beni Lev's avatar
Beni Lev committed
259 260 261 262 263 264
	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;

265 266
}

267 268 269 270 271 272 273 274 275 276 277 278
static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev,
			       struct net_device *dev, u8 *dst, u8 *mpp,
			       struct mpath_info *pinfo)
{
	int ret;

	trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp);
	ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo);
	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
	return ret;
}

279 280 281 282 283
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)

{
Beni Lev's avatar
Beni Lev committed
284 285 286
	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,
287 288 289 290 291 292 293 294 295 296 297 298 299 300
				    pinfo);
	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
	return ret;
}

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

{
	int ret;

	trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp);
	ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo);
Beni Lev's avatar
Beni Lev committed
301 302
	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
	return ret;
303 304 305 306 307 308
}

static inline int
rdev_get_mesh_config(struct cfg80211_registered_device *rdev,
		     struct net_device *dev, struct mesh_config *conf)
{
Beni Lev's avatar
Beni Lev committed
309 310 311 312 313
	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;
314 315 316 317 318 319 320
}

static inline int
rdev_update_mesh_config(struct cfg80211_registered_device *rdev,
			struct net_device *dev, u32 mask,
			const struct mesh_config *nconf)
{
Beni Lev's avatar
Beni Lev committed
321 322 323 324 325
	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;
326 327 328 329 330 331 332
}

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)
{
Beni Lev's avatar
Beni Lev committed
333 334 335 336 337
	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;
338 339 340 341 342 343
}


static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev,
				  struct net_device *dev)
{
Beni Lev's avatar
Beni Lev committed
344 345 346 347 348
	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;
349 350
}

351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371
static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev,
				struct net_device *dev,
				struct ocb_setup *setup)
{
	int ret;
	trace_rdev_join_ocb(&rdev->wiphy, dev, setup);
	ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
}

static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev,
				 struct net_device *dev)
{
	int ret;
	trace_rdev_leave_ocb(&rdev->wiphy, dev);
	ret = rdev->ops->leave_ocb(&rdev->wiphy, dev);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
}

372 373 374 375 376
static inline int rdev_change_bss(struct cfg80211_registered_device *rdev,
				  struct net_device *dev,
				  struct bss_parameters *params)

{
Beni Lev's avatar
Beni Lev committed
377 378 379 380 381
	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;
382 383 384 385 386 387 388
}

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

{
Beni Lev's avatar
Beni Lev committed
389 390 391 392 393
	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;
394 395 396 397 398 399 400
}

static inline int
rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev,
			       struct net_device *dev,
			       struct ieee80211_channel *chan)
{
Beni Lev's avatar
Beni Lev committed
401 402 403 404 405
	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;
406 407 408 409
}

static inline int
rdev_set_monitor_channel(struct cfg80211_registered_device *rdev,
410
			 struct cfg80211_chan_def *chandef)
411
{
Beni Lev's avatar
Beni Lev committed
412
	int ret;
413 414
	trace_rdev_set_monitor_channel(&rdev->wiphy, chandef);
	ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef);
Beni Lev's avatar
Beni Lev committed
415 416
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
417 418 419 420 421
}

static inline int rdev_scan(struct cfg80211_registered_device *rdev,
			    struct cfg80211_scan_request *request)
{
Beni Lev's avatar
Beni Lev committed
422 423 424 425 426
	int ret;
	trace_rdev_scan(&rdev->wiphy, request);
	ret = rdev->ops->scan(&rdev->wiphy, request);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
427 428 429 430 431 432
}

static inline int rdev_auth(struct cfg80211_registered_device *rdev,
			    struct net_device *dev,
			    struct cfg80211_auth_request *req)
{
Beni Lev's avatar
Beni Lev committed
433 434 435 436 437
	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;
438 439 440 441 442 443
}

static inline int rdev_assoc(struct cfg80211_registered_device *rdev,
			     struct net_device *dev,
			     struct cfg80211_assoc_request *req)
{
Beni Lev's avatar
Beni Lev committed
444 445 446 447 448
	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;
449 450 451 452 453 454
}

static inline int rdev_deauth(struct cfg80211_registered_device *rdev,
			      struct net_device *dev,
			      struct cfg80211_deauth_request *req)
{
Beni Lev's avatar
Beni Lev committed
455 456 457 458 459
	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;
460 461 462 463 464 465
}

static inline int rdev_disassoc(struct cfg80211_registered_device *rdev,
				struct net_device *dev,
				struct cfg80211_disassoc_request *req)
{
Beni Lev's avatar
Beni Lev committed
466 467 468 469 470
	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;
471 472 473 474 475 476
}

static inline int rdev_connect(struct cfg80211_registered_device *rdev,
			       struct net_device *dev,
			       struct cfg80211_connect_params *sme)
{
Beni Lev's avatar
Beni Lev committed
477 478 479 480 481
	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;
482 483 484 485 486
}

static inline int rdev_disconnect(struct cfg80211_registered_device *rdev,
				  struct net_device *dev, u16 reason_code)
{
Beni Lev's avatar
Beni Lev committed
487 488 489 490 491
	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;
492 493 494 495 496 497
}

static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev,
				 struct net_device *dev,
				 struct cfg80211_ibss_params *params)
{
Beni Lev's avatar
Beni Lev committed
498 499 500 501 502
	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;
503 504 505 506 507
}

static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev,
				  struct net_device *dev)
{
Beni Lev's avatar
Beni Lev committed
508 509 510 511 512
	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;
513 514 515 516 517
}

static inline int
rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed)
{
Beni Lev's avatar
Beni Lev committed
518 519 520 521 522
	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;
523 524 525
}

static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev,
526
				    struct wireless_dev *wdev,
527 528
				    enum nl80211_tx_power_setting type, int mbm)
{
Beni Lev's avatar
Beni Lev committed
529
	int ret;
530 531
	trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm);
	ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm);
Beni Lev's avatar
Beni Lev committed
532 533
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
534 535 536
}

static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev,
537
				    struct wireless_dev *wdev, int *dbm)
538
{
Beni Lev's avatar
Beni Lev committed
539
	int ret;
540 541
	trace_rdev_get_tx_power(&rdev->wiphy, wdev);
	ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm);
Beni Lev's avatar
Beni Lev committed
542 543
	trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm);
	return ret;
544 545 546 547 548
}

static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev,
				    struct net_device *dev, const u8 *addr)
{
Beni Lev's avatar
Beni Lev committed
549 550 551 552 553
	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;
554 555 556 557
}

static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev)
{
Beni Lev's avatar
Beni Lev committed
558
	trace_rdev_rfkill_poll(&rdev->wiphy);
559
	rdev->ops->rfkill_poll(&rdev->wiphy);
Beni Lev's avatar
Beni Lev committed
560
	trace_rdev_return_void(&rdev->wiphy);
561 562 563 564 565
}


#ifdef CONFIG_NL80211_TESTMODE
static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev,
566
				    struct wireless_dev *wdev,
567 568
				    void *data, int len)
{
Beni Lev's avatar
Beni Lev committed
569
	int ret;
570 571
	trace_rdev_testmode_cmd(&rdev->wiphy, wdev);
	ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len);
Beni Lev's avatar
Beni Lev committed
572 573
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
574 575 576 577 578 579 580
}

static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev,
				     struct sk_buff *skb,
				     struct netlink_callback *cb, void *data,
				     int len)
{
Beni Lev's avatar
Beni Lev committed
581 582 583 584 585
	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;
586 587 588 589 590 591 592 593
}
#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)
{
Beni Lev's avatar
Beni Lev committed
594 595 596 597 598
	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;
599 600 601 602 603 604
}

static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev,
				   struct net_device *netdev, int idx,
				   struct survey_info *info)
{
Beni Lev's avatar
Beni Lev committed
605 606 607 608 609 610 611 612
	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;
613 614 615 616 617 618
}

static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev,
				 struct net_device *netdev,
				 struct cfg80211_pmksa *pmksa)
{
Beni Lev's avatar
Beni Lev committed
619 620 621 622 623
	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;
624 625 626 627 628 629
}

static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev,
				 struct net_device *netdev,
				 struct cfg80211_pmksa *pmksa)
{
Beni Lev's avatar
Beni Lev committed
630 631 632 633 634
	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;
635 636 637 638 639
}

static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev,
				   struct net_device *netdev)
{
Beni Lev's avatar
Beni Lev committed
640 641 642 643 644
	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;
645 646 647 648 649 650 651 652
}

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)
{
Beni Lev's avatar
Beni Lev committed
653
	int ret;
654
	trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration);
Beni Lev's avatar
Beni Lev committed
655
	ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan,
656
					   duration, cookie);
Beni Lev's avatar
Beni Lev committed
657 658
	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
	return ret;
659 660 661 662 663 664
}

static inline int
rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev,
			      struct wireless_dev *wdev, u64 cookie)
{
Beni Lev's avatar
Beni Lev committed
665 666 667 668 669
	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;
670 671 672 673
}

static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev,
			       struct wireless_dev *wdev,
674 675
			       struct cfg80211_mgmt_tx_params *params,
			       u64 *cookie)
676
{
Beni Lev's avatar
Beni Lev committed
677
	int ret;
678 679
	trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params);
	ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie);
Beni Lev's avatar
Beni Lev committed
680 681
	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
	return ret;
682 683 684 685 686 687
}

static inline int
rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev,
			 struct wireless_dev *wdev, u64 cookie)
{
Beni Lev's avatar
Beni Lev committed
688 689 690 691 692
	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;
693 694 695 696 697 698
}

static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev,
				      struct net_device *dev, bool enabled,
				      int timeout)
{
Beni Lev's avatar
Beni Lev committed
699 700 701 702 703
	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;
704 705 706 707 708 709
}

static inline int
rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev,
			 struct net_device *dev, s32 rssi_thold, u32 rssi_hyst)
{
Beni Lev's avatar
Beni Lev committed
710 711 712 713 714 715 716
	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;
717 718 719 720 721 722
}

static inline int
rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev,
			struct net_device *dev, u32 rate, u32 pkts, u32 intvl)
{
Beni Lev's avatar
Beni Lev committed
723 724 725
	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,
726
					     intvl);
Beni Lev's avatar
Beni Lev committed
727 728
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
729 730 731 732 733 734
}

static inline void
rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev,
			 struct wireless_dev *wdev, u16 frame_type, bool reg)
{
Beni Lev's avatar
Beni Lev committed
735 736 737
	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);
738 739 740 741 742
}

static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev,
				   u32 tx_ant, u32 rx_ant)
{
Beni Lev's avatar
Beni Lev committed
743 744 745 746 747
	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;
748 749 750 751 752
}

static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev,
				   u32 *tx_ant, u32 *rx_ant)
{
Beni Lev's avatar
Beni Lev committed
753 754 755 756 757 758 759 760 761
	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;
762 763 764 765 766 767 768
}

static inline int
rdev_sched_scan_start(struct cfg80211_registered_device *rdev,
		      struct net_device *dev,
		      struct cfg80211_sched_scan_request *request)
{
Beni Lev's avatar
Beni Lev committed
769 770 771 772 773
	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;
774 775 776 777 778
}

static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev,
				       struct net_device *dev)
{
Beni Lev's avatar
Beni Lev committed
779 780 781 782 783
	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;
784 785 786 787 788 789
}

static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev,
				      struct net_device *dev,
				      struct cfg80211_gtk_rekey_data *data)
{
Beni Lev's avatar
Beni Lev committed
790 791 792 793 794
	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;
795 796 797 798 799
}

static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *peer,
				 u8 action_code, u8 dialog_token,
800
				 u16 status_code, u32 peer_capability,
801
				 bool initiator, const u8 *buf, size_t len)
802
{
Beni Lev's avatar
Beni Lev committed
803 804
	int ret;
	trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
805
			     dialog_token, status_code, peer_capability,
806
			     initiator, buf, len);
Beni Lev's avatar
Beni Lev committed
807
	ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
808
				   dialog_token, status_code, peer_capability,
809
				   initiator, buf, len);
Beni Lev's avatar
Beni Lev committed
810 811
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
812 813 814 815 816 817
}

static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev,
				 struct net_device *dev, u8 *peer,
				 enum nl80211_tdls_operation oper)
{
Beni Lev's avatar
Beni Lev committed
818 819 820 821 822
	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;
823 824 825 826 827 828
}

static inline int rdev_probe_client(struct cfg80211_registered_device *rdev,
				    struct net_device *dev, const u8 *peer,
				    u64 *cookie)
{
Beni Lev's avatar
Beni Lev committed
829 830 831 832 833
	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;
834 835 836 837 838
}

static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev,
				     struct net_device *dev, u16 noack_map)
{
Beni Lev's avatar
Beni Lev committed
839 840 841 842 843
	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;
844 845
}

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

Beni Lev's avatar
Beni Lev committed
853
	trace_rdev_get_channel(&rdev->wiphy, wdev);
854 855 856
	ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef);
	trace_rdev_return_chandef(&rdev->wiphy, ret, chandef);

Beni Lev's avatar
Beni Lev committed
857
	return ret;
858 859
}

860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876
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);
877
}
878 879 880 881 882 883 884 885 886 887 888 889

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;
}
890 891 892 893 894 895 896 897 898 899 900 901 902

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;
}

903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924
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);
}

925 926 927 928 929 930 931 932 933 934 935 936
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;
}

937 938 939 940 941 942 943 944 945 946 947 948 949 950 951
static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev,
				   struct net_device *dev,
				   struct cfg80211_qos_map *qos_map)
{
	int ret = -EOPNOTSUPP;

	if (rdev->ops->set_qos_map) {
		trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map);
		ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map);
		trace_rdev_return_int(&rdev->wiphy, ret);
	}

	return ret;
}

952 953 954 955 956 957 958 959 960 961 962 963 964
static inline int
rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev,
		      struct net_device *dev, struct cfg80211_chan_def *chandef)
{
	int ret;

	trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef);
	ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef);
	trace_rdev_return_int(&rdev->wiphy, ret);

	return ret;
}

965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995
static inline int
rdev_add_tx_ts(struct cfg80211_registered_device *rdev,
	       struct net_device *dev, u8 tsid, const u8 *peer,
	       u8 user_prio, u16 admitted_time)
{
	int ret = -EOPNOTSUPP;

	trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer,
			     user_prio, admitted_time);
	if (rdev->ops->add_tx_ts)
		ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer,
					   user_prio, admitted_time);
	trace_rdev_return_int(&rdev->wiphy, ret);

	return ret;
}

static inline int
rdev_del_tx_ts(struct cfg80211_registered_device *rdev,
	       struct net_device *dev, u8 tsid, const u8 *peer)
{
	int ret = -EOPNOTSUPP;

	trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer);
	if (rdev->ops->del_tx_ts)
		ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer);
	trace_rdev_return_int(&rdev->wiphy, ret);

	return ret;
}

996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019
static inline int
rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev,
			 struct net_device *dev, const u8 *addr,
			 u8 oper_class, struct cfg80211_chan_def *chandef)
{
	int ret;

	trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class,
				       chandef);
	ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr,
					     oper_class, chandef);
	trace_rdev_return_int(&rdev->wiphy, ret);
	return ret;
}

static inline void
rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev,
				struct net_device *dev, const u8 *addr)
{
	trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
	rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
	trace_rdev_return_void(&rdev->wiphy);
}

1020
#endif /* __CFG80211_RDEV_OPS */