Search Linux Wireless

[RFC] iwlagn: reenable AP mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: John W. Linville <linville@xxxxxxxxxxxxx>
---
Really just poking around here...am I on the right track?  Or is the
iwlagn firmware supposed to handle buffering broadcast frames?

Looking at Johannes's docs, I don't see anything that seems
to relate to "implement sequence numbering for frames with the
IEEE80211_TX_CTL_ASSIGN_SEQ flag (or ask the hardware to do it for
those frames)".  Anyone know how to ask the hardware to do that?

I also don't see anything for "When sending probe response frames,
the timestamp must be adjusted by the hardware or firmware."  But,
I didn't look too hard -- maybe I missed it?

 drivers/net/wireless/iwlwifi/iwl-agn.c |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 2bbd04d..d02874e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -558,9 +558,17 @@ static void iwl_bg_beacon_update(struct work_struct *work)
 {
 	struct iwl_priv *priv =
 		container_of(work, struct iwl_priv, beacon_update);
-	struct sk_buff *beacon;
+	struct sk_buff *beacon, *skb;
 
-	/* Pull updated AP beacon from mac80211. will fail if not in AP mode */
+	/* Tx buffered bcast/mcast traffic. */
+	skb = ieee80211_get_buffered_bc(priv->hw, priv->vif);
+	while (skb) {
+		if (iwl_tx_skb(priv, skb))
+			dev_kfree_skb_any(skb);
+		skb = ieee80211_get_buffered_bc(priv->hw, priv->vif);
+	}
+
+	/* Pull updated AP beacon from mac80211. */
 	beacon = ieee80211_beacon_get(priv->hw, priv->vif);
 
 	if (!beacon) {
@@ -2316,7 +2324,8 @@ static int iwl_setup_mac(struct iwl_priv *priv)
 	hw->flags = IEEE80211_HW_SIGNAL_DBM |
 		    IEEE80211_HW_NOISE_DBM |
 		    IEEE80211_HW_AMPDU_AGGREGATION |
-		    IEEE80211_HW_SPECTRUM_MGMT;
+		    IEEE80211_HW_SPECTRUM_MGMT |
+		    IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING;
 
 	if (!priv->cfg->broken_powersave)
 		hw->flags |= IEEE80211_HW_SUPPORTS_PS |
@@ -2324,6 +2333,7 @@ static int iwl_setup_mac(struct iwl_priv *priv)
 
 	hw->sta_data_size = sizeof(struct iwl_station_priv);
 	hw->wiphy->interface_modes =
+		BIT(NL80211_IFTYPE_AP) |
 		BIT(NL80211_IFTYPE_STATION) |
 		BIT(NL80211_IFTYPE_ADHOC);
 
-- 
1.6.2.5

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux