linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/15] mac80211/iwlwifi (#everything): integrate IEEE802.11n support
@ 2007-11-26 14:14 Ron Rindjunsky
  2007-11-26 14:14 ` [PATCH 01/15] mac80211: adding MAC80211_HT_DEBUG config variable Ron Rindjunsky
                   ` (15 more replies)
  0 siblings, 16 replies; 40+ messages in thread
From: Ron Rindjunsky @ 2007-11-26 14:14 UTC (permalink / raw)
  To: linville; +Cc: johannes, linux-wireless, flamingice, tomas.winkler

This series of patches contains all 802.11n code + fixes of comments to
the first two cycles of 802.11n patches.

Fixed list:
===========
 - removing MAC80211_HT from config and all *.[ch] files
 - removing IWL4965 config dependency on MAC80211_HT
 - adding MAC80211_HT_DEBUG to config file and to relevant places
 - refine TODO remark in ieee80211_sta_process_addba_request
 - net_ratelimit() added to relevant prints
 - renaming ieee80211_rx_h_data_agg to ieee80211_rx_h_amsdu
 - removing parentheses from IEEE80211_CONF_SUPPORT_HT_MODE use
 - changing amsdu_frame type from u16 to u8
 - adding define SUPP_MCS_SET_LEN 16 to indicate MCS set length
 - fixes to some typos
 - Changes to Rx handlers PAE and drop unencrypted (for EAPOL frames in amsdu)

If this series is accepted then next series will contain the follow:

TODO list (planned for next series of patches)
==============================================
 - Full A-MPDU aggregation capability.
 - AP flows
 - Examine config flows in mac80211 (RFC is prepered)

Notes to this series:
======================
This series of patches splits into two parts:
 - patches 1-7 add 802.11n support to mac80211.
 - patches 8-15 demonstrates the use of the above mac80211's 802.11n framework through iwl4965 low level driver

In order to be compatible with the 802.11n requirements for an HT station,
patches 1-7 should not be treated as stand alone patches, but as a complete framework,
although separation to patches by subjects was made for ease of handling.
This applies to patches 8-15 as well.

The patches do _not_ break any existing driver.

patches were made (and tested to work) with wireless branch 2.6.24-rc3 (#everything)

The framework includes the following:
- HT probing.
- HT association.
- Support in Rx A-MSDU.
- Support in A-MPDU addBA request.
- HT information and configuration delivery to both low-level driver and rate scaling.
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

^ permalink raw reply	[flat|nested] 40+ messages in thread
* [PATCH 06/15] mac80211: adding 802.11n essential A-MSDU Rx capability
@ 2007-11-22 17:49 Ron Rindjunsky
  2007-11-24 21:44 ` Johannes Berg
  0 siblings, 1 reply; 40+ messages in thread
From: Ron Rindjunsky @ 2007-11-22 17:49 UTC (permalink / raw)
  To: linville
  Cc: johannes, linux-wireless, flamingice, tomas.winkler,
	Ron Rindjunsky

This patch adds the ability to receive and handle A-MSDU frames.

Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com>
---
 net/mac80211/ieee80211_i.h |    1 +
 net/mac80211/rx.c          |  216 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 217 insertions(+), 0 deletions(-)

Index: wl2_6_24_HT/net/mac80211/ieee80211_i.h
===================================================================
--- wl2_6_24_HT.orig/net/mac80211/ieee80211_i.h
+++ wl2_6_24_HT/net/mac80211/ieee80211_i.h
@@ -155,6 +155,7 @@ struct ieee80211_txrx_data {
 			int load;
 			u32 tkip_iv32;
 			u16 tkip_iv16;
+			u8  amsdu_frame;
 		} rx;
 	} u;
 };
Index: wl2_6_24_HT/net/mac80211/rx.c
===================================================================
--- wl2_6_24_HT.orig/net/mac80211/rx.c
+++ wl2_6_24_HT/net/mac80211/rx.c
@@ -243,6 +243,10 @@ ieee80211_rx_h_parse_qos(struct ieee8021
 		u8 *qc = data + ieee80211_get_hdrlen(rx->fc) - QOS_CONTROL_LEN;
 		/* frame has qos control */
 		tid = qc[0] & QOS_CONTROL_TID_MASK;
+		if (qc[0] & IEEE80211_QOS_CONTROL_A_MSDU_PRESENT)
+			rx->u.rx.amsdu_frame = 1;
+		else
+			rx->u.rx.amsdu_frame = 0;
 	} else {
 		if (unlikely((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT)) {
 			/* Separate TID for management frames */
@@ -1191,6 +1195,125 @@ ieee80211_deliver_skb(struct ieee80211_t
 }
 
 static ieee80211_txrx_result
+ieee80211_rx_h_amsdu(struct ieee80211_txrx_data *rx)
+{
+	struct net_device *dev = rx->dev;
+	struct ieee80211_local *local = rx->local;
+	u16 fc, ethertype;
+	u8 *payload;
+	struct sk_buff *skb = rx->skb, *frame = NULL;
+	const struct ethhdr *eth;
+	int remaining, err;
+	u8 dst[ETH_ALEN];
+	u8 src[ETH_ALEN];
+	DECLARE_MAC_BUF(mac);
+
+	fc = rx->fc;
+	if (unlikely((fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA))
+		return TXRX_CONTINUE;
+
+	if (unlikely(!WLAN_FC_DATA_PRESENT(fc)))
+		return TXRX_DROP;
+
+	if (!rx->u.rx.amsdu_frame)
+		return TXRX_CONTINUE;
+
+	err = ieee80211_data_to_8023(rx);
+	if (unlikely(err))
+		return TXRX_DROP;
+
+	skb->dev = dev;
+
+	dev->stats.rx_packets++;
+	dev->stats.rx_bytes += skb->len;
+
+	/* skip the wrapping header */
+	eth = (struct ethhdr *) skb_pull(skb, sizeof(struct ethhdr));
+	if (!eth)
+		return TXRX_DROP;
+
+	while (skb != frame) {
+		u8 padding;
+		__be16 len = eth->h_proto;
+		unsigned int subframe_len = sizeof(struct ethhdr) + ntohs(len);
+
+		remaining = skb->len;
+		memcpy(dst, eth->h_dest, ETH_ALEN);
+		memcpy(src, eth->h_source, ETH_ALEN);
+
+		padding = ((4 - subframe_len) & 0x3);
+		/* the last MSDU has no padding */
+		if (subframe_len > remaining) {
+			printk(KERN_DEBUG "%s: wrong buffer size", dev->name);
+			return TXRX_DROP;
+		}
+
+		skb_pull(skb, sizeof(struct ethhdr));
+		/* if last subframe reuse skb */
+		if (remaining <= subframe_len + padding)
+			frame = skb;
+		else {
+			frame = dev_alloc_skb(local->hw.extra_tx_headroom +
+					      subframe_len);
+
+			if (frame == NULL)
+				return TXRX_DROP;
+
+			skb_reserve(frame, local->hw.extra_tx_headroom +
+				    sizeof(struct ethhdr));
+			memcpy(skb_put(frame, ntohs(len)), skb->data,
+				ntohs(len));
+
+			eth = (struct ethhdr *) skb_pull(skb, ntohs(len) +
+							padding);
+			if (!eth) {
+				printk(KERN_DEBUG "%s: wrong buffer size ",
+				       dev->name);
+				dev_kfree_skb(frame);
+				return TXRX_DROP;
+			}
+		}
+
+		skb_set_network_header(frame, 0);
+		frame->dev = dev;
+		frame->priority = skb->priority;
+		rx->skb = frame;
+
+		if ((ieee80211_drop_802_1x_pae(rx, 0)) ||
+		    (ieee80211_drop_unencrypted(rx, 0))) {
+			if (skb == frame) /* last frame */
+				return TXRX_DROP;
+			dev_kfree_skb(frame);
+			continue;
+		}
+
+		payload = frame->data;
+		ethertype = (payload[6] << 8) | payload[7];
+
+		if (likely((compare_ether_addr(payload, rfc1042_header) == 0 &&
+			ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
+			compare_ether_addr(payload,
+					   bridge_tunnel_header) == 0)) {
+			/* remove RFC1042 or Bridge-Tunnel
+			 * encapsulation and replace EtherType */
+			skb_pull(frame, 6);
+			memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN);
+			memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN);
+		} else {
+			memcpy(skb_push(frame, sizeof(__be16)), &len,
+				sizeof(__be16));
+			memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN);
+			memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN);
+		}
+
+
+		ieee80211_deliver_skb(rx);
+	}
+
+	return TXRX_QUEUED;
+}
+
+static ieee80211_txrx_result
 ieee80211_rx_h_data(struct ieee80211_txrx_data *rx)
 {
 	struct net_device *dev = rx->dev;
@@ -1368,6 +1491,7 @@ ieee80211_rx_handler ieee80211_rx_handle
 	 * are not passed to user space by these functions
 	 */
 	ieee80211_rx_h_remove_qos_control,
+	ieee80211_rx_h_amsdu,
 	ieee80211_rx_h_data,
 	ieee80211_rx_h_mgmt,
 	NULL
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

^ permalink raw reply	[flat|nested] 40+ messages in thread
* [PATCH 06/15] mac80211: adding 802.11n essential A-MSDU Rx capability
@ 2007-11-21  8:47 Ron Rindjunsky
  0 siblings, 0 replies; 40+ messages in thread
From: Ron Rindjunsky @ 2007-11-21  8:47 UTC (permalink / raw)
  To: linville
  Cc: johannes, linux-wireless, flamingice, tomas.winkler,
	Ron Rindjunsky

This patch adds the ability to receive and handle A-MSDU frames.

Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com>
---
 net/mac80211/ieee80211_i.h |    1 +
 net/mac80211/rx.c          |  216 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 217 insertions(+), 0 deletions(-)

Index: wl2_6_24_HT/net/mac80211/ieee80211_i.h
===================================================================
--- wl2_6_24_HT.orig/net/mac80211/ieee80211_i.h
+++ wl2_6_24_HT/net/mac80211/ieee80211_i.h
@@ -155,6 +155,7 @@ struct ieee80211_txrx_data {
 			int load;
 			u32 tkip_iv32;
 			u16 tkip_iv16;
+			u8  amsdu_frame;
 		} rx;
 	} u;
 };
Index: wl2_6_24_HT/net/mac80211/rx.c
===================================================================
--- wl2_6_24_HT.orig/net/mac80211/rx.c
+++ wl2_6_24_HT/net/mac80211/rx.c
@@ -243,6 +243,10 @@ ieee80211_rx_h_parse_qos(struct ieee8021
 		u8 *qc = data + ieee80211_get_hdrlen(rx->fc) - QOS_CONTROL_LEN;
 		/* frame has qos control */
 		tid = qc[0] & QOS_CONTROL_TID_MASK;
+		if (qc[0] & IEEE80211_QOS_CONTROL_A_MSDU_PRESENT)
+			rx->u.rx.amsdu_frame = 1;
+		else
+			rx->u.rx.amsdu_frame = 0;
 	} else {
 		if (unlikely((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT)) {
 			/* Separate TID for management frames */
@@ -1134,6 +1138,165 @@ ieee80211_data_to_8023(struct ieee80211_
 }
 
 static ieee80211_txrx_result
+ieee80211_rx_h_amsdu(struct ieee80211_txrx_data *rx)
+{
+	struct net_device *dev = rx->dev;
+	struct ieee80211_local *local = rx->local;
+	u16 fc, ethertype;
+	u8 *payload;
+	struct sk_buff *skb = rx->skb, *skb2, *frame = NULL;
+	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+	const struct ethhdr *eth;
+	int remaining, err;
+	u8 dst[ETH_ALEN];
+	u8 src[ETH_ALEN];
+	DECLARE_MAC_BUF(mac);
+
+	fc = rx->fc;
+	if (unlikely((fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA))
+		return TXRX_CONTINUE;
+
+	if (unlikely(!WLAN_FC_DATA_PRESENT(fc)))
+		return TXRX_DROP;
+
+	if (!rx->u.rx.amsdu_frame)
+		return TXRX_CONTINUE;
+
+	err = ieee80211_data_to_8023(rx);
+	if (unlikely(err))
+		return TXRX_DROP;
+
+	/* skip the wrapping header */
+	eth = (struct ethhdr *) skb_pull(skb, sizeof(struct ethhdr));
+	if (!eth)
+		return TXRX_DROP;
+
+	while (skb != frame) {
+		u8 padding;
+		__be16 len = eth->h_proto;
+		unsigned int subframe_len = sizeof(struct ethhdr) + ntohs(len);
+
+		remaining = skb->len;
+		memcpy(dst, eth->h_dest, ETH_ALEN);
+		memcpy(src, eth->h_source, ETH_ALEN);
+
+		padding = ((4 - subframe_len) & 0x3);
+		/* the last MSDU has no padding */
+		if (subframe_len > remaining) {
+			printk(KERN_DEBUG "%s: wrong buffer size", dev->name);
+			return TXRX_DROP;
+		}
+
+		skb_pull(skb, sizeof(struct ethhdr));
+		/* if last subframe reuse skb */
+		if (remaining <= subframe_len + padding)
+			frame = skb;
+		else {
+			frame = dev_alloc_skb(local->hw.extra_tx_headroom +
+					      subframe_len);
+
+			if (frame == NULL)
+				return TXRX_DROP;
+
+			skb_reserve(frame, local->hw.extra_tx_headroom +
+				    sizeof(struct ethhdr));
+			memcpy(skb_put(frame, ntohs(len)), skb->data,
+				ntohs(len));
+
+			eth = (struct ethhdr *) skb_pull(skb, ntohs(len) +
+							padding);
+			if (!eth) {
+				printk(KERN_DEBUG "%s: wrong buffer size ",
+				       dev->name);
+				dev_kfree_skb(frame);
+				return TXRX_DROP;
+			}
+		}
+		skb2 = NULL;
+
+		payload = frame->data;
+		ethertype = (payload[6] << 8) | payload[7];
+
+		if (likely((compare_ether_addr(payload, rfc1042_header) == 0 &&
+			ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
+			compare_ether_addr(payload,
+					   bridge_tunnel_header) == 0)) {
+			/* remove RFC1042 or Bridge-Tunnel
+			 * encapsulation and replace EtherType */
+			skb_pull(frame, 6);
+			memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN);
+			memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN);
+		} else {
+			memcpy(skb_push(frame, sizeof(__be16)), &len,
+				sizeof(__be16));
+			memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN);
+			memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN);
+		}
+
+		rx->skb = frame;
+		if ((ieee80211_drop_802_1x_pae(rx, sizeof(struct ethhdr))) ||
+		    (ieee80211_drop_unencrypted(rx, sizeof(struct ethhdr)))) {
+			if (skb == frame) /* last frame */
+				return TXRX_DROP;
+			dev_kfree_skb(frame);
+			continue;
+		}
+
+		if (local->bridge_packets &&
+		    (sdata->type == IEEE80211_IF_TYPE_AP ||
+		     sdata->type == IEEE80211_IF_TYPE_VLAN) &&
+		     (rx->flags & IEEE80211_TXRXD_RXRA_MATCH)) {
+			if (is_multicast_ether_addr(frame->data)) {
+				/* send multicast frames both to higher layers
+				 * in local net stack and back to the wireless
+				 * media */
+				skb2 = skb_copy(frame, GFP_ATOMIC);
+				if (!skb2)
+					printk(KERN_DEBUG "%s: failed to clone"
+					       " multicast frame\n", dev->name);
+			} else {
+				struct sta_info *dsta;
+
+				dsta = sta_info_get(local, frame->data);
+				if (dsta && !dsta->dev)
+					printk(KERN_DEBUG "Station with null "
+					       "dev structure!\n");
+				else if (dsta && dsta->dev == dev) {
+					/* Destination station is associated
+					 *to this AP, so send the frame
+					 * directly to it and do not pass
+					 * the frame to local net stack.
+					 */
+					skb2 = frame;
+					frame = NULL;
+				}
+				if (dsta)
+					sta_info_put(dsta);
+			}
+		}
+		if (frame) {
+			/* deliver to local stack */
+			skb_set_network_header(frame, 0);
+			frame->protocol = eth_type_trans(frame, dev);
+			frame->priority = skb->priority;
+			netif_rx(frame);
+		}
+
+		if (skb2) {
+			/* send to wireless media */
+			skb2->protocol = __constant_htons(ETH_P_802_3);
+			skb_set_network_header(skb2, 0);
+			skb_set_mac_header(skb2, 0);
+			skb2->priority = skb->priority;
+			skb2->dev = dev;
+			dev_queue_xmit(skb2);
+		}
+	}
+
+	return TXRX_QUEUED;
+}
+
+static ieee80211_txrx_result
 ieee80211_rx_h_data(struct ieee80211_txrx_data *rx)
 {
 	struct net_device *dev = rx->dev;
@@ -1359,6 +1522,7 @@ ieee80211_rx_handler ieee80211_rx_handle
 	 * are not passed to user space by these functions
 	 */
 	ieee80211_rx_h_remove_qos_control,
+	ieee80211_rx_h_amsdu,
 	ieee80211_rx_h_data,
 	ieee80211_rx_h_mgmt,
 	NULL
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

^ permalink raw reply	[flat|nested] 40+ messages in thread
* [PATCH 0/15] mac80211/iwlwifi (#everything): integrate IEEE802.11n support
@ 2007-11-14 15:29 Ron Rindjunsky
  2007-11-14 15:29 ` [PATCH 06/15] mac80211: adding 802.11n essential A-MSDU Rx capability Ron Rindjunsky
  0 siblings, 1 reply; 40+ messages in thread
From: Ron Rindjunsky @ 2007-11-14 15:29 UTC (permalink / raw)
  To: linville; +Cc: johannes, linux-wireless, flamingice, tomas.winkler

This series of patches contains all 802.11n code + fixes of comments to
the first cycle of 802.11n patches.

Fixed list:
===========
 - removing MAC80211_HT from config and all *.[ch] files
 - removing IWL4965 config dependency on MAC80211_HT
 - adding MAC80211_HT_DEBUG to config file and to relevant places
 - refine TODO remark in ieee80211_sta_process_addba_request
 - net_ratelimit() added to relevant prints
 - renaming ieee80211_rx_h_data_agg to ieee80211_rx_h_amsdu
 - removing parentheses from IEEE80211_CONF_SUPPORT_HT_MODE use
 - changing amsdu_frame type from u16 to u8
 - adding define SUPP_MCS_SET_LEN 16 to indicate MCS set length
 - fixes to some typos

If this series is accepted then next series will contain the follow:

TODO list (planned for next series of patches)
==============================================
 - Full A-MPDU aggregation capability.
 - AP flows
 - Changes to Rx handlers PAE and drop unencrypted (for EAPOL frames in amsdu)
 - Examine config flows in mac80211 (RFC is prepered)

Notes to this series:
======================
This series of patches splits into two parts:
 - patches 1-7 add 802.11n support to mac80211.
 - patches 8-15 demonstrates the use of the above mac80211's 802.11n framework through iwl4965 low level driver

In order to be compatible with the 802.11n requirements for an HT station,
patches 1-7 should not be treated as stand alone patches, but as a complete framework,
although separation to patches by subjects was made for ease of handling.
This applies to patches 8-15 as well.

The patches do _not_ break any existing driver.

patches were made (and tested to work) with wireless branch 2.6.24-rc1 (#everything)

The framework includes the following:
- HT probing.
- HT association.
- Support in Rx A-MSDU.
- Support in A-MPDU addBA request.
- HT information and configuration delivery to both low-level driver and rate scaling.
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

^ permalink raw reply	[flat|nested] 40+ messages in thread

end of thread, other threads:[~2007-11-27 13:09 UTC | newest]

Thread overview: 40+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-26 14:14 [PATCH 0/15] mac80211/iwlwifi (#everything): integrate IEEE802.11n support Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 01/15] mac80211: adding MAC80211_HT_DEBUG config variable Ron Rindjunsky
2007-11-26 16:26   ` Johannes Berg
2007-11-26 14:14 ` [PATCH 02/15] mac80211: adding 802.11n definitions in ieee80211.h Ron Rindjunsky
2007-11-26 16:27   ` Johannes Berg
2007-11-26 14:14 ` [PATCH 03/15] mac80211: adding 802.11n HT framework definitions Ron Rindjunsky
2007-11-26 16:28   ` Johannes Berg
2007-11-26 14:14 ` [PATCH 04/15] mac80211: adding 802.11n IEs handling Ron Rindjunsky
2007-11-26 16:29   ` Johannes Berg
2007-11-26 16:57     ` Andreas Schwab
2007-11-26 17:00       ` Johannes Berg
2007-11-26 18:00         ` Andreas Schwab
2007-11-27 13:08           ` Johannes Berg
2007-11-26 14:14 ` [PATCH 05/15] mac80211: adding 802.11n essential A-MPDU addBA capability Ron Rindjunsky
2007-11-26 16:31   ` Johannes Berg
2007-11-27  9:27     ` Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 06/15] mac80211: adding 802.11n essential A-MSDU Rx capability Ron Rindjunsky
2007-11-26 16:35   ` Johannes Berg
2007-11-26 17:25     ` Tomas Winkler
2007-11-26 18:40   ` Michael Wu
2007-11-27  9:48     ` Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 07/15] mac80211: adding 802.11n configuration flows Ron Rindjunsky
2007-11-26 16:36   ` Johannes Berg
2007-11-27  9:34     ` Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 08/15] iwlwifi: 802.11n remove unnecessary config dependency Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 09/15] iwlwifi: 802.11n new framework structures preperation Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 10/15] iwlwifi: 802.11n configuring hw_mode parameters to support HT in A/G Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 11/15] iwlwifi: 802.11n handling probe request HT IE Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 12/15] iwlwifi: 802.11n comply HT self configuration flow with mac80211 framework Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 13/15] iwlwifi: 802.11n comply HT add station " Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 14/15] iwlwifi: 802.11n comply HT rate scaling flows " Ron Rindjunsky
2007-11-26 14:14 ` [PATCH 15/15] iwlwifi: 802.11n add support to 8K A-MSDU Rx frames Ron Rindjunsky
2007-11-26 16:26   ` Johannes Berg
2007-11-26 17:15     ` Tomas Winkler
2007-11-27  1:34 ` [PATCH 0/15] mac80211/iwlwifi (#everything): integrate IEEE802.11n support Luis R. Rodriguez
2007-11-27  9:12   ` Ron Rindjunsky
  -- strict thread matches above, loose matches on Subject: below --
2007-11-22 17:49 [PATCH 06/15] mac80211: adding 802.11n essential A-MSDU Rx capability Ron Rindjunsky
2007-11-24 21:44 ` Johannes Berg
2007-11-21  8:47 Ron Rindjunsky
2007-11-14 15:29 [PATCH 0/15] mac80211/iwlwifi (#everything): integrate IEEE802.11n support Ron Rindjunsky
2007-11-14 15:29 ` [PATCH 06/15] mac80211: adding 802.11n essential A-MSDU Rx capability Ron Rindjunsky

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).