Fixes ipw2100 and ipw2200 after ieee80211 configuration cleanup. Signed-off-by: Jiri Benc Signed-off-by: Jirka Bohac Index: netdev/drivers/net/wireless/ipw2100.c =================================================================== --- netdev.orig/drivers/net/wireless/ipw2100.c 2005-09-17 14:50:50.000000000 +0200 +++ netdev/drivers/net/wireless/ipw2100.c 2005-09-17 14:52:37.000000000 +0200 @@ -3042,7 +3042,8 @@ static void ipw2100_tx_send_data(struct IPW_BD_STATUS_TX_FRAME_NOT_LAST_FRAGMENT; tbd->buf_length = packet->info.d_struct.txb-> - fragments[i]->len - IEEE80211_3ADDR_LEN; + fragments[i]->len - IEEE80211_3ADDR_LEN - + IEEE80211_FCS_LEN; tbd->host_addr = pci_map_single( priv->pci_dev, @@ -3294,9 +3295,9 @@ static int ipw2100_tx(struct ieee80211_t packet->info.d_struct.txb = txb; IPW_DEBUG_TX("Sending fragment (%d bytes):\n", - txb->fragments[0]->len); + txb->fragments[0]->len - IEEE80211_FCS_LEN); printk_buf(IPW_DL_TX, txb->fragments[0]->data, - txb->fragments[0]->len); + txb->fragments[0]->len - IEEE80211_FCS_LEN); packet->jiffy_start = jiffies; @@ -6333,6 +6334,7 @@ static struct net_device *ipw2100_alloc_ ieee = alloc_ieee80211(sizeof(struct ipw2100_priv)); if (!ieee) return NULL; + ieee->config &= ~IEEE80211_CFG_COMPUTE_FCS; dev = ieee80211_dev(ieee); priv = ieee80211_priv(ieee); priv->ieee = ieee; Index: netdev/drivers/net/wireless/ipw2200.c =================================================================== --- netdev.orig/drivers/net/wireless/ipw2200.c 2005-09-17 14:50:50.000000000 +0200 +++ netdev/drivers/net/wireless/ipw2200.c 2005-09-17 14:52:37.000000000 +0200 @@ -6391,16 +6391,16 @@ static inline void ipw_tx_skb(struct ipw for (i = 0; i < tfd->u.data.num_chunks; i++) { IPW_DEBUG_TX("Dumping TX packet frag %i of %i (%d bytes):\n", i, tfd->u.data.num_chunks, - txb->fragments[i]->len - hdr_len); + txb->fragments[i]->len - hdr_len - IEEE80211_FCS_LEN); printk_buf(IPW_DL_TX, txb->fragments[i]->data + hdr_len, - txb->fragments[i]->len - hdr_len); + txb->fragments[i]->len - hdr_len - IEEE80211_FCS_LEN); tfd->u.data.chunk_ptr[i] = pci_map_single(priv->pci_dev, txb->fragments[i]->data + hdr_len, - txb->fragments[i]->len - hdr_len, + txb->fragments[i]->len - hdr_len - IEEE80211_FCS_LEN, PCI_DMA_TODEVICE); - tfd->u.data.chunk_len[i] = txb->fragments[i]->len - hdr_len; + tfd->u.data.chunk_len[i] = txb->fragments[i]->len - hdr_len - IEEE80211_FCS_LEN; } if (i != txb->nr_frags) { @@ -6409,7 +6409,7 @@ static inline void ipw_tx_skb(struct ipw int j; for (j = i; j < txb->nr_frags; j++) - remaining_bytes += txb->fragments[j]->len - hdr_len; + remaining_bytes += txb->fragments[j]->len - hdr_len - IEEE80211_FCS_LEN; printk(KERN_INFO "Trying to reallocate for %d bytes\n", remaining_bytes); @@ -6417,7 +6417,7 @@ static inline void ipw_tx_skb(struct ipw if (skb != NULL) { tfd->u.data.chunk_len[i] = remaining_bytes; for (j = i; j < txb->nr_frags; j++) { - int size = txb->fragments[j]->len - hdr_len; + int size = txb->fragments[j]->len - hdr_len - IEEE80211_FCS_LEN; printk(KERN_INFO "Adding frag %d %d...\n", j, size); memcpy(skb_put(skb, size), @@ -7006,6 +7006,8 @@ static int ipw_pci_probe(struct pci_dev err = -ENOMEM; goto out; } + ieee->config &= ~IEEE80211_CFG_COMPUTE_FCS; + net_dev = ieee80211_dev(ieee); priv = ieee80211_priv(ieee);