|
@@ -169,6 +169,7 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
|
|
|
{
|
|
|
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;
|
|
@@ -234,6 +235,20 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
|
|
|
ep = epmap[skb_get_queue_mapping(skb)];
|
|
|
}
|
|
|
|
|
|
+ /* FIXME: The sequence that follows is needed for this driver to
|
|
|
+ * work with mac80211 since "mac80211: fix TX sequence numbers".
|
|
|
+ * As with the temporary code in rt2x00, changes will be needed
|
|
|
+ * to get proper sequence numbers on beacons. In addition, this
|
|
|
+ * patch places the sequence number in the hardware state, which
|
|
|
+ * limits us to a single virtual state.
|
|
|
+ */
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
info->driver_data[0] = dev;
|
|
|
info->driver_data[1] = urb;
|
|
|
|