diff options
author | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-01 23:55:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-01 23:55:21 -0500 |
commit | 116b23b0ed36f8d5b56d16ac50266fce8de904c1 (patch) | |
tree | 81f7c80bc2e691c327fe7572a4f9b517e47bb101 | |
parent | b6ef977b608b01e0f338afd9445cab5436c61e00 (diff) | |
parent | 9e1402ab89623f08c8dc06ec395e3214e1ec7848 (diff) |
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6:
[PATCH] Fix an offset error when reading the CS89x0 ADD_PORT register
[PATCH] spidernet: poor network performance
[PATCH] Spidernet: remove ETH_ZLEN check in earlier patch
[PATCH] bonding: fix an oops when slave device does not provide get_stats
[PATCH] drivers/net: SAA9730: Fix build error
Revert "[PATCH] zd1211rw: Removed unneeded packed attributes"
[PATCH] zd1211rw: Fix of a locking bug
[PATCH] softmac: remove netif_tx_disable when scanning
[PATCH] ieee80211: Fix kernel panic when QoS is enabled
-rw-r--r-- | drivers/net/Kconfig | 4 | ||||
-rw-r--r-- | drivers/net/bonding/bond_main.c | 63 | ||||
-rw-r--r-- | drivers/net/cs89x0.c | 4 | ||||
-rw-r--r-- | drivers/net/spider_net.c | 20 | ||||
-rw-r--r-- | drivers/net/spider_net.h | 8 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_ieee80211.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_mac.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_mac.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.c | 26 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.h | 14 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_tx.c | 4 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_scan.c | 2 |
12 files changed, 76 insertions, 77 deletions
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index b6c70c58ae99..d3abf80ea3e2 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -1769,8 +1769,8 @@ config VIA_RHINE_NAPI | |||
1769 | information. | 1769 | information. |
1770 | 1770 | ||
1771 | config LAN_SAA9730 | 1771 | config LAN_SAA9730 |
1772 | bool "Philips SAA9730 Ethernet support (EXPERIMENTAL)" | 1772 | bool "Philips SAA9730 Ethernet support" |
1773 | depends on NET_PCI && EXPERIMENTAL && MIPS | 1773 | depends on NET_PCI && PCI && MIPS_ATLAS |
1774 | help | 1774 | help |
1775 | The SAA9730 is a combined multimedia and peripheral controller used | 1775 | The SAA9730 is a combined multimedia and peripheral controller used |
1776 | in thin clients, Internet access terminals, and diskless | 1776 | in thin clients, Internet access terminals, and diskless |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 17a461152d39..488d8ed9e740 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1336,6 +1336,13 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1336 | goto err_undo_flags; | 1336 | goto err_undo_flags; |
1337 | } | 1337 | } |
1338 | 1338 | ||
1339 | if (slave_dev->get_stats == NULL) { | ||
1340 | printk(KERN_NOTICE DRV_NAME | ||
1341 | ": %s: the driver for slave device %s does not provide " | ||
1342 | "get_stats function, network statistics will be " | ||
1343 | "inaccurate.\n", bond_dev->name, slave_dev->name); | ||
1344 | } | ||
1345 | |||
1339 | new_slave = kmalloc(sizeof(struct slave), GFP_KERNEL); | 1346 | new_slave = kmalloc(sizeof(struct slave), GFP_KERNEL); |
1340 | if (!new_slave) { | 1347 | if (!new_slave) { |
1341 | res = -ENOMEM; | 1348 | res = -ENOMEM; |
@@ -3605,33 +3612,35 @@ static struct net_device_stats *bond_get_stats(struct net_device *bond_dev) | |||
3605 | read_lock_bh(&bond->lock); | 3612 | read_lock_bh(&bond->lock); |
3606 | 3613 | ||
3607 | bond_for_each_slave(bond, slave, i) { | 3614 | bond_for_each_slave(bond, slave, i) { |
3608 | sstats = slave->dev->get_stats(slave->dev); | 3615 | if (slave->dev->get_stats) { |
3609 | 3616 | sstats = slave->dev->get_stats(slave->dev); | |
3610 | stats->rx_packets += sstats->rx_packets; | 3617 | |
3611 | stats->rx_bytes += sstats->rx_bytes; | 3618 | stats->rx_packets += sstats->rx_packets; |
3612 | stats->rx_errors += sstats->rx_errors; | 3619 | stats->rx_bytes += sstats->rx_bytes; |
3613 | stats->rx_dropped += sstats->rx_dropped; | 3620 | stats->rx_errors += sstats->rx_errors; |
3614 | 3621 | stats->rx_dropped += sstats->rx_dropped; | |
3615 | stats->tx_packets += sstats->tx_packets; | 3622 | |
3616 | stats->tx_bytes += sstats->tx_bytes; | 3623 | stats->tx_packets += sstats->tx_packets; |
3617 | stats->tx_errors += sstats->tx_errors; | 3624 | stats->tx_bytes += sstats->tx_bytes; |
3618 | stats->tx_dropped += sstats->tx_dropped; | 3625 | stats->tx_errors += sstats->tx_errors; |
3619 | 3626 | stats->tx_dropped += sstats->tx_dropped; | |
3620 | stats->multicast += sstats->multicast; | 3627 | |
3621 | stats->collisions += sstats->collisions; | 3628 | stats->multicast += sstats->multicast; |
3622 | 3629 | stats->collisions += sstats->collisions; | |
3623 | stats->rx_length_errors += sstats->rx_length_errors; | 3630 | |
3624 | stats->rx_over_errors += sstats->rx_over_errors; | 3631 | stats->rx_length_errors += sstats->rx_length_errors; |
3625 | stats->rx_crc_errors += sstats->rx_crc_errors; | 3632 | stats->rx_over_errors += sstats->rx_over_errors; |
3626 | stats->rx_frame_errors += sstats->rx_frame_errors; | 3633 | stats->rx_crc_errors += sstats->rx_crc_errors; |
3627 | stats->rx_fifo_errors += sstats->rx_fifo_errors; | 3634 | stats->rx_frame_errors += sstats->rx_frame_errors; |
3628 | stats->rx_missed_errors += sstats->rx_missed_errors; | 3635 | stats->rx_fifo_errors += sstats->rx_fifo_errors; |
3629 | 3636 | stats->rx_missed_errors += sstats->rx_missed_errors; | |
3630 | stats->tx_aborted_errors += sstats->tx_aborted_errors; | 3637 | |
3631 | stats->tx_carrier_errors += sstats->tx_carrier_errors; | 3638 | stats->tx_aborted_errors += sstats->tx_aborted_errors; |
3632 | stats->tx_fifo_errors += sstats->tx_fifo_errors; | 3639 | stats->tx_carrier_errors += sstats->tx_carrier_errors; |
3633 | stats->tx_heartbeat_errors += sstats->tx_heartbeat_errors; | 3640 | stats->tx_fifo_errors += sstats->tx_fifo_errors; |
3634 | stats->tx_window_errors += sstats->tx_window_errors; | 3641 | stats->tx_heartbeat_errors += sstats->tx_heartbeat_errors; |
3642 | stats->tx_window_errors += sstats->tx_window_errors; | ||
3643 | } | ||
3635 | } | 3644 | } |
3636 | 3645 | ||
3637 | read_unlock_bh(&bond->lock); | 3646 | read_unlock_bh(&bond->lock); |
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c index 4ffc9b44a8e1..dec70c2b374a 100644 --- a/drivers/net/cs89x0.c +++ b/drivers/net/cs89x0.c | |||
@@ -588,10 +588,10 @@ cs89x0_probe1(struct net_device *dev, int ioaddr, int modular) | |||
588 | goto out2; | 588 | goto out2; |
589 | } | 589 | } |
590 | } | 590 | } |
591 | printk(KERN_DEBUG "PP_addr at %x[%x]: 0x%x\n", | ||
592 | ioaddr, ADD_PORT, readword(ioaddr, ADD_PORT)); | ||
593 | 591 | ||
594 | ioaddr &= ~3; | 592 | ioaddr &= ~3; |
593 | printk(KERN_DEBUG "PP_addr at %x[%x]: 0x%x\n", | ||
594 | ioaddr, ADD_PORT, readword(ioaddr, ADD_PORT)); | ||
595 | writeword(ioaddr, ADD_PORT, PP_ChipID); | 595 | writeword(ioaddr, ADD_PORT, PP_ChipID); |
596 | 596 | ||
597 | tmp = readword(ioaddr, DATA_PORT); | 597 | tmp = readword(ioaddr, DATA_PORT); |
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c index 418138dd6c68..cef7e6671c49 100644 --- a/drivers/net/spider_net.c +++ b/drivers/net/spider_net.c | |||
@@ -644,20 +644,12 @@ spider_net_prepare_tx_descr(struct spider_net_card *card, | |||
644 | struct spider_net_descr *descr; | 644 | struct spider_net_descr *descr; |
645 | dma_addr_t buf; | 645 | dma_addr_t buf; |
646 | unsigned long flags; | 646 | unsigned long flags; |
647 | int length; | ||
648 | 647 | ||
649 | length = skb->len; | 648 | buf = pci_map_single(card->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); |
650 | if (length < ETH_ZLEN) { | ||
651 | if (skb_pad(skb, ETH_ZLEN-length)) | ||
652 | return 0; | ||
653 | length = ETH_ZLEN; | ||
654 | } | ||
655 | |||
656 | buf = pci_map_single(card->pdev, skb->data, length, PCI_DMA_TODEVICE); | ||
657 | if (pci_dma_mapping_error(buf)) { | 649 | if (pci_dma_mapping_error(buf)) { |
658 | if (netif_msg_tx_err(card) && net_ratelimit()) | 650 | if (netif_msg_tx_err(card) && net_ratelimit()) |
659 | pr_err("could not iommu-map packet (%p, %i). " | 651 | pr_err("could not iommu-map packet (%p, %i). " |
660 | "Dropping packet\n", skb->data, length); | 652 | "Dropping packet\n", skb->data, skb->len); |
661 | card->spider_stats.tx_iommu_map_error++; | 653 | card->spider_stats.tx_iommu_map_error++; |
662 | return -ENOMEM; | 654 | return -ENOMEM; |
663 | } | 655 | } |
@@ -667,7 +659,7 @@ spider_net_prepare_tx_descr(struct spider_net_card *card, | |||
667 | card->tx_chain.head = descr->next; | 659 | card->tx_chain.head = descr->next; |
668 | 660 | ||
669 | descr->buf_addr = buf; | 661 | descr->buf_addr = buf; |
670 | descr->buf_size = length; | 662 | descr->buf_size = skb->len; |
671 | descr->next_descr_addr = 0; | 663 | descr->next_descr_addr = 0; |
672 | descr->skb = skb; | 664 | descr->skb = skb; |
673 | descr->data_status = 0; | 665 | descr->data_status = 0; |
@@ -802,8 +794,8 @@ spider_net_release_tx_chain(struct spider_net_card *card, int brutal) | |||
802 | 794 | ||
803 | /* unmap the skb */ | 795 | /* unmap the skb */ |
804 | if (skb) { | 796 | if (skb) { |
805 | int len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len; | 797 | pci_unmap_single(card->pdev, buf_addr, skb->len, |
806 | pci_unmap_single(card->pdev, buf_addr, len, PCI_DMA_TODEVICE); | 798 | PCI_DMA_TODEVICE); |
807 | dev_kfree_skb(skb); | 799 | dev_kfree_skb(skb); |
808 | } | 800 | } |
809 | } | 801 | } |
@@ -1641,7 +1633,7 @@ spider_net_enable_card(struct spider_net_card *card) | |||
1641 | SPIDER_NET_INT2_MASK_VALUE); | 1633 | SPIDER_NET_INT2_MASK_VALUE); |
1642 | 1634 | ||
1643 | spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, | 1635 | spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, |
1644 | SPIDER_NET_GDTBSTA | SPIDER_NET_GDTDCEIDIS); | 1636 | SPIDER_NET_GDTBSTA); |
1645 | } | 1637 | } |
1646 | 1638 | ||
1647 | /** | 1639 | /** |
diff --git a/drivers/net/spider_net.h b/drivers/net/spider_net.h index b3b46119b424..3e196df29790 100644 --- a/drivers/net/spider_net.h +++ b/drivers/net/spider_net.h | |||
@@ -24,7 +24,7 @@ | |||
24 | #ifndef _SPIDER_NET_H | 24 | #ifndef _SPIDER_NET_H |
25 | #define _SPIDER_NET_H | 25 | #define _SPIDER_NET_H |
26 | 26 | ||
27 | #define VERSION "1.1 A" | 27 | #define VERSION "1.6 A" |
28 | 28 | ||
29 | #include "sungem_phy.h" | 29 | #include "sungem_phy.h" |
30 | 30 | ||
@@ -217,8 +217,7 @@ extern char spider_net_driver_name[]; | |||
217 | #define SPIDER_NET_GDTBSTA 0x00000300 | 217 | #define SPIDER_NET_GDTBSTA 0x00000300 |
218 | #define SPIDER_NET_GDTDCEIDIS 0x00000002 | 218 | #define SPIDER_NET_GDTDCEIDIS 0x00000002 |
219 | #define SPIDER_NET_DMA_TX_VALUE SPIDER_NET_TX_DMA_EN | \ | 219 | #define SPIDER_NET_DMA_TX_VALUE SPIDER_NET_TX_DMA_EN | \ |
220 | SPIDER_NET_GDTBSTA | \ | 220 | SPIDER_NET_GDTBSTA |
221 | SPIDER_NET_GDTDCEIDIS | ||
222 | 221 | ||
223 | #define SPIDER_NET_DMA_TX_FEND_VALUE 0x00030003 | 222 | #define SPIDER_NET_DMA_TX_FEND_VALUE 0x00030003 |
224 | 223 | ||
@@ -328,7 +327,8 @@ enum spider_net_int2_status { | |||
328 | SPIDER_NET_GRISPDNGINT | 327 | SPIDER_NET_GRISPDNGINT |
329 | }; | 328 | }; |
330 | 329 | ||
331 | #define SPIDER_NET_TXINT ( (1 << SPIDER_NET_GDTFDCINT) ) | 330 | #define SPIDER_NET_TXINT ( (1 << SPIDER_NET_GDTFDCINT) | \ |
331 | (1 << SPIDER_NET_GDTDCEINT) ) | ||
332 | 332 | ||
333 | /* We rely on flagged descriptor interrupts */ | 333 | /* We rely on flagged descriptor interrupts */ |
334 | #define SPIDER_NET_RXINT ( (1 << SPIDER_NET_GDAFDCINT) ) | 334 | #define SPIDER_NET_RXINT ( (1 << SPIDER_NET_GDAFDCINT) ) |
diff --git a/drivers/net/wireless/zd1211rw/zd_ieee80211.h b/drivers/net/wireless/zd1211rw/zd_ieee80211.h index f63245b0d966..36329890dfec 100644 --- a/drivers/net/wireless/zd1211rw/zd_ieee80211.h +++ b/drivers/net/wireless/zd1211rw/zd_ieee80211.h | |||
@@ -64,7 +64,7 @@ struct cck_plcp_header { | |||
64 | u8 service; | 64 | u8 service; |
65 | __le16 length; | 65 | __le16 length; |
66 | __le16 crc16; | 66 | __le16 crc16; |
67 | }; | 67 | } __attribute__((packed)); |
68 | 68 | ||
69 | static inline u8 zd_cck_plcp_header_rate(const struct cck_plcp_header *header) | 69 | static inline u8 zd_cck_plcp_header_rate(const struct cck_plcp_header *header) |
70 | { | 70 | { |
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c index a7d29bddb298..e5fedf968c19 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.c +++ b/drivers/net/wireless/zd1211rw/zd_mac.c | |||
@@ -721,7 +721,7 @@ struct zd_rt_hdr { | |||
721 | u8 rt_rate; | 721 | u8 rt_rate; |
722 | u16 rt_channel; | 722 | u16 rt_channel; |
723 | u16 rt_chbitmask; | 723 | u16 rt_chbitmask; |
724 | }; | 724 | } __attribute__((packed)); |
725 | 725 | ||
726 | static void fill_rt_header(void *buffer, struct zd_mac *mac, | 726 | static void fill_rt_header(void *buffer, struct zd_mac *mac, |
727 | const struct ieee80211_rx_stats *stats, | 727 | const struct ieee80211_rx_stats *stats, |
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h index b8ea3de7924a..e4dd40a6fec3 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.h +++ b/drivers/net/wireless/zd1211rw/zd_mac.h | |||
@@ -82,7 +82,7 @@ struct zd_ctrlset { | |||
82 | struct rx_length_info { | 82 | struct rx_length_info { |
83 | __le16 length[3]; | 83 | __le16 length[3]; |
84 | __le16 tag; | 84 | __le16 tag; |
85 | }; | 85 | } __attribute__((packed)); |
86 | 86 | ||
87 | #define RX_LENGTH_INFO_TAG 0x697e | 87 | #define RX_LENGTH_INFO_TAG 0x697e |
88 | 88 | ||
@@ -93,7 +93,7 @@ struct rx_status { | |||
93 | u8 signal_quality_ofdm; | 93 | u8 signal_quality_ofdm; |
94 | u8 decryption_type; | 94 | u8 decryption_type; |
95 | u8 frame_status; | 95 | u8 frame_status; |
96 | }; | 96 | } __attribute__((packed)); |
97 | 97 | ||
98 | /* rx_status field decryption_type */ | 98 | /* rx_status field decryption_type */ |
99 | #define ZD_RX_NO_WEP 0 | 99 | #define ZD_RX_NO_WEP 0 |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index 3faaeb2b7c89..a15b09549245 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -366,15 +366,6 @@ error: | |||
366 | return r; | 366 | return r; |
367 | } | 367 | } |
368 | 368 | ||
369 | static void disable_read_regs_int(struct zd_usb *usb) | ||
370 | { | ||
371 | struct zd_usb_interrupt *intr = &usb->intr; | ||
372 | |||
373 | spin_lock(&intr->lock); | ||
374 | intr->read_regs_enabled = 0; | ||
375 | spin_unlock(&intr->lock); | ||
376 | } | ||
377 | |||
378 | #define urb_dev(urb) (&(urb)->dev->dev) | 369 | #define urb_dev(urb) (&(urb)->dev->dev) |
379 | 370 | ||
380 | static inline void handle_regs_int(struct urb *urb) | 371 | static inline void handle_regs_int(struct urb *urb) |
@@ -1156,10 +1147,19 @@ static void prepare_read_regs_int(struct zd_usb *usb) | |||
1156 | { | 1147 | { |
1157 | struct zd_usb_interrupt *intr = &usb->intr; | 1148 | struct zd_usb_interrupt *intr = &usb->intr; |
1158 | 1149 | ||
1159 | spin_lock(&intr->lock); | 1150 | spin_lock_irq(&intr->lock); |
1160 | intr->read_regs_enabled = 1; | 1151 | intr->read_regs_enabled = 1; |
1161 | INIT_COMPLETION(intr->read_regs.completion); | 1152 | INIT_COMPLETION(intr->read_regs.completion); |
1162 | spin_unlock(&intr->lock); | 1153 | spin_unlock_irq(&intr->lock); |
1154 | } | ||
1155 | |||
1156 | static void disable_read_regs_int(struct zd_usb *usb) | ||
1157 | { | ||
1158 | struct zd_usb_interrupt *intr = &usb->intr; | ||
1159 | |||
1160 | spin_lock_irq(&intr->lock); | ||
1161 | intr->read_regs_enabled = 0; | ||
1162 | spin_unlock_irq(&intr->lock); | ||
1163 | } | 1163 | } |
1164 | 1164 | ||
1165 | static int get_results(struct zd_usb *usb, u16 *values, | 1165 | static int get_results(struct zd_usb *usb, u16 *values, |
@@ -1171,7 +1171,7 @@ static int get_results(struct zd_usb *usb, u16 *values, | |||
1171 | struct read_regs_int *rr = &intr->read_regs; | 1171 | struct read_regs_int *rr = &intr->read_regs; |
1172 | struct usb_int_regs *regs = (struct usb_int_regs *)rr->buffer; | 1172 | struct usb_int_regs *regs = (struct usb_int_regs *)rr->buffer; |
1173 | 1173 | ||
1174 | spin_lock(&intr->lock); | 1174 | spin_lock_irq(&intr->lock); |
1175 | 1175 | ||
1176 | r = -EIO; | 1176 | r = -EIO; |
1177 | /* The created block size seems to be larger than expected. | 1177 | /* The created block size seems to be larger than expected. |
@@ -1204,7 +1204,7 @@ static int get_results(struct zd_usb *usb, u16 *values, | |||
1204 | 1204 | ||
1205 | r = 0; | 1205 | r = 0; |
1206 | error_unlock: | 1206 | error_unlock: |
1207 | spin_unlock(&intr->lock); | 1207 | spin_unlock_irq(&intr->lock); |
1208 | return r; | 1208 | return r; |
1209 | } | 1209 | } |
1210 | 1210 | ||
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.h b/drivers/net/wireless/zd1211rw/zd_usb.h index e81a2d3cfffd..317d37c36679 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.h +++ b/drivers/net/wireless/zd1211rw/zd_usb.h | |||
@@ -74,17 +74,17 @@ enum control_requests { | |||
74 | struct usb_req_read_regs { | 74 | struct usb_req_read_regs { |
75 | __le16 id; | 75 | __le16 id; |
76 | __le16 addr[0]; | 76 | __le16 addr[0]; |
77 | }; | 77 | } __attribute__((packed)); |
78 | 78 | ||
79 | struct reg_data { | 79 | struct reg_data { |
80 | __le16 addr; | 80 | __le16 addr; |
81 | __le16 value; | 81 | __le16 value; |
82 | }; | 82 | } __attribute__((packed)); |
83 | 83 | ||
84 | struct usb_req_write_regs { | 84 | struct usb_req_write_regs { |
85 | __le16 id; | 85 | __le16 id; |
86 | struct reg_data reg_writes[0]; | 86 | struct reg_data reg_writes[0]; |
87 | }; | 87 | } __attribute__((packed)); |
88 | 88 | ||
89 | enum { | 89 | enum { |
90 | RF_IF_LE = 0x02, | 90 | RF_IF_LE = 0x02, |
@@ -101,7 +101,7 @@ struct usb_req_rfwrite { | |||
101 | /* RF2595: 24 */ | 101 | /* RF2595: 24 */ |
102 | __le16 bit_values[0]; | 102 | __le16 bit_values[0]; |
103 | /* (CR203 & ~(RF_IF_LE | RF_CLK | RF_DATA)) | (bit ? RF_DATA : 0) */ | 103 | /* (CR203 & ~(RF_IF_LE | RF_CLK | RF_DATA)) | (bit ? RF_DATA : 0) */ |
104 | }; | 104 | } __attribute__((packed)); |
105 | 105 | ||
106 | /* USB interrupt */ | 106 | /* USB interrupt */ |
107 | 107 | ||
@@ -118,12 +118,12 @@ enum usb_int_flags { | |||
118 | struct usb_int_header { | 118 | struct usb_int_header { |
119 | u8 type; /* must always be 1 */ | 119 | u8 type; /* must always be 1 */ |
120 | u8 id; | 120 | u8 id; |
121 | }; | 121 | } __attribute__((packed)); |
122 | 122 | ||
123 | struct usb_int_regs { | 123 | struct usb_int_regs { |
124 | struct usb_int_header hdr; | 124 | struct usb_int_header hdr; |
125 | struct reg_data regs[0]; | 125 | struct reg_data regs[0]; |
126 | }; | 126 | } __attribute__((packed)); |
127 | 127 | ||
128 | struct usb_int_retry_fail { | 128 | struct usb_int_retry_fail { |
129 | struct usb_int_header hdr; | 129 | struct usb_int_header hdr; |
@@ -131,7 +131,7 @@ struct usb_int_retry_fail { | |||
131 | u8 _dummy; | 131 | u8 _dummy; |
132 | u8 addr[ETH_ALEN]; | 132 | u8 addr[ETH_ALEN]; |
133 | u8 ibss_wakeup_dest; | 133 | u8 ibss_wakeup_dest; |
134 | }; | 134 | } __attribute__((packed)); |
135 | 135 | ||
136 | struct read_regs_int { | 136 | struct read_regs_int { |
137 | struct completion completion; | 137 | struct completion completion; |
diff --git a/net/ieee80211/ieee80211_tx.c b/net/ieee80211/ieee80211_tx.c index ae254497ba3d..854fc13cd78d 100644 --- a/net/ieee80211/ieee80211_tx.c +++ b/net/ieee80211/ieee80211_tx.c | |||
@@ -390,7 +390,7 @@ int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev) | |||
390 | * this stack is providing the full 802.11 header, one will | 390 | * this stack is providing the full 802.11 header, one will |
391 | * eventually be affixed to this fragment -- so we must account | 391 | * eventually be affixed to this fragment -- so we must account |
392 | * for it when determining the amount of payload space. */ | 392 | * for it when determining the amount of payload space. */ |
393 | bytes_per_frag = frag_size - IEEE80211_3ADDR_LEN; | 393 | bytes_per_frag = frag_size - hdr_len; |
394 | if (ieee->config & | 394 | if (ieee->config & |
395 | (CFG_IEEE80211_COMPUTE_FCS | CFG_IEEE80211_RESERVE_FCS)) | 395 | (CFG_IEEE80211_COMPUTE_FCS | CFG_IEEE80211_RESERVE_FCS)) |
396 | bytes_per_frag -= IEEE80211_FCS_LEN; | 396 | bytes_per_frag -= IEEE80211_FCS_LEN; |
@@ -412,7 +412,7 @@ int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev) | |||
412 | } else { | 412 | } else { |
413 | nr_frags = 1; | 413 | nr_frags = 1; |
414 | bytes_per_frag = bytes_last_frag = bytes; | 414 | bytes_per_frag = bytes_last_frag = bytes; |
415 | frag_size = bytes + IEEE80211_3ADDR_LEN; | 415 | frag_size = bytes + hdr_len; |
416 | } | 416 | } |
417 | 417 | ||
418 | rts_required = (frag_size > ieee->rts | 418 | rts_required = (frag_size > ieee->rts |
diff --git a/net/ieee80211/softmac/ieee80211softmac_scan.c b/net/ieee80211/softmac/ieee80211softmac_scan.c index d31cf77498c4..ad67368b58ed 100644 --- a/net/ieee80211/softmac/ieee80211softmac_scan.c +++ b/net/ieee80211/softmac/ieee80211softmac_scan.c | |||
@@ -47,7 +47,6 @@ ieee80211softmac_start_scan(struct ieee80211softmac_device *sm) | |||
47 | sm->scanning = 1; | 47 | sm->scanning = 1; |
48 | spin_unlock_irqrestore(&sm->lock, flags); | 48 | spin_unlock_irqrestore(&sm->lock, flags); |
49 | 49 | ||
50 | netif_tx_disable(sm->ieee->dev); | ||
51 | ret = sm->start_scan(sm->dev); | 50 | ret = sm->start_scan(sm->dev); |
52 | if (ret) { | 51 | if (ret) { |
53 | spin_lock_irqsave(&sm->lock, flags); | 52 | spin_lock_irqsave(&sm->lock, flags); |
@@ -248,7 +247,6 @@ void ieee80211softmac_scan_finished(struct ieee80211softmac_device *sm) | |||
248 | if (net) | 247 | if (net) |
249 | sm->set_channel(sm->dev, net->channel); | 248 | sm->set_channel(sm->dev, net->channel); |
250 | } | 249 | } |
251 | netif_wake_queue(sm->ieee->dev); | ||
252 | ieee80211softmac_call_events(sm, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, NULL); | 250 | ieee80211softmac_call_events(sm, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, NULL); |
253 | } | 251 | } |
254 | EXPORT_SYMBOL_GPL(ieee80211softmac_scan_finished); | 252 | EXPORT_SYMBOL_GPL(ieee80211softmac_scan_finished); |