Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 225343
b: refs/heads/master
c: 7f531e0
h: refs/heads/master
i:
  225341: c553f78
  225339: 2cd5025
  225335: deb4cbb
  225327: 4986116
  225311: 506f478
  225279: 0c33c89
v: v3
  • Loading branch information
Bruno Randolf authored and John W. Linville committed Dec 20, 2010
1 parent 51af6ac commit 2e305ac
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c7108a7111cd9e592d6ad498be37276dbea75d2b
refs/heads/master: 7f531e03abf0162df3966c4fa5fa6fdd9302cb6b
12 changes: 9 additions & 3 deletions trunk/include/net/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1482,8 +1482,13 @@ struct ieee80211_txrx_stypes {
* transmitted through nl80211, points to an array indexed by interface
* type
*
* @available_antennas: bitmap of antennas which are available to configure.
* antenna configuration commands will be rejected unless this is set.
* @available_antennas_tx: bitmap of antennas which are available to be
* configured as TX antennas. Antenna configuration commands will be
* rejected unless this or @available_antennas_rx is set.
*
* @available_antennas_rx: bitmap of antennas which are available to be
* configured as RX antennas. Antenna configuration commands will be
* rejected unless this or @available_antennas_tx is set.
*
* @max_remain_on_channel_duration: Maximum time a remain-on-channel operation
* may request, if implemented.
Expand Down Expand Up @@ -1528,7 +1533,8 @@ struct wiphy {

u8 max_num_pmkids;

u32 available_antennas;
u32 available_antennas_tx;
u32 available_antennas_rx;

/* If multiple wiphys are registered and you're handed e.g.
* a regular netdev with assigned ieee80211_ptr, you won't
Expand Down
17 changes: 10 additions & 7 deletions trunk/net/wireless/nl80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,8 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
if (dev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL)
NLA_PUT_FLAG(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE);

if (dev->wiphy.available_antennas && dev->ops->get_antenna) {
if ((dev->wiphy.available_antennas_tx ||
dev->wiphy.available_antennas_rx) && dev->ops->get_antenna) {
u32 tx_ant = 0, rx_ant = 0;
int res;
res = dev->ops->get_antenna(&dev->wiphy, &tx_ant, &rx_ant);
Expand Down Expand Up @@ -1107,7 +1108,9 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] &&
info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]) {
u32 tx_ant, rx_ant;
if (!rdev->wiphy.available_antennas || !rdev->ops->set_antenna) {
if ((!rdev->wiphy.available_antennas_tx &&
!rdev->wiphy.available_antennas_rx) ||
!rdev->ops->set_antenna) {
result = -EOPNOTSUPP;
goto bad_res;
}
Expand All @@ -1116,15 +1119,15 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
rx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]);

/* reject antenna configurations which don't match the
* available antenna mask, except for the "all" mask */
if ((~tx_ant && (tx_ant & ~rdev->wiphy.available_antennas)) ||
(~rx_ant && (rx_ant & ~rdev->wiphy.available_antennas))) {
* available antenna masks, except for the "all" mask */
if ((~tx_ant && (tx_ant & ~rdev->wiphy.available_antennas_tx)) ||
(~rx_ant && (rx_ant & ~rdev->wiphy.available_antennas_rx))) {
result = -EINVAL;
goto bad_res;
}

tx_ant = tx_ant & rdev->wiphy.available_antennas;
rx_ant = rx_ant & rdev->wiphy.available_antennas;
tx_ant = tx_ant & rdev->wiphy.available_antennas_tx;
rx_ant = rx_ant & rdev->wiphy.available_antennas_rx;

result = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant);
if (result)
Expand Down

0 comments on commit 2e305ac

Please sign in to comment.