diff options
| -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); |
