diff options
author | David S. Miller <davem@davemloft.net> | 2011-05-25 13:28:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-05-25 13:28:55 -0400 |
commit | 22e95ac87d62bdc65b8a694a23cd4a364689b013 (patch) | |
tree | 5ac900300ad1d4a8d8118545e3e971862de70ea4 /drivers/net/wireless/ath | |
parent | 6b3678354647a653e669746c05765f05d2b90239 (diff) | |
parent | 31ec97d9cebac804814de298592648f7c18d8281 (diff) |
Merge branch 'for-davem' of ssh://master.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Diffstat (limited to 'drivers/net/wireless/ath')
69 files changed, 253 insertions, 144 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ahb.c b/drivers/net/wireless/ath/ath9k/ahb.c index 61956392f2da..5b49cd03bfdf 100644 --- a/drivers/net/wireless/ath/ath9k/ahb.c +++ b/drivers/net/wireless/ath/ath9k/ahb.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * Copyright (c) 2009 Gabor Juhos <juhosg@openwrt.org> | 3 | * Copyright (c) 2009 Gabor Juhos <juhosg@openwrt.org> |
4 | * Copyright (c) 2009 Imre Kaloz <kaloz@openwrt.org> | 4 | * Copyright (c) 2009 Imre Kaloz <kaloz@openwrt.org> |
5 | * | 5 | * |
diff --git a/drivers/net/wireless/ath/ath9k/ani.c b/drivers/net/wireless/ath/ath9k/ani.c index 5a1f4f511bc1..bfb6481f01f9 100644 --- a/drivers/net/wireless/ath/ath9k/ani.c +++ b/drivers/net/wireless/ath/ath9k/ani.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ani.h b/drivers/net/wireless/ath/ath9k/ani.h index 0cd6783de883..dbab5b9ce494 100644 --- a/drivers/net/wireless/ath/ath9k/ani.h +++ b/drivers/net/wireless/ath/ath9k/ani.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_initvals.h b/drivers/net/wireless/ath/ath9k/ar5008_initvals.h index 36f7d0639db3..234617c948a1 100644 --- a/drivers/net/wireless/ath/ath9k/ar5008_initvals.h +++ b/drivers/net/wireless/ath/ath9k/ar5008_initvals.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c index 4bf9dab4f2b3..441bb33f17ad 100644 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9001_initvals.h b/drivers/net/wireless/ath/ath9k/ar9001_initvals.h index 69a94c7e45cb..6d2e2f3303f9 100644 --- a/drivers/net/wireless/ath/ath9k/ar9001_initvals.h +++ b/drivers/net/wireless/ath/ath9k/ar9001_initvals.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_calib.c b/drivers/net/wireless/ath/ath9k/ar9002_calib.c index cb611b287b35..015d97439935 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c index f44c84ab5dce..f344cc2b3d59 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_initvals.h b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h index 6203eed860dd..7573257731b6 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_initvals.h +++ b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_mac.c b/drivers/net/wireless/ath/ath9k/ar9002_mac.c index 7a332f16b79a..077e8a6983fa 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_mac.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c index a57e963cf0dc..2fe0a34cbabc 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.h b/drivers/net/wireless/ath/ath9k/ar9002_phy.h index 47780ef1c892..453af6dc514b 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_phy.h +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h index f915a3dbfcad..e8ac70da5ac7 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c index f276cb922b4d..f48051c50092 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c index d985841ff401..0ca7635d0669 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h index afb0b5ee1865..ab21a4915981 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h | |||
@@ -1,3 +1,19 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2010-2011 Atheros Communications Inc. | ||
3 | * | ||
4 | * Permission to use, copy, modify, and/or distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
11 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
13 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
14 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | |||
1 | #ifndef AR9003_EEPROM_H | 17 | #ifndef AR9003_EEPROM_H |
2 | #define AR9003_EEPROM_H | 18 | #define AR9003_EEPROM_H |
3 | 19 | ||
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c index a55eddbb2589..392bf0f8ff16 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c index be6adec33ddb..10d71f7d3fc2 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.h b/drivers/net/wireless/ath/ath9k/ar9003_mac.h index 45cc7e80436c..c50449387bf1 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c index 356d2fd78822..e4d6a87ec538 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c index 25f3c2fdf2bc..eee23ecd118a 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h index c7505b48e5c0..443090d278e3 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2002-2010 Atheros Communications, Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications, Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ar9485_initvals.h b/drivers/net/wireless/ath/ath9k/ar9485_initvals.h index fbdde29f0ab8..611ea6ce8508 100644 --- a/drivers/net/wireless/ath/ath9k/ar9485_initvals.h +++ b/drivers/net/wireless/ath/ath9k/ar9485_initvals.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 03b37d7be1c3..f75068b4b310 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -397,6 +397,9 @@ struct ath_beacon { | |||
397 | struct ath_descdma bdma; | 397 | struct ath_descdma bdma; |
398 | struct ath_txq *cabq; | 398 | struct ath_txq *cabq; |
399 | struct list_head bbuf; | 399 | struct list_head bbuf; |
400 | |||
401 | bool tx_processed; | ||
402 | bool tx_last; | ||
400 | }; | 403 | }; |
401 | 404 | ||
402 | void ath_beacon_tasklet(unsigned long data); | 405 | void ath_beacon_tasklet(unsigned long data); |
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c index 637dbc5f7b67..d4d8ceced89b 100644 --- a/drivers/net/wireless/ath/ath9k/beacon.c +++ b/drivers/net/wireless/ath/ath9k/beacon.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -18,6 +18,12 @@ | |||
18 | 18 | ||
19 | #define FUDGE 2 | 19 | #define FUDGE 2 |
20 | 20 | ||
21 | static void ath9k_reset_beacon_status(struct ath_softc *sc) | ||
22 | { | ||
23 | sc->beacon.tx_processed = false; | ||
24 | sc->beacon.tx_last = false; | ||
25 | } | ||
26 | |||
21 | /* | 27 | /* |
22 | * This function will modify certain transmit queue properties depending on | 28 | * This function will modify certain transmit queue properties depending on |
23 | * the operating mode of the station (AP or AdHoc). Parameters are AIFS | 29 | * the operating mode of the station (AP or AdHoc). Parameters are AIFS |
@@ -72,6 +78,8 @@ static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp, | |||
72 | struct ieee80211_supported_band *sband; | 78 | struct ieee80211_supported_band *sband; |
73 | u8 rate = 0; | 79 | u8 rate = 0; |
74 | 80 | ||
81 | ath9k_reset_beacon_status(sc); | ||
82 | |||
75 | ds = bf->bf_desc; | 83 | ds = bf->bf_desc; |
76 | flags = ATH9K_TXDESC_NOACK; | 84 | flags = ATH9K_TXDESC_NOACK; |
77 | 85 | ||
@@ -134,6 +142,8 @@ static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw, | |||
134 | struct ieee80211_tx_info *info; | 142 | struct ieee80211_tx_info *info; |
135 | int cabq_depth; | 143 | int cabq_depth; |
136 | 144 | ||
145 | ath9k_reset_beacon_status(sc); | ||
146 | |||
137 | avp = (void *)vif->drv_priv; | 147 | avp = (void *)vif->drv_priv; |
138 | cabq = sc->beacon.cabq; | 148 | cabq = sc->beacon.cabq; |
139 | 149 | ||
@@ -351,9 +361,7 @@ void ath_beacon_tasklet(unsigned long data) | |||
351 | struct ath_buf *bf = NULL; | 361 | struct ath_buf *bf = NULL; |
352 | struct ieee80211_vif *vif; | 362 | struct ieee80211_vif *vif; |
353 | int slot; | 363 | int slot; |
354 | u32 bfaddr, bc = 0, tsftu; | 364 | u32 bfaddr, bc = 0; |
355 | u64 tsf; | ||
356 | u16 intval; | ||
357 | 365 | ||
358 | /* | 366 | /* |
359 | * Check if the previous beacon has gone out. If | 367 | * Check if the previous beacon has gone out. If |
@@ -388,17 +396,27 @@ void ath_beacon_tasklet(unsigned long data) | |||
388 | * on the tsf to safeguard against missing an swba. | 396 | * on the tsf to safeguard against missing an swba. |
389 | */ | 397 | */ |
390 | 398 | ||
391 | intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL; | ||
392 | 399 | ||
393 | tsf = ath9k_hw_gettsf64(ah); | 400 | if (ah->opmode == NL80211_IFTYPE_AP) { |
394 | tsf += TU_TO_USEC(ah->config.sw_beacon_response_time); | 401 | u16 intval; |
395 | tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF); | 402 | u32 tsftu; |
396 | slot = (tsftu % (intval * ATH_BCBUF)) / intval; | 403 | u64 tsf; |
397 | vif = sc->beacon.bslot[slot]; | 404 | |
405 | intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL; | ||
406 | tsf = ath9k_hw_gettsf64(ah); | ||
407 | tsf += TU_TO_USEC(ah->config.sw_beacon_response_time); | ||
408 | tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF); | ||
409 | slot = (tsftu % (intval * ATH_BCBUF)) / intval; | ||
410 | vif = sc->beacon.bslot[slot]; | ||
411 | |||
412 | ath_dbg(common, ATH_DBG_BEACON, | ||
413 | "slot %d [tsf %llu tsftu %u intval %u] vif %p\n", | ||
414 | slot, tsf, tsftu / ATH_BCBUF, intval, vif); | ||
415 | } else { | ||
416 | slot = 0; | ||
417 | vif = sc->beacon.bslot[slot]; | ||
418 | } | ||
398 | 419 | ||
399 | ath_dbg(common, ATH_DBG_BEACON, | ||
400 | "slot %d [tsf %llu tsftu %u intval %u] vif %p\n", | ||
401 | slot, tsf, tsftu / ATH_BCBUF, intval, vif); | ||
402 | 420 | ||
403 | bfaddr = 0; | 421 | bfaddr = 0; |
404 | if (vif) { | 422 | if (vif) { |
@@ -636,6 +654,8 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc, | |||
636 | struct ath_common *common = ath9k_hw_common(ah); | 654 | struct ath_common *common = ath9k_hw_common(ah); |
637 | u32 tsf, delta, intval, nexttbtt; | 655 | u32 tsf, delta, intval, nexttbtt; |
638 | 656 | ||
657 | ath9k_reset_beacon_status(sc); | ||
658 | |||
639 | tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE); | 659 | tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE); |
640 | intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD); | 660 | intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD); |
641 | 661 | ||
@@ -646,7 +666,7 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc, | |||
646 | delta = (tsf - sc->beacon.bc_tstamp); | 666 | delta = (tsf - sc->beacon.bc_tstamp); |
647 | else | 667 | else |
648 | delta = (tsf + 1 + (~0U - sc->beacon.bc_tstamp)); | 668 | delta = (tsf + 1 + (~0U - sc->beacon.bc_tstamp)); |
649 | nexttbtt = tsf + roundup(delta, intval); | 669 | nexttbtt = tsf + intval - (delta % intval); |
650 | } | 670 | } |
651 | 671 | ||
652 | ath_dbg(common, ATH_DBG_BEACON, | 672 | ath_dbg(common, ATH_DBG_BEACON, |
diff --git a/drivers/net/wireless/ath/ath9k/btcoex.c b/drivers/net/wireless/ath/ath9k/btcoex.c index 23f15a7ca7f1..41ce0b139886 100644 --- a/drivers/net/wireless/ath/ath9k/btcoex.c +++ b/drivers/net/wireless/ath/ath9k/btcoex.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2009 Atheros Communications Inc. | 2 | * Copyright (c) 2009-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/btcoex.h b/drivers/net/wireless/ath/ath9k/btcoex.h index a9efca83d676..234f77689b14 100644 --- a/drivers/net/wireless/ath/ath9k/btcoex.h +++ b/drivers/net/wireless/ath/ath9k/btcoex.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2009 Atheros Communications Inc. | 2 | * Copyright (c) 2009-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c index 558b228a717f..a1250c586e40 100644 --- a/drivers/net/wireless/ath/ath9k/calib.c +++ b/drivers/net/wireless/ath/ath9k/calib.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/calib.h b/drivers/net/wireless/ath/ath9k/calib.h index 4420780fa3b8..1bef41d1b1ff 100644 --- a/drivers/net/wireless/ath/ath9k/calib.h +++ b/drivers/net/wireless/ath/ath9k/calib.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/common.c b/drivers/net/wireless/ath/ath9k/common.c index 74535e6dfb82..fa6bd2d189e5 100644 --- a/drivers/net/wireless/ath/ath9k/common.c +++ b/drivers/net/wireless/ath/ath9k/common.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2009 Atheros Communications Inc. | 2 | * Copyright (c) 2009-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h index 5124f1420b3a..77ec288b5a70 100644 --- a/drivers/net/wireless/ath/ath9k/common.h +++ b/drivers/net/wireless/ath/ath9k/common.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2009 Atheros Communications Inc. | 2 | * Copyright (c) 2009-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c index bad1a87249b6..d55ffd7d4bd2 100644 --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -435,6 +435,7 @@ static ssize_t read_file_wiphy(struct file *file, char __user *user_buf, | |||
435 | conf->channel_type, | 435 | conf->channel_type, |
436 | channel_type_str(conf->channel_type)); | 436 | channel_type_str(conf->channel_type)); |
437 | 437 | ||
438 | ath9k_ps_wakeup(sc); | ||
438 | put_unaligned_le32(REG_READ_D(sc->sc_ah, AR_STA_ID0), addr); | 439 | put_unaligned_le32(REG_READ_D(sc->sc_ah, AR_STA_ID0), addr); |
439 | put_unaligned_le16(REG_READ_D(sc->sc_ah, AR_STA_ID1) & 0xffff, addr + 4); | 440 | put_unaligned_le16(REG_READ_D(sc->sc_ah, AR_STA_ID1) & 0xffff, addr + 4); |
440 | len += snprintf(buf + len, sizeof(buf) - len, | 441 | len += snprintf(buf + len, sizeof(buf) - len, |
@@ -444,6 +445,7 @@ static ssize_t read_file_wiphy(struct file *file, char __user *user_buf, | |||
444 | len += snprintf(buf + len, sizeof(buf) - len, | 445 | len += snprintf(buf + len, sizeof(buf) - len, |
445 | "addrmask: %pM\n", addr); | 446 | "addrmask: %pM\n", addr); |
446 | tmp = ath9k_hw_getrxfilter(sc->sc_ah); | 447 | tmp = ath9k_hw_getrxfilter(sc->sc_ah); |
448 | ath9k_ps_restore(sc); | ||
447 | len += snprintf(buf + len, sizeof(buf) - len, | 449 | len += snprintf(buf + len, sizeof(buf) - len, |
448 | "rfilt: 0x%x", tmp); | 450 | "rfilt: 0x%x", tmp); |
449 | if (tmp & ATH9K_RX_FILTER_UCAST) | 451 | if (tmp & ATH9K_RX_FILTER_UCAST) |
@@ -725,6 +727,7 @@ static ssize_t read_file_misc(struct file *file, char __user *user_buf, | |||
725 | break; | 727 | break; |
726 | } | 728 | } |
727 | 729 | ||
730 | ath9k_ps_wakeup(sc); | ||
728 | len += snprintf(buf + len, size - len, | 731 | len += snprintf(buf + len, size - len, |
729 | "curbssid: %pM\n" | 732 | "curbssid: %pM\n" |
730 | "OP-Mode: %s(%i)\n" | 733 | "OP-Mode: %s(%i)\n" |
@@ -734,6 +737,7 @@ static ssize_t read_file_misc(struct file *file, char __user *user_buf, | |||
734 | REG_READ(ah, AR_BEACON_PERIOD)); | 737 | REG_READ(ah, AR_BEACON_PERIOD)); |
735 | 738 | ||
736 | reg = REG_READ(ah, AR_TIMER_MODE); | 739 | reg = REG_READ(ah, AR_TIMER_MODE); |
740 | ath9k_ps_restore(sc); | ||
737 | len += snprintf(buf + len, size - len, "Timer-Mode-Register: 0x%x (", | 741 | len += snprintf(buf + len, size - len, "Timer-Mode-Register: 0x%x (", |
738 | reg); | 742 | reg); |
739 | if (reg & AR_TBTT_TIMER_EN) | 743 | if (reg & AR_TBTT_TIMER_EN) |
@@ -1050,7 +1054,9 @@ static ssize_t read_file_regval(struct file *file, char __user *user_buf, | |||
1050 | unsigned int len; | 1054 | unsigned int len; |
1051 | u32 regval; | 1055 | u32 regval; |
1052 | 1056 | ||
1057 | ath9k_ps_wakeup(sc); | ||
1053 | regval = REG_READ_D(ah, sc->debug.regidx); | 1058 | regval = REG_READ_D(ah, sc->debug.regidx); |
1059 | ath9k_ps_restore(sc); | ||
1054 | len = sprintf(buf, "0x%08x\n", regval); | 1060 | len = sprintf(buf, "0x%08x\n", regval); |
1055 | return simple_read_from_buffer(user_buf, count, ppos, buf, len); | 1061 | return simple_read_from_buffer(user_buf, count, ppos, buf, len); |
1056 | } | 1062 | } |
@@ -1072,7 +1078,9 @@ static ssize_t write_file_regval(struct file *file, const char __user *user_buf, | |||
1072 | if (strict_strtoul(buf, 0, ®val)) | 1078 | if (strict_strtoul(buf, 0, ®val)) |
1073 | return -EINVAL; | 1079 | return -EINVAL; |
1074 | 1080 | ||
1081 | ath9k_ps_wakeup(sc); | ||
1075 | REG_WRITE_D(ah, sc->debug.regidx, regval); | 1082 | REG_WRITE_D(ah, sc->debug.regidx, regval); |
1083 | ath9k_ps_restore(sc); | ||
1076 | return count; | 1084 | return count; |
1077 | } | 1085 | } |
1078 | 1086 | ||
diff --git a/drivers/net/wireless/ath/ath9k/debug.h b/drivers/net/wireless/ath/ath9k/debug.h index 5488a324cc10..8ce6ad80f4e2 100644 --- a/drivers/net/wireless/ath/ath9k/debug.h +++ b/drivers/net/wireless/ath/ath9k/debug.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/eeprom.c b/drivers/net/wireless/ath/ath9k/eeprom.c index 8c18bed3a558..e61404dda8c5 100644 --- a/drivers/net/wireless/ath/ath9k/eeprom.c +++ b/drivers/net/wireless/ath/ath9k/eeprom.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/eeprom.h b/drivers/net/wireless/ath/ath9k/eeprom.h index 3e316133f114..de99c0da52e4 100644 --- a/drivers/net/wireless/ath/ath9k/eeprom.h +++ b/drivers/net/wireless/ath/ath9k/eeprom.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/eeprom_4k.c b/drivers/net/wireless/ath/ath9k/eeprom_4k.c index 6f714dd72365..5b1e894f3d67 100644 --- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c +++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/eeprom_9287.c b/drivers/net/wireless/ath/ath9k/eeprom_9287.c index b87db4763098..7856f0d4512d 100644 --- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c +++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/eeprom_def.c b/drivers/net/wireless/ath/ath9k/eeprom_def.c index c031854b569f..17f0a6806207 100644 --- a/drivers/net/wireless/ath/ath9k/eeprom_def.c +++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/gpio.c b/drivers/net/wireless/ath/ath9k/gpio.c index 0349b3a1cc58..bc713fc28191 100644 --- a/drivers/net/wireless/ath/ath9k/gpio.c +++ b/drivers/net/wireless/ath/ath9k/gpio.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c index 2e3a33a53406..260f1f37a60e 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h index 2bdcdbc14b1e..794f63094e5d 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.h +++ b/drivers/net/wireless/ath/ath9k/hif_usb.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -18,7 +18,7 @@ | |||
18 | #define HTC_USB_H | 18 | #define HTC_USB_H |
19 | 19 | ||
20 | #define MAJOR_VERSION_REQ 1 | 20 | #define MAJOR_VERSION_REQ 1 |
21 | #define MINOR_VERSION_REQ 2 | 21 | #define MINOR_VERSION_REQ 3 |
22 | 22 | ||
23 | #define IS_AR7010_DEVICE(_v) (((_v) == AR9280_USB) || ((_v) == AR9287_USB)) | 23 | #define IS_AR7010_DEVICE(_v) (((_v) == AR9280_USB) || ((_v) == AR9287_USB)) |
24 | 24 | ||
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h index dfc7a982fc7e..5bc022087e65 100644 --- a/drivers/net/wireless/ath/ath9k/htc.h +++ b/drivers/net/wireless/ath/ath9k/htc.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -46,15 +46,8 @@ extern struct ieee80211_ops ath9k_htc_ops; | |||
46 | extern int htc_modparam_nohwcrypt; | 46 | extern int htc_modparam_nohwcrypt; |
47 | 47 | ||
48 | enum htc_phymode { | 48 | enum htc_phymode { |
49 | HTC_MODE_AUTO = 0, | 49 | HTC_MODE_11NA = 0, |
50 | HTC_MODE_11A = 1, | 50 | HTC_MODE_11NG = 1 |
51 | HTC_MODE_11B = 2, | ||
52 | HTC_MODE_11G = 3, | ||
53 | HTC_MODE_FH = 4, | ||
54 | HTC_MODE_TURBO_A = 5, | ||
55 | HTC_MODE_TURBO_G = 6, | ||
56 | HTC_MODE_11NA = 7, | ||
57 | HTC_MODE_11NG = 8 | ||
58 | }; | 51 | }; |
59 | 52 | ||
60 | enum htc_opmode { | 53 | enum htc_opmode { |
@@ -123,18 +116,13 @@ struct ath9k_htc_target_vif { | |||
123 | u8 pad; | 116 | u8 pad; |
124 | } __packed; | 117 | } __packed; |
125 | 118 | ||
126 | #define ATH_HTC_STA_AUTH 0x0001 | ||
127 | #define ATH_HTC_STA_QOS 0x0002 | ||
128 | #define ATH_HTC_STA_ERP 0x0004 | ||
129 | #define ATH_HTC_STA_HT 0x0008 | ||
130 | |||
131 | struct ath9k_htc_target_sta { | 119 | struct ath9k_htc_target_sta { |
132 | u8 macaddr[ETH_ALEN]; | 120 | u8 macaddr[ETH_ALEN]; |
133 | u8 bssid[ETH_ALEN]; | 121 | u8 bssid[ETH_ALEN]; |
134 | u8 sta_index; | 122 | u8 sta_index; |
135 | u8 vif_index; | 123 | u8 vif_index; |
136 | u8 is_vif_sta; | 124 | u8 is_vif_sta; |
137 | __be16 flags; /* ATH_HTC_STA_* */ | 125 | __be16 flags; |
138 | __be16 htcap; | 126 | __be16 htcap; |
139 | __be16 maxampdu; | 127 | __be16 maxampdu; |
140 | u8 pad; | 128 | u8 pad; |
@@ -285,9 +273,9 @@ struct ath9k_htc_rx { | |||
285 | }; | 273 | }; |
286 | 274 | ||
287 | #define ATH9K_HTC_TX_CLEANUP_INTERVAL 50 /* ms */ | 275 | #define ATH9K_HTC_TX_CLEANUP_INTERVAL 50 /* ms */ |
288 | #define ATH9K_HTC_TX_TIMEOUT_INTERVAL 2500 /* ms */ | 276 | #define ATH9K_HTC_TX_TIMEOUT_INTERVAL 3000 /* ms */ |
289 | #define ATH9K_HTC_TX_RESERVE 10 | 277 | #define ATH9K_HTC_TX_RESERVE 10 |
290 | #define ATH9K_HTC_TX_TIMEOUT_COUNT 20 | 278 | #define ATH9K_HTC_TX_TIMEOUT_COUNT 40 |
291 | #define ATH9K_HTC_TX_THRESHOLD (MAX_TX_BUF_NUM - ATH9K_HTC_TX_RESERVE) | 279 | #define ATH9K_HTC_TX_THRESHOLD (MAX_TX_BUF_NUM - ATH9K_HTC_TX_RESERVE) |
292 | 280 | ||
293 | #define ATH9K_HTC_OP_TX_QUEUES_STOP BIT(0) | 281 | #define ATH9K_HTC_OP_TX_QUEUES_STOP BIT(0) |
@@ -450,6 +438,7 @@ struct ath9k_htc_priv { | |||
450 | u8 vif_sta_pos[ATH9K_HTC_MAX_VIF]; | 438 | u8 vif_sta_pos[ATH9K_HTC_MAX_VIF]; |
451 | u8 num_ibss_vif; | 439 | u8 num_ibss_vif; |
452 | u8 num_sta_vif; | 440 | u8 num_sta_vif; |
441 | u8 num_sta_assoc_vif; | ||
453 | u8 num_ap_vif; | 442 | u8 num_ap_vif; |
454 | 443 | ||
455 | u16 op_flags; | 444 | u16 op_flags; |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c index 0ded2c66d5ff..aa6a73118706 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c b/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c index af57fe5aab98..db2352e5cc0d 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c index bfdc8a887183..61e6d3950718 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -258,7 +258,7 @@ static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid, | |||
258 | */ | 258 | */ |
259 | 259 | ||
260 | if (IS_AR7010_DEVICE(drv_info)) | 260 | if (IS_AR7010_DEVICE(drv_info)) |
261 | priv->htc->credits = 48; | 261 | priv->htc->credits = 45; |
262 | else | 262 | else |
263 | priv->htc->credits = 33; | 263 | priv->htc->credits = 33; |
264 | 264 | ||
@@ -769,11 +769,6 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv, | |||
769 | hw->channel_change_time = 5000; | 769 | hw->channel_change_time = 5000; |
770 | hw->max_listen_interval = 10; | 770 | hw->max_listen_interval = 10; |
771 | 771 | ||
772 | if (AR_SREV_9271(priv->ah)) | ||
773 | hw->max_tx_aggregation_subframes = MAX_TX_AMPDU_SUBFRAMES_9271; | ||
774 | else | ||
775 | hw->max_tx_aggregation_subframes = MAX_TX_AMPDU_SUBFRAMES_7010; | ||
776 | |||
777 | hw->vif_data_size = sizeof(struct ath9k_htc_vif); | 772 | hw->vif_data_size = sizeof(struct ath9k_htc_vif); |
778 | hw->sta_data_size = sizeof(struct ath9k_htc_sta); | 773 | hw->sta_data_size = sizeof(struct ath9k_htc_sta); |
779 | 774 | ||
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c index 5aa104fe7eeb..7b7796895432 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -26,7 +26,7 @@ static enum htc_phymode ath9k_htc_get_curmode(struct ath9k_htc_priv *priv, | |||
26 | { | 26 | { |
27 | enum htc_phymode mode; | 27 | enum htc_phymode mode; |
28 | 28 | ||
29 | mode = HTC_MODE_AUTO; | 29 | mode = -EINVAL; |
30 | 30 | ||
31 | switch (ichan->chanmode) { | 31 | switch (ichan->chanmode) { |
32 | case CHANNEL_G: | 32 | case CHANNEL_G: |
@@ -45,6 +45,8 @@ static enum htc_phymode ath9k_htc_get_curmode(struct ath9k_htc_priv *priv, | |||
45 | break; | 45 | break; |
46 | } | 46 | } |
47 | 47 | ||
48 | WARN_ON(mode < 0); | ||
49 | |||
48 | return mode; | 50 | return mode; |
49 | } | 51 | } |
50 | 52 | ||
@@ -500,9 +502,6 @@ static int ath9k_htc_add_station(struct ath9k_htc_priv *priv, | |||
500 | tsta.maxampdu = cpu_to_be16(maxampdu); | 502 | tsta.maxampdu = cpu_to_be16(maxampdu); |
501 | } | 503 | } |
502 | 504 | ||
503 | if (sta && sta->ht_cap.ht_supported) | ||
504 | tsta.flags = cpu_to_be16(ATH_HTC_STA_HT); | ||
505 | |||
506 | WMI_CMD_BUF(WMI_NODE_CREATE_CMDID, &tsta); | 505 | WMI_CMD_BUF(WMI_NODE_CREATE_CMDID, &tsta); |
507 | if (ret) { | 506 | if (ret) { |
508 | if (sta) | 507 | if (sta) |
@@ -582,7 +581,7 @@ int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv, | |||
582 | memset(&tcap, 0, sizeof(struct ath9k_htc_cap_target)); | 581 | memset(&tcap, 0, sizeof(struct ath9k_htc_cap_target)); |
583 | 582 | ||
584 | tcap.ampdu_limit = cpu_to_be32(0xffff); | 583 | tcap.ampdu_limit = cpu_to_be32(0xffff); |
585 | tcap.ampdu_subframes = priv->hw->max_tx_aggregation_subframes; | 584 | tcap.ampdu_subframes = 0xff; |
586 | tcap.enable_coex = enable_coex; | 585 | tcap.enable_coex = enable_coex; |
587 | tcap.tx_chainmask = priv->ah->caps.tx_chainmask; | 586 | tcap.tx_chainmask = priv->ah->caps.tx_chainmask; |
588 | 587 | ||
@@ -1165,6 +1164,8 @@ static void ath9k_htc_remove_interface(struct ieee80211_hw *hw, | |||
1165 | 1164 | ||
1166 | ath9k_htc_set_opmode(priv); | 1165 | ath9k_htc_set_opmode(priv); |
1167 | 1166 | ||
1167 | ath9k_htc_set_bssid_mask(priv, vif); | ||
1168 | |||
1168 | /* | 1169 | /* |
1169 | * Stop ANI only if there are no associated station interfaces. | 1170 | * Stop ANI only if there are no associated station interfaces. |
1170 | */ | 1171 | */ |
@@ -1435,6 +1436,37 @@ static int ath9k_htc_set_key(struct ieee80211_hw *hw, | |||
1435 | return ret; | 1436 | return ret; |
1436 | } | 1437 | } |
1437 | 1438 | ||
1439 | static void ath9k_htc_set_bssid(struct ath9k_htc_priv *priv) | ||
1440 | { | ||
1441 | struct ath_common *common = ath9k_hw_common(priv->ah); | ||
1442 | |||
1443 | ath9k_hw_write_associd(priv->ah); | ||
1444 | ath_dbg(common, ATH_DBG_CONFIG, | ||
1445 | "BSSID: %pM aid: 0x%x\n", | ||
1446 | common->curbssid, common->curaid); | ||
1447 | } | ||
1448 | |||
1449 | static void ath9k_htc_bss_iter(void *data, u8 *mac, struct ieee80211_vif *vif) | ||
1450 | { | ||
1451 | struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data; | ||
1452 | struct ath_common *common = ath9k_hw_common(priv->ah); | ||
1453 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; | ||
1454 | |||
1455 | if ((vif->type == NL80211_IFTYPE_STATION) && bss_conf->assoc) { | ||
1456 | common->curaid = bss_conf->aid; | ||
1457 | memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN); | ||
1458 | } | ||
1459 | } | ||
1460 | |||
1461 | static void ath9k_htc_choose_set_bssid(struct ath9k_htc_priv *priv) | ||
1462 | { | ||
1463 | if (priv->num_sta_assoc_vif == 1) { | ||
1464 | ieee80211_iterate_active_interfaces_atomic(priv->hw, | ||
1465 | ath9k_htc_bss_iter, priv); | ||
1466 | ath9k_htc_set_bssid(priv); | ||
1467 | } | ||
1468 | } | ||
1469 | |||
1438 | static void ath9k_htc_bss_info_changed(struct ieee80211_hw *hw, | 1470 | static void ath9k_htc_bss_info_changed(struct ieee80211_hw *hw, |
1439 | struct ieee80211_vif *vif, | 1471 | struct ieee80211_vif *vif, |
1440 | struct ieee80211_bss_conf *bss_conf, | 1472 | struct ieee80211_bss_conf *bss_conf, |
@@ -1443,43 +1475,32 @@ static void ath9k_htc_bss_info_changed(struct ieee80211_hw *hw, | |||
1443 | struct ath9k_htc_priv *priv = hw->priv; | 1475 | struct ath9k_htc_priv *priv = hw->priv; |
1444 | struct ath_hw *ah = priv->ah; | 1476 | struct ath_hw *ah = priv->ah; |
1445 | struct ath_common *common = ath9k_hw_common(ah); | 1477 | struct ath_common *common = ath9k_hw_common(ah); |
1446 | bool set_assoc; | ||
1447 | 1478 | ||
1448 | mutex_lock(&priv->mutex); | 1479 | mutex_lock(&priv->mutex); |
1449 | ath9k_htc_ps_wakeup(priv); | 1480 | ath9k_htc_ps_wakeup(priv); |
1450 | 1481 | ||
1451 | /* | ||
1452 | * Set the HW AID/BSSID only for the first station interface | ||
1453 | * or in IBSS mode. | ||
1454 | */ | ||
1455 | set_assoc = !!((priv->ah->opmode == NL80211_IFTYPE_ADHOC) || | ||
1456 | ((priv->ah->opmode == NL80211_IFTYPE_STATION) && | ||
1457 | (priv->num_sta_vif == 1))); | ||
1458 | |||
1459 | |||
1460 | if (changed & BSS_CHANGED_ASSOC) { | 1482 | if (changed & BSS_CHANGED_ASSOC) { |
1461 | if (set_assoc) { | 1483 | ath_dbg(common, ATH_DBG_CONFIG, "BSS Changed ASSOC %d\n", |
1462 | ath_dbg(common, ATH_DBG_CONFIG, "BSS Changed ASSOC %d\n", | 1484 | bss_conf->assoc); |
1463 | bss_conf->assoc); | ||
1464 | 1485 | ||
1465 | common->curaid = bss_conf->assoc ? | 1486 | bss_conf->assoc ? |
1466 | bss_conf->aid : 0; | 1487 | priv->num_sta_assoc_vif++ : priv->num_sta_assoc_vif--; |
1467 | 1488 | ||
1468 | if (bss_conf->assoc) | 1489 | if (priv->ah->opmode == NL80211_IFTYPE_STATION) { |
1490 | if (bss_conf->assoc && (priv->num_sta_assoc_vif == 1)) | ||
1469 | ath9k_htc_start_ani(priv); | 1491 | ath9k_htc_start_ani(priv); |
1470 | else | 1492 | else if (priv->num_sta_assoc_vif == 0) |
1471 | ath9k_htc_stop_ani(priv); | 1493 | ath9k_htc_stop_ani(priv); |
1472 | } | 1494 | } |
1473 | } | 1495 | } |
1474 | 1496 | ||
1475 | if (changed & BSS_CHANGED_BSSID) { | 1497 | if (changed & BSS_CHANGED_BSSID) { |
1476 | if (set_assoc) { | 1498 | if (priv->ah->opmode == NL80211_IFTYPE_ADHOC) { |
1499 | common->curaid = bss_conf->aid; | ||
1477 | memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN); | 1500 | memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN); |
1478 | ath9k_hw_write_associd(ah); | 1501 | ath9k_htc_set_bssid(priv); |
1479 | 1502 | } else if (priv->ah->opmode == NL80211_IFTYPE_STATION) { | |
1480 | ath_dbg(common, ATH_DBG_CONFIG, | 1503 | ath9k_htc_choose_set_bssid(priv); |
1481 | "BSSID: %pM aid: 0x%x\n", | ||
1482 | common->curbssid, common->curaid); | ||
1483 | } | 1504 | } |
1484 | } | 1505 | } |
1485 | 1506 | ||
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c index a898dac22337..2d81c700e201 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -875,6 +875,7 @@ u32 ath9k_htc_calcrxfilter(struct ath9k_htc_priv *priv) | |||
875 | rfilt |= ATH9K_RX_FILTER_CONTROL; | 875 | rfilt |= ATH9K_RX_FILTER_CONTROL; |
876 | 876 | ||
877 | if ((ah->opmode == NL80211_IFTYPE_STATION) && | 877 | if ((ah->opmode == NL80211_IFTYPE_STATION) && |
878 | (priv->nvifs <= 1) && | ||
878 | !(priv->rxfilter & FIF_BCN_PRBRESP_PROMISC)) | 879 | !(priv->rxfilter & FIF_BCN_PRBRESP_PROMISC)) |
879 | rfilt |= ATH9K_RX_FILTER_MYBEACON; | 880 | rfilt |= ATH9K_RX_FILTER_MYBEACON; |
880 | else | 881 | else |
@@ -888,6 +889,9 @@ u32 ath9k_htc_calcrxfilter(struct ath9k_htc_priv *priv) | |||
888 | if (priv->rxfilter & FIF_PSPOLL) | 889 | if (priv->rxfilter & FIF_PSPOLL) |
889 | rfilt |= ATH9K_RX_FILTER_PSPOLL; | 890 | rfilt |= ATH9K_RX_FILTER_PSPOLL; |
890 | 891 | ||
892 | if (priv->nvifs > 1) | ||
893 | rfilt |= ATH9K_RX_FILTER_MCAST_BCAST_ALL; | ||
894 | |||
891 | return rfilt; | 895 | return rfilt; |
892 | 896 | ||
893 | #undef RX_FILTER_PRESERVE | 897 | #undef RX_FILTER_PRESERVE |
diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c index cee970fdf652..1b90ed8795c3 100644 --- a/drivers/net/wireless/ath/ath9k/htc_hst.c +++ b/drivers/net/wireless/ath/ath9k/htc_hst.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.h b/drivers/net/wireless/ath/ath9k/htc_hst.h index 91a5305db95a..e1ffbb6bd636 100644 --- a/drivers/net/wireless/ath/ath9k/htc_hst.h +++ b/drivers/net/wireless/ath/ath9k/htc_hst.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/hw-ops.h b/drivers/net/wireless/ath/ath9k/hw-ops.h index 8b8f0445aef8..2f3e07263fcb 100644 --- a/drivers/net/wireless/ath/ath9k/hw-ops.h +++ b/drivers/net/wireless/ath/ath9k/hw-ops.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index b75b5dca4e29..72543ce8f616 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 7af2773d2bfc..57435ce62792 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2010 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c index b172d1509515..45c585a337e9 100644 --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c index bd6d2b9d736f..c2091f1f4096 100644 --- a/drivers/net/wireless/ath/ath9k/mac.c +++ b/drivers/net/wireless/ath/ath9k/mac.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/mac.h b/drivers/net/wireless/ath/ath9k/mac.h index b60c130917f7..8e848c4d16ba 100644 --- a/drivers/net/wireless/ath/ath9k/mac.h +++ b/drivers/net/wireless/ath/ath9k/mac.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 17ebdf1e8b7b..a198ee374b05 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -2332,6 +2332,45 @@ static bool ath9k_tx_frames_pending(struct ieee80211_hw *hw) | |||
2332 | return false; | 2332 | return false; |
2333 | } | 2333 | } |
2334 | 2334 | ||
2335 | int ath9k_tx_last_beacon(struct ieee80211_hw *hw) | ||
2336 | { | ||
2337 | struct ath_softc *sc = hw->priv; | ||
2338 | struct ath_hw *ah = sc->sc_ah; | ||
2339 | struct ieee80211_vif *vif; | ||
2340 | struct ath_vif *avp; | ||
2341 | struct ath_buf *bf; | ||
2342 | struct ath_tx_status ts; | ||
2343 | int status; | ||
2344 | |||
2345 | vif = sc->beacon.bslot[0]; | ||
2346 | if (!vif) | ||
2347 | return 0; | ||
2348 | |||
2349 | avp = (void *)vif->drv_priv; | ||
2350 | if (!avp->is_bslot_active) | ||
2351 | return 0; | ||
2352 | |||
2353 | if (!sc->beacon.tx_processed) { | ||
2354 | tasklet_disable(&sc->bcon_tasklet); | ||
2355 | |||
2356 | bf = avp->av_bcbuf; | ||
2357 | if (!bf || !bf->bf_mpdu) | ||
2358 | goto skip; | ||
2359 | |||
2360 | status = ath9k_hw_txprocdesc(ah, bf->bf_desc, &ts); | ||
2361 | if (status == -EINPROGRESS) | ||
2362 | goto skip; | ||
2363 | |||
2364 | sc->beacon.tx_processed = true; | ||
2365 | sc->beacon.tx_last = !(ts.ts_status & ATH9K_TXERR_MASK); | ||
2366 | |||
2367 | skip: | ||
2368 | tasklet_enable(&sc->bcon_tasklet); | ||
2369 | } | ||
2370 | |||
2371 | return sc->beacon.tx_last; | ||
2372 | } | ||
2373 | |||
2335 | struct ieee80211_ops ath9k_ops = { | 2374 | struct ieee80211_ops ath9k_ops = { |
2336 | .tx = ath9k_tx, | 2375 | .tx = ath9k_tx, |
2337 | .start = ath9k_start, | 2376 | .start = ath9k_start, |
@@ -2356,4 +2395,5 @@ struct ieee80211_ops ath9k_ops = { | |||
2356 | .set_coverage_class = ath9k_set_coverage_class, | 2395 | .set_coverage_class = ath9k_set_coverage_class, |
2357 | .flush = ath9k_flush, | 2396 | .flush = ath9k_flush, |
2358 | .tx_frames_pending = ath9k_tx_frames_pending, | 2397 | .tx_frames_pending = ath9k_tx_frames_pending, |
2398 | .tx_last_beacon = ath9k_tx_last_beacon, | ||
2359 | }; | 2399 | }; |
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c index 9c65459be100..b8cbfc707213 100644 --- a/drivers/net/wireless/ath/ath9k/pci.c +++ b/drivers/net/wireless/ath/ath9k/pci.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/phy.h b/drivers/net/wireless/ath/ath9k/phy.h index 9441bf8ca2fd..8b380305b0fc 100644 --- a/drivers/net/wireless/ath/ath9k/phy.h +++ b/drivers/net/wireless/ath/ath9k/phy.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c index 4ccbf2ddb553..17542214c93f 100644 --- a/drivers/net/wireless/ath/ath9k/rc.c +++ b/drivers/net/wireless/ath/ath9k/rc.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2004 Video54 Technologies, Inc. | 2 | * Copyright (c) 2004 Video54 Technologies, Inc. |
3 | * Copyright (c) 2004-2009 Atheros Communications, Inc. | 3 | * Copyright (c) 2004-2011 Atheros Communications, Inc. |
4 | * | 4 | * |
5 | * Permission to use, copy, modify, and/or distribute this software for any | 5 | * Permission to use, copy, modify, and/or distribute this software for any |
6 | * purpose with or without fee is hereby granted, provided that the above | 6 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/rc.h b/drivers/net/wireless/ath/ath9k/rc.h index 5d984b8acdb1..c3d850207bee 100644 --- a/drivers/net/wireless/ath/ath9k/rc.h +++ b/drivers/net/wireless/ath/ath9k/rc.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2004 Sam Leffler, Errno Consulting | 2 | * Copyright (c) 2004 Sam Leffler, Errno Consulting |
3 | * Copyright (c) 2004 Video54 Technologies, Inc. | 3 | * Copyright (c) 2004 Video54 Technologies, Inc. |
4 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 4 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
5 | * | 5 | * |
6 | * Permission to use, copy, modify, and/or distribute this software for any | 6 | * Permission to use, copy, modify, and/or distribute this software for any |
7 | * purpose with or without fee is hereby granted, provided that the above | 7 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index 4f52e0429f99..07e35e59c9e3 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h index 456f3ec20fef..c18ee9921fb1 100644 --- a/drivers/net/wireless/ath/ath9k/reg.h +++ b/drivers/net/wireless/ath/ath9k/reg.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c index f9b1eb4853c4..35422fc1f2ce 100644 --- a/drivers/net/wireless/ath/ath9k/wmi.c +++ b/drivers/net/wireless/ath/ath9k/wmi.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/wmi.h b/drivers/net/wireless/ath/ath9k/wmi.h index 6095eeb6e025..fde6da619f30 100644 --- a/drivers/net/wireless/ath/ath9k/wmi.h +++ b/drivers/net/wireless/ath/ath9k/wmi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2010 Atheros Communications Inc. | 2 | * Copyright (c) 2010-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 97dd1fac98b6..3779b8977d47 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
diff --git a/drivers/net/wireless/ath/carl9170/carl9170.h b/drivers/net/wireless/ath/carl9170/carl9170.h index bb578690935e..4da01a9f5680 100644 --- a/drivers/net/wireless/ath/carl9170/carl9170.h +++ b/drivers/net/wireless/ath/carl9170/carl9170.h | |||
@@ -286,6 +286,10 @@ struct ar9170 { | |||
286 | unsigned int tx_seq_table; | 286 | unsigned int tx_seq_table; |
287 | } fw; | 287 | } fw; |
288 | 288 | ||
289 | /* interface configuration combinations */ | ||
290 | struct ieee80211_iface_limit if_comb_limits[1]; | ||
291 | struct ieee80211_iface_combination if_combs[1]; | ||
292 | |||
289 | /* reset / stuck frames/queue detection */ | 293 | /* reset / stuck frames/queue detection */ |
290 | struct work_struct restart_work; | 294 | struct work_struct restart_work; |
291 | struct work_struct ping_work; | 295 | struct work_struct ping_work; |
diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c index 9517ede9e2df..221957c5d373 100644 --- a/drivers/net/wireless/ath/carl9170/fw.c +++ b/drivers/net/wireless/ath/carl9170/fw.c | |||
@@ -151,6 +151,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) | |||
151 | const struct carl9170fw_chk_desc *chk_desc; | 151 | const struct carl9170fw_chk_desc *chk_desc; |
152 | const struct carl9170fw_last_desc *last_desc; | 152 | const struct carl9170fw_last_desc *last_desc; |
153 | const struct carl9170fw_txsq_desc *txsq_desc; | 153 | const struct carl9170fw_txsq_desc *txsq_desc; |
154 | u16 if_comb_types; | ||
154 | 155 | ||
155 | last_desc = carl9170_fw_find_desc(ar, LAST_MAGIC, | 156 | last_desc = carl9170_fw_find_desc(ar, LAST_MAGIC, |
156 | sizeof(*last_desc), CARL9170FW_LAST_DESC_CUR_VER); | 157 | sizeof(*last_desc), CARL9170FW_LAST_DESC_CUR_VER); |
@@ -268,6 +269,9 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) | |||
268 | if (SUPP(CARL9170FW_WOL)) | 269 | if (SUPP(CARL9170FW_WOL)) |
269 | device_set_wakeup_enable(&ar->udev->dev, true); | 270 | device_set_wakeup_enable(&ar->udev->dev, true); |
270 | 271 | ||
272 | if_comb_types = BIT(NL80211_IFTYPE_STATION) | | ||
273 | BIT(NL80211_IFTYPE_P2P_CLIENT); | ||
274 | |||
271 | ar->fw.vif_num = otus_desc->vif_num; | 275 | ar->fw.vif_num = otus_desc->vif_num; |
272 | ar->fw.cmd_bufs = otus_desc->cmd_bufs; | 276 | ar->fw.cmd_bufs = otus_desc->cmd_bufs; |
273 | ar->fw.address = le32_to_cpu(otus_desc->fw_address); | 277 | ar->fw.address = le32_to_cpu(otus_desc->fw_address); |
@@ -294,12 +298,25 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) | |||
294 | ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC); | 298 | ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC); |
295 | 299 | ||
296 | if (SUPP(CARL9170FW_WLANTX_CAB)) { | 300 | if (SUPP(CARL9170FW_WLANTX_CAB)) { |
297 | ar->hw->wiphy->interface_modes |= | 301 | if_comb_types |= |
298 | BIT(NL80211_IFTYPE_AP) | | 302 | BIT(NL80211_IFTYPE_AP) | |
299 | BIT(NL80211_IFTYPE_P2P_GO); | 303 | BIT(NL80211_IFTYPE_P2P_GO); |
300 | } | 304 | } |
301 | } | 305 | } |
302 | 306 | ||
307 | ar->if_comb_limits[0].max = ar->fw.vif_num; | ||
308 | ar->if_comb_limits[0].types = if_comb_types; | ||
309 | |||
310 | ar->if_combs[0].num_different_channels = 1; | ||
311 | ar->if_combs[0].max_interfaces = ar->fw.vif_num; | ||
312 | ar->if_combs[0].limits = ar->if_comb_limits; | ||
313 | ar->if_combs[0].n_limits = ARRAY_SIZE(ar->if_comb_limits); | ||
314 | |||
315 | ar->hw->wiphy->iface_combinations = ar->if_combs; | ||
316 | ar->hw->wiphy->n_iface_combinations = ARRAY_SIZE(ar->if_combs); | ||
317 | |||
318 | ar->hw->wiphy->interface_modes |= if_comb_types; | ||
319 | |||
303 | txsq_desc = carl9170_fw_find_desc(ar, TXSQ_MAGIC, | 320 | txsq_desc = carl9170_fw_find_desc(ar, TXSQ_MAGIC, |
304 | sizeof(*txsq_desc), CARL9170FW_TXSQ_DESC_CUR_VER); | 321 | sizeof(*txsq_desc), CARL9170FW_TXSQ_DESC_CUR_VER); |
305 | 322 | ||
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c index 7d5c65ea94e6..54d093c2ab44 100644 --- a/drivers/net/wireless/ath/carl9170/main.c +++ b/drivers/net/wireless/ath/carl9170/main.c | |||
@@ -1570,14 +1570,8 @@ void *carl9170_alloc(size_t priv_size) | |||
1570 | INIT_LIST_HEAD(&ar->vif_list); | 1570 | INIT_LIST_HEAD(&ar->vif_list); |
1571 | init_completion(&ar->tx_flush); | 1571 | init_completion(&ar->tx_flush); |
1572 | 1572 | ||
1573 | /* | 1573 | /* firmware decides which modes we support */ |
1574 | * Note: | 1574 | hw->wiphy->interface_modes = 0; |
1575 | * IBSS/ADHOC and AP mode are only enabled, if the firmware | ||
1576 | * supports these modes. The code which will add the | ||
1577 | * additional interface_modes is in fw.c. | ||
1578 | */ | ||
1579 | hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | | ||
1580 | BIT(NL80211_IFTYPE_P2P_CLIENT); | ||
1581 | 1575 | ||
1582 | hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS | | 1576 | hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS | |
1583 | IEEE80211_HW_REPORTS_TX_ACK_STATUS | | 1577 | IEEE80211_HW_REPORTS_TX_ACK_STATUS | |
diff --git a/drivers/net/wireless/ath/hw.c b/drivers/net/wireless/ath/hw.c index cc11d66f15bc..3f508e59f146 100644 --- a/drivers/net/wireless/ath/hw.c +++ b/drivers/net/wireless/ath/hw.c | |||
@@ -43,7 +43,7 @@ | |||
43 | * set of ~ ( MAC XOR BSSID ) for all bssids we handle. | 43 | * set of ~ ( MAC XOR BSSID ) for all bssids we handle. |
44 | * | 44 | * |
45 | * When you do this you are essentially computing the common bits of all your | 45 | * When you do this you are essentially computing the common bits of all your |
46 | * BSSes. Later it is assumed the harware will "and" (&) the BSSID mask with | 46 | * BSSes. Later it is assumed the hardware will "and" (&) the BSSID mask with |
47 | * the MAC address to obtain the relevant bits and compare the result with | 47 | * the MAC address to obtain the relevant bits and compare the result with |
48 | * (frame's BSSID & mask) to see if they match. | 48 | * (frame's BSSID & mask) to see if they match. |
49 | * | 49 | * |
@@ -71,8 +71,8 @@ | |||
71 | * On loop iteration for BSSID-02: | 71 | * On loop iteration for BSSID-02: |
72 | * bssid_mask &= ~(0001 ^ 1001) | 72 | * bssid_mask &= ~(0001 ^ 1001) |
73 | * bssid_mask = (1010) & ~(0001 ^ 1001) | 73 | * bssid_mask = (1010) & ~(0001 ^ 1001) |
74 | * bssid_mask = (1010) & ~(1001) | 74 | * bssid_mask = (1010) & ~(1000) |
75 | * bssid_mask = (1010) & (0110) | 75 | * bssid_mask = (1010) & (0111) |
76 | * bssid_mask = 0010 | 76 | * bssid_mask = 0010 |
77 | * | 77 | * |
78 | * A bssid_mask of 0010 means "only pay attention to the second least | 78 | * A bssid_mask of 0010 means "only pay attention to the second least |
@@ -102,11 +102,9 @@ | |||
102 | * | 102 | * |
103 | * IFRAME-02: 0001 (we should allow) | 103 | * IFRAME-02: 0001 (we should allow) |
104 | * | 104 | * |
105 | * allow = (0001 & 1010) == 1010 | ||
106 | * | ||
107 | * allow = (IFRAME-02 & bssid_mask) == (bssid_mask & MAC) ? 1 : 0; | 105 | * allow = (IFRAME-02 & bssid_mask) == (bssid_mask & MAC) ? 1 : 0; |
108 | * --> allow = (0001 & 0010) == (0010 & 0001) ? 1 :0; | 106 | * --> allow = (0001 & 0010) == (0010 & 0001) ? 1 :0; |
109 | * --> allow = (0010) == (0010) | 107 | * --> allow = (0000) == (0000) |
110 | * --> allow = 1 | 108 | * --> allow = 1 |
111 | * | 109 | * |
112 | * Other examples: | 110 | * Other examples: |