On Wed, 2008-07-23 at 10:32 -0500, Larry Finger wrote: > I tried something like that, but it didn't work. Maybe you can see what is wrong > here: > > > Index: wireless-testing/drivers/net/wireless/rtl8187.h > =================================================================== > --- wireless-testing.orig/drivers/net/wireless/rtl8187.h > +++ wireless-testing/drivers/net/wireless/rtl8187.h > @@ -100,6 +100,7 @@ struct rtl8187_priv { > struct usb_device *udev; > u32 rx_conf; > u16 txpwr_base; > + u16 seqno; > u8 asic_rev; > u8 is_rtl8187b; > enum { > Index: wireless-testing/drivers/net/wireless/rtl8187_dev.c > =================================================================== > --- wireless-testing.orig/drivers/net/wireless/rtl8187_dev.c > +++ wireless-testing/drivers/net/wireless/rtl8187_dev.c > @@ -169,6 +169,7 @@ static int rtl8187_tx(struct ieee80211_h > { > struct rtl8187_priv *priv = dev->priv; > struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); > + struct ieee80211_hdr *ieee80211hdr = (struct ieee80211_hdr *)skb->data; > unsigned int ep; > void *buf; > struct urb *urb; > @@ -198,6 +199,14 @@ static int rtl8187_tx(struct ieee80211_h > flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19; > } > > + /* XXX: This sequence is an attempt to match what happens in r2x00. */ > + if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { > + if (info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT) > + priv->seqno += 0x10; > + ieee80211hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); > + ieee80211hdr->seq_ctrl |= cpu_to_le16(priv->seqno); > + } > + > if (!priv->is_rtl8187b) { > struct rtl8187_tx_hdr *hdr = > (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr)); Odd, that looks like it should work. Can you try printing the seqno and see if it does increase? Or maybe I messed up something with the flags... johannes
Attachment:
signature.asc
Description: This is a digitally signed message part