diff options
author | Andrei Otcheretianski <andrei.otcheretianski@intel.com> | 2013-11-18 12:06:49 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-12-02 05:51:52 -0500 |
commit | b176e629402f41f2b984d3aa842ddae23ed5562e (patch) | |
tree | d7bf11ae06d568756a3394ec3127f65e4f973eac /net/wireless | |
parent | 017b45bb5c5b40d9da1ea671aa8bc2eaec73675f (diff) |
cfg80211: aggregate mgmt_tx parameters into a struct
Change cfg80211 and mac80211 to use cfg80211_mgmt_tx_params
struct to aggregate parameters for mgmt_tx functions.
This makes the functions' signatures less clumsy and allows
less painful parameters extension.
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
[fix all other drivers]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/core.h | 5 | ||||
-rw-r--r-- | net/wireless/mlme.c | 12 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 32 | ||||
-rw-r--r-- | net/wireless/rdev-ops.h | 12 | ||||
-rw-r--r-- | net/wireless/trace.h | 15 |
5 files changed, 33 insertions, 43 deletions
diff --git a/net/wireless/core.h b/net/wireless/core.h index 2888867ee7c5..6716c5c3f748 100644 --- a/net/wireless/core.h +++ b/net/wireless/core.h | |||
@@ -317,9 +317,8 @@ void cfg80211_mlme_unregister_socket(struct wireless_dev *wdev, u32 nlpid); | |||
317 | void cfg80211_mlme_purge_registrations(struct wireless_dev *wdev); | 317 | void cfg80211_mlme_purge_registrations(struct wireless_dev *wdev); |
318 | int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, | 318 | int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, |
319 | struct wireless_dev *wdev, | 319 | struct wireless_dev *wdev, |
320 | struct ieee80211_channel *chan, bool offchan, | 320 | struct cfg80211_mgmt_tx_params *params, |
321 | unsigned int wait, const u8 *buf, size_t len, | 321 | u64 *cookie); |
322 | bool no_cck, bool dont_wait_for_ack, u64 *cookie); | ||
323 | void cfg80211_oper_and_ht_capa(struct ieee80211_ht_cap *ht_capa, | 322 | void cfg80211_oper_and_ht_capa(struct ieee80211_ht_cap *ht_capa, |
324 | const struct ieee80211_ht_cap *ht_capa_mask); | 323 | const struct ieee80211_ht_cap *ht_capa_mask); |
325 | void cfg80211_oper_and_vht_capa(struct ieee80211_vht_cap *vht_capa, | 324 | void cfg80211_oper_and_vht_capa(struct ieee80211_vht_cap *vht_capa, |
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index 31f541f7e4ea..52cca05044a8 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c | |||
@@ -520,9 +520,7 @@ void cfg80211_mlme_purge_registrations(struct wireless_dev *wdev) | |||
520 | 520 | ||
521 | int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, | 521 | int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, |
522 | struct wireless_dev *wdev, | 522 | struct wireless_dev *wdev, |
523 | struct ieee80211_channel *chan, bool offchan, | 523 | struct cfg80211_mgmt_tx_params *params, u64 *cookie) |
524 | unsigned int wait, const u8 *buf, size_t len, | ||
525 | bool no_cck, bool dont_wait_for_ack, u64 *cookie) | ||
526 | { | 524 | { |
527 | const struct ieee80211_mgmt *mgmt; | 525 | const struct ieee80211_mgmt *mgmt; |
528 | u16 stype; | 526 | u16 stype; |
@@ -533,10 +531,10 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, | |||
533 | if (!rdev->ops->mgmt_tx) | 531 | if (!rdev->ops->mgmt_tx) |
534 | return -EOPNOTSUPP; | 532 | return -EOPNOTSUPP; |
535 | 533 | ||
536 | if (len < 24 + 1) | 534 | if (params->len < 24 + 1) |
537 | return -EINVAL; | 535 | return -EINVAL; |
538 | 536 | ||
539 | mgmt = (const struct ieee80211_mgmt *) buf; | 537 | mgmt = (const struct ieee80211_mgmt *)params->buf; |
540 | 538 | ||
541 | if (!ieee80211_is_mgmt(mgmt->frame_control)) | 539 | if (!ieee80211_is_mgmt(mgmt->frame_control)) |
542 | return -EINVAL; | 540 | return -EINVAL; |
@@ -615,9 +613,7 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, | |||
615 | return -EINVAL; | 613 | return -EINVAL; |
616 | 614 | ||
617 | /* Transmit the Action frame as requested by user space */ | 615 | /* Transmit the Action frame as requested by user space */ |
618 | return rdev_mgmt_tx(rdev, wdev, chan, offchan, | 616 | return rdev_mgmt_tx(rdev, wdev, params, cookie); |
619 | wait, buf, len, no_cck, dont_wait_for_ack, | ||
620 | cookie); | ||
621 | } | 617 | } |
622 | 618 | ||
623 | bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_mbm, | 619 | bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_mbm, |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 8c83fbb3824f..703155b1aa7a 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -7428,10 +7428,10 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info) | |||
7428 | void *hdr = NULL; | 7428 | void *hdr = NULL; |
7429 | u64 cookie; | 7429 | u64 cookie; |
7430 | struct sk_buff *msg = NULL; | 7430 | struct sk_buff *msg = NULL; |
7431 | unsigned int wait = 0; | 7431 | struct cfg80211_mgmt_tx_params params = { |
7432 | bool offchan, no_cck, dont_wait_for_ack; | 7432 | .dont_wait_for_ack = |
7433 | 7433 | info->attrs[NL80211_ATTR_DONT_WAIT_FOR_ACK], | |
7434 | dont_wait_for_ack = info->attrs[NL80211_ATTR_DONT_WAIT_FOR_ACK]; | 7434 | }; |
7435 | 7435 | ||
7436 | if (!info->attrs[NL80211_ATTR_FRAME]) | 7436 | if (!info->attrs[NL80211_ATTR_FRAME]) |
7437 | return -EINVAL; | 7437 | return -EINVAL; |
@@ -7458,24 +7458,24 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info) | |||
7458 | if (info->attrs[NL80211_ATTR_DURATION]) { | 7458 | if (info->attrs[NL80211_ATTR_DURATION]) { |
7459 | if (!(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) | 7459 | if (!(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) |
7460 | return -EINVAL; | 7460 | return -EINVAL; |
7461 | wait = nla_get_u32(info->attrs[NL80211_ATTR_DURATION]); | 7461 | params.wait = nla_get_u32(info->attrs[NL80211_ATTR_DURATION]); |
7462 | 7462 | ||
7463 | /* | 7463 | /* |
7464 | * We should wait on the channel for at least a minimum amount | 7464 | * We should wait on the channel for at least a minimum amount |
7465 | * of time (10ms) but no longer than the driver supports. | 7465 | * of time (10ms) but no longer than the driver supports. |
7466 | */ | 7466 | */ |
7467 | if (wait < NL80211_MIN_REMAIN_ON_CHANNEL_TIME || | 7467 | if (params.wait < NL80211_MIN_REMAIN_ON_CHANNEL_TIME || |
7468 | wait > rdev->wiphy.max_remain_on_channel_duration) | 7468 | params.wait > rdev->wiphy.max_remain_on_channel_duration) |
7469 | return -EINVAL; | 7469 | return -EINVAL; |
7470 | 7470 | ||
7471 | } | 7471 | } |
7472 | 7472 | ||
7473 | offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK]; | 7473 | params.offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK]; |
7474 | 7474 | ||
7475 | if (offchan && !(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) | 7475 | if (params.offchan && !(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) |
7476 | return -EINVAL; | 7476 | return -EINVAL; |
7477 | 7477 | ||
7478 | no_cck = nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); | 7478 | params.no_cck = nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); |
7479 | 7479 | ||
7480 | /* get the channel if any has been specified, otherwise pass NULL to | 7480 | /* get the channel if any has been specified, otherwise pass NULL to |
7481 | * the driver. The latter will use the current one | 7481 | * the driver. The latter will use the current one |
@@ -7487,10 +7487,10 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info) | |||
7487 | return err; | 7487 | return err; |
7488 | } | 7488 | } |
7489 | 7489 | ||
7490 | if (!chandef.chan && offchan) | 7490 | if (!chandef.chan && params.offchan) |
7491 | return -EINVAL; | 7491 | return -EINVAL; |
7492 | 7492 | ||
7493 | if (!dont_wait_for_ack) { | 7493 | if (!params.dont_wait_for_ack) { |
7494 | msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); | 7494 | msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); |
7495 | if (!msg) | 7495 | if (!msg) |
7496 | return -ENOMEM; | 7496 | return -ENOMEM; |
@@ -7503,10 +7503,10 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info) | |||
7503 | } | 7503 | } |
7504 | } | 7504 | } |
7505 | 7505 | ||
7506 | err = cfg80211_mlme_mgmt_tx(rdev, wdev, chandef.chan, offchan, wait, | 7506 | params.buf = nla_data(info->attrs[NL80211_ATTR_FRAME]); |
7507 | nla_data(info->attrs[NL80211_ATTR_FRAME]), | 7507 | params.len = nla_len(info->attrs[NL80211_ATTR_FRAME]); |
7508 | nla_len(info->attrs[NL80211_ATTR_FRAME]), | 7508 | params.chan = chandef.chan; |
7509 | no_cck, dont_wait_for_ack, &cookie); | 7509 | err = cfg80211_mlme_mgmt_tx(rdev, wdev, ¶ms, &cookie); |
7510 | if (err) | 7510 | if (err) |
7511 | goto free_msg; | 7511 | goto free_msg; |
7512 | 7512 | ||
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h index 37ce9fdfe934..a6c03ab14a0d 100644 --- a/net/wireless/rdev-ops.h +++ b/net/wireless/rdev-ops.h | |||
@@ -624,16 +624,12 @@ rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, | |||
624 | 624 | ||
625 | static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, | 625 | static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, |
626 | struct wireless_dev *wdev, | 626 | struct wireless_dev *wdev, |
627 | struct ieee80211_channel *chan, bool offchan, | 627 | struct cfg80211_mgmt_tx_params *params, |
628 | unsigned int wait, const u8 *buf, size_t len, | 628 | u64 *cookie) |
629 | bool no_cck, bool dont_wait_for_ack, u64 *cookie) | ||
630 | { | 629 | { |
631 | int ret; | 630 | int ret; |
632 | trace_rdev_mgmt_tx(&rdev->wiphy, wdev, chan, offchan, | 631 | trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); |
633 | wait, no_cck, dont_wait_for_ack); | 632 | ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); |
634 | ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, chan, offchan, | ||
635 | wait, buf, len, no_cck, | ||
636 | dont_wait_for_ack, cookie); | ||
637 | trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); | 633 | trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); |
638 | return ret; | 634 | return ret; |
639 | } | 635 | } |
diff --git a/net/wireless/trace.h b/net/wireless/trace.h index ba5f0d6614d5..f7aa7a72d9bc 100644 --- a/net/wireless/trace.h +++ b/net/wireless/trace.h | |||
@@ -1653,9 +1653,8 @@ TRACE_EVENT(rdev_cancel_remain_on_channel, | |||
1653 | 1653 | ||
1654 | TRACE_EVENT(rdev_mgmt_tx, | 1654 | TRACE_EVENT(rdev_mgmt_tx, |
1655 | TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, | 1655 | TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, |
1656 | struct ieee80211_channel *chan, bool offchan, | 1656 | struct cfg80211_mgmt_tx_params *params), |
1657 | unsigned int wait, bool no_cck, bool dont_wait_for_ack), | 1657 | TP_ARGS(wiphy, wdev, params), |
1658 | TP_ARGS(wiphy, wdev, chan, offchan, wait, no_cck, dont_wait_for_ack), | ||
1659 | TP_STRUCT__entry( | 1658 | TP_STRUCT__entry( |
1660 | WIPHY_ENTRY | 1659 | WIPHY_ENTRY |
1661 | WDEV_ENTRY | 1660 | WDEV_ENTRY |
@@ -1668,11 +1667,11 @@ TRACE_EVENT(rdev_mgmt_tx, | |||
1668 | TP_fast_assign( | 1667 | TP_fast_assign( |
1669 | WIPHY_ASSIGN; | 1668 | WIPHY_ASSIGN; |
1670 | WDEV_ASSIGN; | 1669 | WDEV_ASSIGN; |
1671 | CHAN_ASSIGN(chan); | 1670 | CHAN_ASSIGN(params->chan); |
1672 | __entry->offchan = offchan; | 1671 | __entry->offchan = params->offchan; |
1673 | __entry->wait = wait; | 1672 | __entry->wait = params->wait; |
1674 | __entry->no_cck = no_cck; | 1673 | __entry->no_cck = params->no_cck; |
1675 | __entry->dont_wait_for_ack = dont_wait_for_ack; | 1674 | __entry->dont_wait_for_ack = params->dont_wait_for_ack; |
1676 | ), | 1675 | ), |
1677 | TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", " CHAN_PR_FMT ", offchan: %s," | 1676 | TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", " CHAN_PR_FMT ", offchan: %s," |
1678 | " wait: %u, no cck: %s, dont wait for ack: %s", | 1677 | " wait: %u, no cck: %s, dont wait for ack: %s", |