From: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
To: linux-wireless@vger.kernel.org
Cc: Daniel Drake <dsd@gentoo.org>,
zd1211-devs@lists.sourceforge.net,
Ulrich Kunitz <kune@deine-taler.de>
Subject: [RFC PATCH 3/6] zd1211rw: let zd_set_beacon_interval() set dtim_period and add AP-beacon flag
Date: Sun, 26 Dec 2010 13:24:33 +0200 [thread overview]
Message-ID: <20101226112433.31775.89617.stgit@fate.lan> (raw)
In-Reply-To: <20101226112404.31775.77854.stgit@fate.lan>
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
---
drivers/net/wireless/zd1211rw/zd_chip.c | 11 ++++++-----
drivers/net/wireless/zd1211rw/zd_chip.h | 3 ++-
drivers/net/wireless/zd1211rw/zd_mac.c | 22 +++++++++++++---------
3 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index 91bf8bc..fdbf6ea 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -888,7 +888,8 @@ static int set_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
}
-static int set_beacon_interval(struct zd_chip *chip, u32 interval)
+static int set_beacon_interval(struct zd_chip *chip, u32 interval,
+ u16 dtim_period)
{
int r;
struct aw_pt_bi s;
@@ -897,16 +898,16 @@ static int set_beacon_interval(struct zd_chip *chip, u32 interval)
r = get_aw_pt_bi(chip, &s);
if (r)
return r;
- s.beacon_interval = interval;
+ s.beacon_interval = interval | (dtim_period << 16);
return set_aw_pt_bi(chip, &s);
}
-int zd_set_beacon_interval(struct zd_chip *chip, u32 interval)
+int zd_set_beacon_interval(struct zd_chip *chip, u32 interval, u16 dtim_period)
{
int r;
mutex_lock(&chip->mutex);
- r = set_beacon_interval(chip, interval);
+ r = set_beacon_interval(chip, interval, dtim_period);
mutex_unlock(&chip->mutex);
return r;
}
@@ -925,7 +926,7 @@ static int hw_init(struct zd_chip *chip)
if (r)
return r;
- return set_beacon_interval(chip, 100);
+ return set_beacon_interval(chip, 100, 0);
}
static zd_addr_t fw_reg_addr(struct zd_chip *chip, u16 offset)
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
index 7b0c58c..1e791ba 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.h
+++ b/drivers/net/wireless/zd1211rw/zd_chip.h
@@ -546,6 +546,7 @@ enum {
#define RX_FILTER_CTRL (RX_FILTER_RTS | RX_FILTER_CTS | \
RX_FILTER_CFEND | RX_FILTER_CFACK)
+#define BCN_MODE_AP 0x1000000
#define BCN_MODE_IBSS 0x2000000
/* Monitor mode sets filter to 0xfffff */
@@ -921,7 +922,7 @@ enum led_status {
int zd_chip_control_leds(struct zd_chip *chip, enum led_status status);
-int zd_set_beacon_interval(struct zd_chip *chip, u32 interval);
+int zd_set_beacon_interval(struct zd_chip *chip, u32 interval, u16 dtim_period);
static inline int zd_get_beacon_interval(struct zd_chip *chip, u32 *interval)
{
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index d3f454b..71a7576 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -919,7 +919,7 @@ static void zd_op_remove_interface(struct ieee80211_hw *hw,
struct zd_mac *mac = zd_hw_mac(hw);
mac->type = NL80211_IFTYPE_UNSPECIFIED;
mac->vif = NULL;
- zd_set_beacon_interval(&mac->chip, 0);
+ zd_set_beacon_interval(&mac->chip, 0, 0);
zd_write_mac_addr(&mac->chip, NULL);
}
@@ -1081,15 +1081,19 @@ static void zd_op_bss_info_changed(struct ieee80211_hw *hw,
}
if (changes & BSS_CHANGED_BEACON_ENABLED) {
- u32 interval;
-
- if (bss_conf->enable_beacon)
- interval = BCN_MODE_IBSS |
- bss_conf->beacon_int;
- else
- interval = 0;
+ u32 interval = 0;
+ u16 period = 0;
+
+ if (bss_conf->enable_beacon) {
+ period = bss_conf->dtim_period;
+ interval = bss_conf->beacon_int;
+ if (mac->type == NL80211_IFTYPE_AP)
+ interval |= BCN_MODE_AP;
+ else
+ interval |= BCN_MODE_IBSS;
+ }
- zd_set_beacon_interval(&mac->chip, interval);
+ zd_set_beacon_interval(&mac->chip, interval, period);
}
} else
associated = is_valid_ether_addr(bss_conf->bssid);
next prev parent reply other threads:[~2010-12-26 11:24 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-26 11:24 [RFC PATCH 0/6] zd1211rw: add support for AP mode Jussi Kivilinna
2010-12-26 11:24 ` [RFC PATCH 1/6] zd1211rw: fix beacon interval setup Jussi Kivilinna
2010-12-26 11:56 ` Rafał Miłecki
2010-12-26 11:24 ` [RFC PATCH 2/6] zd1211rw: support setting BSSID for AP mode Jussi Kivilinna
2010-12-26 11:24 ` Jussi Kivilinna [this message]
2010-12-26 12:14 ` [RFC PATCH 3/6] zd1211rw: let zd_set_beacon_interval() set dtim_period and add AP-beacon flag Rafał Miłecki
2010-12-26 14:50 ` Jussi Kivilinna
2010-12-26 11:24 ` [RFC PATCH 4/6] zd1211rw: implement seq_num for IEEE80211_TX_CTL_ASSIGN_SEQ Jussi Kivilinna
2010-12-26 11:24 ` [RFC PATCH 5/6] zd1211rw: implement beacon fetching and handling ieee80211_get_buffered_bc() Jussi Kivilinna
2010-12-26 12:22 ` Rafał Miłecki
2010-12-26 14:51 ` Jussi Kivilinna
2010-12-26 11:25 ` [RFC PATCH 6/6] zd1211rw: enable NL80211_IFTYPE_AP Jussi Kivilinna
2010-12-26 12:24 ` [RFC PATCH 0/6] zd1211rw: add support for AP mode Johannes Berg
2010-12-26 12:37 ` Rafał Miłecki
2010-12-26 14:53 ` Jussi Kivilinna
2010-12-27 14:28 ` Jussi Kivilinna
2010-12-27 20:03 ` Jussi Kivilinna
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101226112433.31775.89617.stgit@fate.lan \
--to=jussi.kivilinna@mbnet.fi \
--cc=dsd@gentoo.org \
--cc=kune@deine-taler.de \
--cc=linux-wireless@vger.kernel.org \
--cc=zd1211-devs@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).