All of lore.kernel.org
 help / color / mirror / Atom feed
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);


  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.