Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'upstream-davem' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

+423 -239
+1 -1
drivers/net/Kconfig
··· 1172 1172 1173 1173 config NE2000 1174 1174 tristate "NE2000/NE1000 support" 1175 - depends on NET_ISA || (Q40 && m) || M32R || TOSHIBA_RBTX4927 || TOSHIBA_RBTX4938 1175 + depends on NET_ISA || (Q40 && m) || M32R || MACH_TX49XX 1176 1176 select CRC32 1177 1177 ---help--- 1178 1178 If you have a network (Ethernet) card of this type, say Y and read
-1
drivers/net/acenic.c
··· 52 52 53 53 #include <linux/module.h> 54 54 #include <linux/moduleparam.h> 55 - #include <linux/version.h> 56 55 #include <linux/types.h> 57 56 #include <linux/errno.h> 58 57 #include <linux/ioport.h>
+3 -3
drivers/net/arm/ixp4xx_eth.c
··· 551 551 if ((skb = netdev_alloc_skb(dev, RX_BUFF_SIZE))) { 552 552 phys = dma_map_single(&dev->dev, skb->data, 553 553 RX_BUFF_SIZE, DMA_FROM_DEVICE); 554 - if (dma_mapping_error(phys)) { 554 + if (dma_mapping_error(&dev->dev, phys)) { 555 555 dev_kfree_skb(skb); 556 556 skb = NULL; 557 557 } ··· 698 698 #endif 699 699 700 700 phys = dma_map_single(&dev->dev, mem, bytes, DMA_TO_DEVICE); 701 - if (dma_mapping_error(phys)) { 701 + if (dma_mapping_error(&dev->dev, phys)) { 702 702 #ifdef __ARMEB__ 703 703 dev_kfree_skb(skb); 704 704 #else ··· 883 883 desc->buf_len = MAX_MRU; 884 884 desc->data = dma_map_single(&port->netdev->dev, data, 885 885 RX_BUFF_SIZE, DMA_FROM_DEVICE); 886 - if (dma_mapping_error(desc->data)) { 886 + if (dma_mapping_error(&port->netdev->dev, desc->data)) { 887 887 free_buffer(buff); 888 888 return -EIO; 889 889 }
+1 -1
drivers/net/atl1e/atl1e_ethtool.c
··· 355 355 struct atl1e_adapter *adapter = netdev_priv(netdev); 356 356 357 357 if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE | 358 - WAKE_MCAST | WAKE_BCAST | WAKE_MCAST)) 358 + WAKE_UCAST | WAKE_MCAST | WAKE_BCAST)) 359 359 return -EOPNOTSUPP; 360 360 /* these settings will always override what we currently have */ 361 361 adapter->wol = 0;
+1 -1
drivers/net/au1000_eth.c
··· 807 807 static int au1000_init(struct net_device *dev) 808 808 { 809 809 struct au1000_private *aup = (struct au1000_private *) dev->priv; 810 - u32 flags; 810 + unsigned long flags; 811 811 int i; 812 812 u32 control; 813 813
+2 -2
drivers/net/ax88796.c
··· 554 554 555 555 spin_lock_irqsave(&ax->mii_lock, flags); 556 556 mii_ethtool_gset(&ax->mii, cmd); 557 - spin_lock_irqsave(&ax->mii_lock, flags); 557 + spin_unlock_irqrestore(&ax->mii_lock, flags); 558 558 559 559 return 0; 560 560 } ··· 567 567 568 568 spin_lock_irqsave(&ax->mii_lock, flags); 569 569 rc = mii_ethtool_sset(&ax->mii, cmd); 570 - spin_lock_irqsave(&ax->mii_lock, flags); 570 + spin_unlock_irqrestore(&ax->mii_lock, flags); 571 571 572 572 return rc; 573 573 }
-1
drivers/net/bnx2x_link.c
··· 21 21 #include <linux/delay.h> 22 22 #include <linux/ethtool.h> 23 23 #include <linux/mutex.h> 24 - #include <linux/version.h> 25 24 26 25 #include "bnx2x_reg.h" 27 26 #include "bnx2x_fw_defs.h"
-1
drivers/net/bnx2x_main.c
··· 44 44 #include <net/ip.h> 45 45 #include <net/tcp.h> 46 46 #include <net/checksum.h> 47 - #include <linux/version.h> 48 47 #include <net/ip6_checksum.h> 49 48 #include <linux/workqueue.h> 50 49 #include <linux/crc32.h>
-1
drivers/net/cpmac.c
··· 26 26 #include <linux/errno.h> 27 27 #include <linux/types.h> 28 28 #include <linux/delay.h> 29 - #include <linux/version.h> 30 29 31 30 #include <linux/netdevice.h> 32 31 #include <linux/etherdevice.h>
+1 -1
drivers/net/e1000e/defines.h
··· 389 389 390 390 /* Interrupt Cause Set */ 391 391 #define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */ 392 - #define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ 392 + #define E1000_ICS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */ 393 393 #define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */ 394 394 395 395 /* Transmit Descriptor Control */
+1
drivers/net/e1000e/e1000.h
··· 326 326 #define FLAG_RX_CSUM_ENABLED (1 << 28) 327 327 #define FLAG_TSO_FORCE (1 << 29) 328 328 #define FLAG_RX_RESTART_NOW (1 << 30) 329 + #define FLAG_MSI_TEST_FAILED (1 << 31) 329 330 330 331 #define E1000_RX_DESC_PS(R, i) \ 331 332 (&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
+1 -1
drivers/net/e1000e/ethtool.c
··· 177 177 u32 status; 178 178 179 179 status = er32(STATUS); 180 - return (status & E1000_STATUS_LU); 180 + return (status & E1000_STATUS_LU) ? 1 : 0; 181 181 } 182 182 183 183 static int e1000_set_spd_dplx(struct e1000_adapter *adapter, u16 spddplx)
+170 -15
drivers/net/e1000e/netdev.c
··· 510 510 netdev_alloc_skb(netdev, length + NET_IP_ALIGN); 511 511 if (new_skb) { 512 512 skb_reserve(new_skb, NET_IP_ALIGN); 513 - memcpy(new_skb->data - NET_IP_ALIGN, 514 - skb->data - NET_IP_ALIGN, 515 - length + NET_IP_ALIGN); 513 + skb_copy_to_linear_data_offset(new_skb, 514 + -NET_IP_ALIGN, 515 + (skb->data - 516 + NET_IP_ALIGN), 517 + (length + 518 + NET_IP_ALIGN)); 516 519 /* save the skb in buffer_info as good */ 517 520 buffer_info->skb = skb; 518 521 skb = new_skb; ··· 1236 1233 return IRQ_HANDLED; 1237 1234 } 1238 1235 1236 + /** 1237 + * e1000_request_irq - initialize interrupts 1238 + * 1239 + * Attempts to configure interrupts using the best available 1240 + * capabilities of the hardware and kernel. 1241 + **/ 1239 1242 static int e1000_request_irq(struct e1000_adapter *adapter) 1240 1243 { 1241 1244 struct net_device *netdev = adapter->netdev; 1242 - irq_handler_t handler = e1000_intr; 1243 1245 int irq_flags = IRQF_SHARED; 1244 1246 int err; 1245 1247 1246 - if (!pci_enable_msi(adapter->pdev)) { 1247 - adapter->flags |= FLAG_MSI_ENABLED; 1248 - handler = e1000_intr_msi; 1249 - irq_flags = 0; 1248 + if (!(adapter->flags & FLAG_MSI_TEST_FAILED)) { 1249 + err = pci_enable_msi(adapter->pdev); 1250 + if (!err) { 1251 + adapter->flags |= FLAG_MSI_ENABLED; 1252 + irq_flags = 0; 1253 + } 1250 1254 } 1251 1255 1252 - err = request_irq(adapter->pdev->irq, handler, irq_flags, netdev->name, 1253 - netdev); 1256 + err = request_irq(adapter->pdev->irq, 1257 + ((adapter->flags & FLAG_MSI_ENABLED) ? 1258 + &e1000_intr_msi : &e1000_intr), 1259 + irq_flags, netdev->name, netdev); 1254 1260 if (err) { 1255 - e_err("Unable to allocate %s interrupt (return: %d)\n", 1256 - adapter->flags & FLAG_MSI_ENABLED ? "MSI":"INTx", err); 1257 - if (adapter->flags & FLAG_MSI_ENABLED) 1261 + if (adapter->flags & FLAG_MSI_ENABLED) { 1258 1262 pci_disable_msi(adapter->pdev); 1263 + adapter->flags &= ~FLAG_MSI_ENABLED; 1264 + } 1265 + e_err("Unable to allocate interrupt, Error: %d\n", err); 1259 1266 } 1260 1267 1261 1268 return err; ··· 2605 2592 } 2606 2593 2607 2594 /** 2595 + * e1000_intr_msi_test - Interrupt Handler 2596 + * @irq: interrupt number 2597 + * @data: pointer to a network interface device structure 2598 + **/ 2599 + static irqreturn_t e1000_intr_msi_test(int irq, void *data) 2600 + { 2601 + struct net_device *netdev = data; 2602 + struct e1000_adapter *adapter = netdev_priv(netdev); 2603 + struct e1000_hw *hw = &adapter->hw; 2604 + u32 icr = er32(ICR); 2605 + 2606 + e_dbg("%s: icr is %08X\n", netdev->name, icr); 2607 + if (icr & E1000_ICR_RXSEQ) { 2608 + adapter->flags &= ~FLAG_MSI_TEST_FAILED; 2609 + wmb(); 2610 + } 2611 + 2612 + return IRQ_HANDLED; 2613 + } 2614 + 2615 + /** 2616 + * e1000_test_msi_interrupt - Returns 0 for successful test 2617 + * @adapter: board private struct 2618 + * 2619 + * code flow taken from tg3.c 2620 + **/ 2621 + static int e1000_test_msi_interrupt(struct e1000_adapter *adapter) 2622 + { 2623 + struct net_device *netdev = adapter->netdev; 2624 + struct e1000_hw *hw = &adapter->hw; 2625 + int err; 2626 + 2627 + /* poll_enable hasn't been called yet, so don't need disable */ 2628 + /* clear any pending events */ 2629 + er32(ICR); 2630 + 2631 + /* free the real vector and request a test handler */ 2632 + e1000_free_irq(adapter); 2633 + 2634 + /* Assume that the test fails, if it succeeds then the test 2635 + * MSI irq handler will unset this flag */ 2636 + adapter->flags |= FLAG_MSI_TEST_FAILED; 2637 + 2638 + err = pci_enable_msi(adapter->pdev); 2639 + if (err) 2640 + goto msi_test_failed; 2641 + 2642 + err = request_irq(adapter->pdev->irq, &e1000_intr_msi_test, 0, 2643 + netdev->name, netdev); 2644 + if (err) { 2645 + pci_disable_msi(adapter->pdev); 2646 + goto msi_test_failed; 2647 + } 2648 + 2649 + wmb(); 2650 + 2651 + e1000_irq_enable(adapter); 2652 + 2653 + /* fire an unusual interrupt on the test handler */ 2654 + ew32(ICS, E1000_ICS_RXSEQ); 2655 + e1e_flush(); 2656 + msleep(50); 2657 + 2658 + e1000_irq_disable(adapter); 2659 + 2660 + rmb(); 2661 + 2662 + if (adapter->flags & FLAG_MSI_TEST_FAILED) { 2663 + err = -EIO; 2664 + e_info("MSI interrupt test failed!\n"); 2665 + } 2666 + 2667 + free_irq(adapter->pdev->irq, netdev); 2668 + pci_disable_msi(adapter->pdev); 2669 + 2670 + if (err == -EIO) 2671 + goto msi_test_failed; 2672 + 2673 + /* okay so the test worked, restore settings */ 2674 + e_dbg("%s: MSI interrupt test succeeded!\n", netdev->name); 2675 + msi_test_failed: 2676 + /* restore the original vector, even if it failed */ 2677 + e1000_request_irq(adapter); 2678 + return err; 2679 + } 2680 + 2681 + /** 2682 + * e1000_test_msi - Returns 0 if MSI test succeeds or INTx mode is restored 2683 + * @adapter: board private struct 2684 + * 2685 + * code flow taken from tg3.c, called with e1000 interrupts disabled. 2686 + **/ 2687 + static int e1000_test_msi(struct e1000_adapter *adapter) 2688 + { 2689 + int err; 2690 + u16 pci_cmd; 2691 + 2692 + if (!(adapter->flags & FLAG_MSI_ENABLED)) 2693 + return 0; 2694 + 2695 + /* disable SERR in case the MSI write causes a master abort */ 2696 + pci_read_config_word(adapter->pdev, PCI_COMMAND, &pci_cmd); 2697 + pci_write_config_word(adapter->pdev, PCI_COMMAND, 2698 + pci_cmd & ~PCI_COMMAND_SERR); 2699 + 2700 + err = e1000_test_msi_interrupt(adapter); 2701 + 2702 + /* restore previous setting of command word */ 2703 + pci_write_config_word(adapter->pdev, PCI_COMMAND, pci_cmd); 2704 + 2705 + /* success ! */ 2706 + if (!err) 2707 + return 0; 2708 + 2709 + /* EIO means MSI test failed */ 2710 + if (err != -EIO) 2711 + return err; 2712 + 2713 + /* back to INTx mode */ 2714 + e_warn("MSI interrupt test failed, using legacy interrupt.\n"); 2715 + 2716 + e1000_free_irq(adapter); 2717 + 2718 + err = e1000_request_irq(adapter); 2719 + 2720 + return err; 2721 + } 2722 + 2723 + /** 2608 2724 * e1000_open - Called when a network interface is made active 2609 2725 * @netdev: network interface device structure 2610 2726 * ··· 2790 2648 err = e1000_request_irq(adapter); 2791 2649 if (err) 2792 2650 goto err_req_irq; 2651 + 2652 + /* 2653 + * Work around PCIe errata with MSI interrupts causing some chipsets to 2654 + * ignore e1000e MSI messages, which means we need to test our MSI 2655 + * interrupt now 2656 + */ 2657 + { 2658 + err = e1000_test_msi(adapter); 2659 + if (err) { 2660 + e_err("Interrupt allocation failed\n"); 2661 + goto err_req_irq; 2662 + } 2663 + } 2793 2664 2794 2665 /* From here on the code is the same as e1000e_up() */ 2795 2666 clear_bit(__E1000_DOWN, &adapter->state); ··· 3210 3055 case SPEED_10: 3211 3056 txb2b = 0; 3212 3057 netdev->tx_queue_len = 10; 3213 - adapter->tx_timeout_factor = 14; 3058 + adapter->tx_timeout_factor = 16; 3214 3059 break; 3215 3060 case SPEED_100: 3216 3061 txb2b = 0; ··· 3876 3721 struct e1000_adapter *adapter = netdev_priv(netdev); 3877 3722 int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN; 3878 3723 3879 - if ((max_frame < ETH_ZLEN + ETH_FCS_LEN) || 3724 + if ((new_mtu < ETH_ZLEN + ETH_FCS_LEN + VLAN_HLEN) || 3880 3725 (max_frame > MAX_JUMBO_FRAME_SIZE)) { 3881 3726 e_err("Invalid MTU setting\n"); 3882 3727 return -EINVAL;
+19 -6
drivers/net/e1000e/param.c
··· 324 324 adapter->itr = 20000; 325 325 break; 326 326 default: 327 - e1000_validate_option(&adapter->itr, &opt, 328 - adapter); 329 327 /* 330 - * save the setting, because the dynamic bits 331 - * change itr. clear the lower two bits 332 - * because they are used as control 328 + * Save the setting, because the dynamic bits 329 + * change itr. 333 330 */ 334 - adapter->itr_setting = adapter->itr & ~3; 331 + if (e1000_validate_option(&adapter->itr, &opt, 332 + adapter) && 333 + (adapter->itr == 3)) { 334 + /* 335 + * In case of invalid user value, 336 + * default to conservative mode. 337 + */ 338 + adapter->itr_setting = adapter->itr; 339 + adapter->itr = 20000; 340 + } else { 341 + /* 342 + * Clear the lower two bits because 343 + * they are used as control. 344 + */ 345 + adapter->itr_setting = 346 + adapter->itr & ~3; 347 + } 335 348 break; 336 349 } 337 350 } else {
+2 -4
drivers/net/gianfar.c
··· 134 134 static void gfar_vlan_rx_register(struct net_device *netdev, 135 135 struct vlan_group *grp); 136 136 void gfar_halt(struct net_device *dev); 137 - #ifdef CONFIG_PM 138 137 static void gfar_halt_nodisable(struct net_device *dev); 139 - #endif 140 138 void gfar_start(struct net_device *dev); 141 139 static void gfar_clear_exact_match(struct net_device *dev); 142 140 static void gfar_set_mac_for_addr(struct net_device *dev, int num, u8 *addr); ··· 629 631 } 630 632 631 633 632 - #ifdef CONFIG_PM 633 634 /* Halt the receive and transmit queues */ 634 635 static void gfar_halt_nodisable(struct net_device *dev) 635 636 { ··· 654 657 cpu_relax(); 655 658 } 656 659 } 657 - #endif 658 660 659 661 /* Halt the receive and transmit queues */ 660 662 void gfar_halt(struct net_device *dev) ··· 661 665 struct gfar_private *priv = netdev_priv(dev); 662 666 struct gfar __iomem *regs = priv->regs; 663 667 u32 tempval; 668 + 669 + gfar_halt_nodisable(dev); 664 670 665 671 /* Disable Rx and Tx */ 666 672 tempval = gfar_read(&regs->maccfg1);
-1
drivers/net/gianfar_sysfs.c
··· 33 33 34 34 #include <asm/uaccess.h> 35 35 #include <linux/module.h> 36 - #include <linux/version.h> 37 36 38 37 #include "gianfar.h" 39 38
-2
drivers/net/ipg.h
··· 7 7 #ifndef __LINUX_IPG_H 8 8 #define __LINUX_IPG_H 9 9 10 - #include <linux/version.h> 11 10 #include <linux/module.h> 12 11 13 12 #include <linux/kernel.h> ··· 20 21 #include <linux/etherdevice.h> 21 22 #include <linux/init.h> 22 23 #include <linux/skbuff.h> 23 - #include <linux/version.h> 24 24 #include <asm/bitops.h> 25 25 26 26 /*
+1
drivers/net/ixgbe/ixgbe_82598.c
··· 190 190 case IXGBE_DEV_ID_82598AF_DUAL_PORT: 191 191 case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 192 192 case IXGBE_DEV_ID_82598EB_CX4: 193 + case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 193 194 media_type = ixgbe_media_type_fiber; 194 195 break; 195 196 case IXGBE_DEV_ID_82598AT_DUAL_PORT:
+3 -1
drivers/net/ixgbe/ixgbe_main.c
··· 48 48 static const char ixgbe_driver_string[] = 49 49 "Intel(R) 10 Gigabit PCI Express Network Driver"; 50 50 51 - #define DRV_VERSION "1.3.18-k2" 51 + #define DRV_VERSION "1.3.18-k4" 52 52 const char ixgbe_driver_version[] = DRV_VERSION; 53 53 static const char ixgbe_copyright[] = 54 54 "Copyright (c) 1999-2007 Intel Corporation."; ··· 71 71 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AF_SINGLE_PORT), 72 72 board_82598 }, 73 73 {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598EB_CX4), 74 + board_82598 }, 75 + {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598_CX4_DUAL_PORT), 74 76 board_82598 }, 75 77 76 78 /* required last entry */
+1
drivers/net/ixgbe/ixgbe_type.h
··· 39 39 #define IXGBE_DEV_ID_82598AF_SINGLE_PORT 0x10C7 40 40 #define IXGBE_DEV_ID_82598AT_DUAL_PORT 0x10C8 41 41 #define IXGBE_DEV_ID_82598EB_CX4 0x10DD 42 + #define IXGBE_DEV_ID_82598_CX4_DUAL_PORT 0x10EC 42 43 43 44 /* General Registers */ 44 45 #define IXGBE_CTRL 0x00000
+5 -1
drivers/net/myri10ge/myri10ge.c
··· 3548 3548 3549 3549 /* try to load the slice aware rss firmware */ 3550 3550 old_fw = mgp->fw_name; 3551 - if (old_fw == myri10ge_fw_aligned) 3551 + if (myri10ge_fw_name != NULL) { 3552 + dev_info(&mgp->pdev->dev, "overriding rss firmware to %s\n", 3553 + myri10ge_fw_name); 3554 + mgp->fw_name = myri10ge_fw_name; 3555 + } else if (old_fw == myri10ge_fw_aligned) 3552 3556 mgp->fw_name = myri10ge_fw_rss_aligned; 3553 3557 else 3554 3558 mgp->fw_name = myri10ge_fw_rss_unaligned;
+2 -2
drivers/net/ne.c
··· 118 118 {"E-LAN100", "E-LAN200", {0x00, 0x00, 0x5d}}, /* Broken ne1000 clones */ 119 119 {"PCM-4823", "PCM-4823", {0x00, 0xc0, 0x6c}}, /* Broken Advantech MoBo */ 120 120 {"REALTEK", "RTL8019", {0x00, 0x00, 0xe8}}, /* no-name with Realtek chip */ 121 - #if defined(CONFIG_TOSHIBA_RBTX4927) || defined(CONFIG_TOSHIBA_RBTX4938) 121 + #ifdef CONFIG_MACH_TX49XX 122 122 {"RBHMA4X00-RTL8019", "RBHMA4X00/RTL8019", {0x00, 0x60, 0x0a}}, /* Toshiba built-in */ 123 123 #endif 124 124 {"LCS-8834", "LCS-8836", {0x04, 0x04, 0x37}}, /* ShinyNet (SET) */ ··· 142 142 #if defined(CONFIG_PLAT_MAPPI) 143 143 # define DCR_VAL 0x4b 144 144 #elif defined(CONFIG_PLAT_OAKS32R) || \ 145 - defined(CONFIG_TOSHIBA_RBTX4927) || defined(CONFIG_TOSHIBA_RBTX4938) 145 + defined(CONFIG_MACH_TX49XX) 146 146 # define DCR_VAL 0x48 /* 8-bit mode */ 147 147 #else 148 148 # define DCR_VAL 0x49
+4 -3
drivers/net/netxen/netxen_nic.h
··· 66 66 67 67 #define _NETXEN_NIC_LINUX_MAJOR 4 68 68 #define _NETXEN_NIC_LINUX_MINOR 0 69 - #define _NETXEN_NIC_LINUX_SUBVERSION 0 70 - #define NETXEN_NIC_LINUX_VERSIONID "4.0.0" 69 + #define _NETXEN_NIC_LINUX_SUBVERSION 11 70 + #define NETXEN_NIC_LINUX_VERSIONID "4.0.11" 71 71 72 72 #define NETXEN_VERSION_CODE(a, b, c) (((a) << 16) + ((b) << 8) + (c)) 73 73 ··· 1615 1615 1616 1616 1617 1617 int netxen_is_flash_supported(struct netxen_adapter *adapter); 1618 - int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, __le64 mac[]); 1618 + int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, __le64 *mac); 1619 + int netxen_p3_get_mac_addr(struct netxen_adapter *adapter, __le64 *mac); 1619 1620 extern void netxen_change_ringparam(struct netxen_adapter *adapter); 1620 1621 extern int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr, 1621 1622 int *valp);
+42 -17
drivers/net/netxen/netxen_nic_hw.c
··· 733 733 return 0; 734 734 } 735 735 736 - int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, __le64 mac[]) 736 + int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, __le64 *mac) 737 737 { 738 - __le32 *pmac = (__le32 *) & mac[0]; 738 + __le32 *pmac = (__le32 *) mac; 739 + u32 offset; 739 740 740 - if (netxen_get_flash_block(adapter, 741 - NETXEN_USER_START + 742 - offsetof(struct netxen_new_user_info, 743 - mac_addr), 744 - FLASH_NUM_PORTS * sizeof(u64), pmac) == -1) { 741 + offset = NETXEN_USER_START + 742 + offsetof(struct netxen_new_user_info, mac_addr) + 743 + adapter->portnum * sizeof(u64); 744 + 745 + if (netxen_get_flash_block(adapter, offset, sizeof(u64), pmac) == -1) 745 746 return -1; 746 - } 747 + 747 748 if (*mac == cpu_to_le64(~0ULL)) { 749 + 750 + offset = NETXEN_USER_START_OLD + 751 + offsetof(struct netxen_user_old_info, mac_addr) + 752 + adapter->portnum * sizeof(u64); 753 + 748 754 if (netxen_get_flash_block(adapter, 749 - NETXEN_USER_START_OLD + 750 - offsetof(struct netxen_user_old_info, 751 - mac_addr), 752 - FLASH_NUM_PORTS * sizeof(u64), 753 - pmac) == -1) 755 + offset, sizeof(u64), pmac) == -1) 754 756 return -1; 757 + 755 758 if (*mac == cpu_to_le64(~0ULL)) 756 759 return -1; 757 760 } 761 + return 0; 762 + } 763 + 764 + int netxen_p3_get_mac_addr(struct netxen_adapter *adapter, __le64 *mac) 765 + { 766 + uint32_t crbaddr, mac_hi, mac_lo; 767 + int pci_func = adapter->ahw.pci_func; 768 + 769 + crbaddr = CRB_MAC_BLOCK_START + 770 + (4 * ((pci_func/2) * 3)) + (4 * (pci_func & 1)); 771 + 772 + adapter->hw_read_wx(adapter, crbaddr, &mac_lo, 4); 773 + adapter->hw_read_wx(adapter, crbaddr+4, &mac_hi, 4); 774 + 775 + mac_hi = cpu_to_le32(mac_hi); 776 + mac_lo = cpu_to_le32(mac_lo); 777 + 778 + if (pci_func & 1) 779 + *mac = ((mac_lo >> 16) | ((u64)mac_hi << 16)); 780 + else 781 + *mac = ((mac_lo) | ((u64)mac_hi << 32)); 782 + 758 783 return 0; 759 784 } 760 785 ··· 2208 2183 if (adapter->portnum == 0) { 2209 2184 get_brd_name_by_type(board_info->board_type, brd_name); 2210 2185 2211 - printk("NetXen %s Board S/N %s Chip id 0x%x\n", 2212 - brd_name, serial_num, board_info->chip_id); 2213 - printk("NetXen Firmware version %d.%d.%d\n", fw_major, 2214 - fw_minor, fw_build); 2186 + printk(KERN_INFO "NetXen %s Board S/N %s Chip rev 0x%x\n", 2187 + brd_name, serial_num, adapter->ahw.revision_id); 2188 + printk(KERN_INFO "NetXen Firmware version %d.%d.%d\n", 2189 + fw_major, fw_minor, fw_build); 2215 2190 } 2216 2191 2217 2192 if (NETXEN_VERSION_CODE(fw_major, fw_minor, fw_build) <
+15 -13
drivers/net/netxen/netxen_nic_init.c
··· 1079 1079 1080 1080 void netxen_free_adapter_offload(struct netxen_adapter *adapter) 1081 1081 { 1082 - int i; 1082 + int i = 100; 1083 1083 1084 - if (adapter->dummy_dma.addr) { 1085 - i = 100; 1084 + if (!adapter->dummy_dma.addr) 1085 + return; 1086 + 1087 + if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { 1086 1088 do { 1087 1089 if (dma_watchdog_shutdown_request(adapter) == 1) 1088 1090 break; ··· 1092 1090 if (dma_watchdog_shutdown_poll_result(adapter) == 1) 1093 1091 break; 1094 1092 } while (--i); 1093 + } 1095 1094 1096 - if (i) { 1097 - pci_free_consistent(adapter->pdev, 1098 - NETXEN_HOST_DUMMY_DMA_SIZE, 1099 - adapter->dummy_dma.addr, 1100 - adapter->dummy_dma.phys_addr); 1101 - adapter->dummy_dma.addr = NULL; 1102 - } else { 1103 - printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n", 1104 - adapter->netdev->name); 1105 - } 1095 + if (i) { 1096 + pci_free_consistent(adapter->pdev, 1097 + NETXEN_HOST_DUMMY_DMA_SIZE, 1098 + adapter->dummy_dma.addr, 1099 + adapter->dummy_dma.phys_addr); 1100 + adapter->dummy_dma.addr = NULL; 1101 + } else { 1102 + printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n", 1103 + adapter->netdev->name); 1106 1104 } 1107 1105 } 1108 1106
+96 -114
drivers/net/netxen/netxen_nic_main.c
··· 149 149 150 150 static struct netxen_legacy_intr_set legacy_intr[] = NX_LEGACY_INTR_CONFIG; 151 151 152 - static void netxen_nic_disable_int(struct netxen_adapter *adapter) 152 + static inline void netxen_nic_disable_int(struct netxen_adapter *adapter) 153 153 { 154 - u32 mask = 0x7ff; 155 - int retries = 32; 156 - int pci_fn = adapter->ahw.pci_func; 157 - 158 - if (adapter->msi_mode != MSI_MODE_MULTIFUNC) 159 - adapter->pci_write_normalize(adapter, 160 - adapter->crb_intr_mask, 0); 161 - 162 - if (adapter->intr_scheme != -1 && 163 - adapter->intr_scheme != INTR_SCHEME_PERPORT) 164 - adapter->pci_write_immediate(adapter, ISR_INT_MASK, mask); 165 - 166 - if (!NETXEN_IS_MSI_FAMILY(adapter)) { 167 - do { 168 - adapter->pci_write_immediate(adapter, 169 - adapter->legacy_intr.tgt_status_reg, 170 - 0xffffffff); 171 - mask = adapter->pci_read_immediate(adapter, 172 - ISR_INT_VECTOR); 173 - if (!(mask & 0x80)) 174 - break; 175 - udelay(10); 176 - } while (--retries); 177 - 178 - if (!retries) { 179 - printk(KERN_NOTICE "%s: Failed to disable interrupt\n", 180 - netxen_nic_driver_name); 181 - } 182 - } else { 183 - if (adapter->msi_mode == MSI_MODE_MULTIFUNC) { 184 - adapter->pci_write_immediate(adapter, 185 - msi_tgt_status[pci_fn], 0xffffffff); 186 - } 187 - } 154 + adapter->pci_write_normalize(adapter, adapter->crb_intr_mask, 0); 188 155 } 189 156 190 - static void netxen_nic_enable_int(struct netxen_adapter *adapter) 157 + static inline void netxen_nic_enable_int(struct netxen_adapter *adapter) 191 158 { 192 - u32 mask; 193 - 194 - if (adapter->intr_scheme != -1 && 195 - adapter->intr_scheme != INTR_SCHEME_PERPORT) { 196 - switch (adapter->ahw.board_type) { 197 - case NETXEN_NIC_GBE: 198 - mask = 0x77b; 199 - break; 200 - case NETXEN_NIC_XGBE: 201 - mask = 0x77f; 202 - break; 203 - default: 204 - mask = 0x7ff; 205 - break; 206 - } 207 - 208 - adapter->pci_write_immediate(adapter, ISR_INT_MASK, mask); 209 - } 210 - 211 159 adapter->pci_write_normalize(adapter, adapter->crb_intr_mask, 0x1); 212 160 213 - if (!NETXEN_IS_MSI_FAMILY(adapter)) { 214 - mask = 0xbff; 215 - if (adapter->intr_scheme == INTR_SCHEME_PERPORT) 216 - adapter->pci_write_immediate(adapter, 217 - adapter->legacy_intr.tgt_mask_reg, mask); 218 - else 219 - adapter->pci_write_normalize(adapter, 220 - CRB_INT_VECTOR, 0); 221 - } 161 + if (!NETXEN_IS_MSI_FAMILY(adapter)) 162 + adapter->pci_write_immediate(adapter, 163 + adapter->legacy_intr.tgt_mask_reg, 0xfbff); 222 164 } 223 165 224 166 static int nx_set_dma_mask(struct netxen_adapter *adapter, uint8_t revision_id) ··· 443 501 adapter->msix_entries[i].entry = i; 444 502 } 445 503 504 + static int 505 + netxen_read_mac_addr(struct netxen_adapter *adapter) 506 + { 507 + int i; 508 + unsigned char *p; 509 + __le64 mac_addr; 510 + DECLARE_MAC_BUF(mac); 511 + struct net_device *netdev = adapter->netdev; 512 + struct pci_dev *pdev = adapter->pdev; 513 + 514 + if (netxen_is_flash_supported(adapter) != 0) 515 + return -EIO; 516 + 517 + if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { 518 + if (netxen_p3_get_mac_addr(adapter, &mac_addr) != 0) 519 + return -EIO; 520 + } else { 521 + if (netxen_get_flash_mac_addr(adapter, &mac_addr) != 0) 522 + return -EIO; 523 + } 524 + 525 + p = (unsigned char *)&mac_addr; 526 + for (i = 0; i < 6; i++) 527 + netdev->dev_addr[i] = *(p + 5 - i); 528 + 529 + memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len); 530 + 531 + /* set station address */ 532 + 533 + if (!is_valid_ether_addr(netdev->perm_addr)) { 534 + dev_warn(&pdev->dev, "Bad MAC address %s.\n", 535 + print_mac(mac, netdev->dev_addr)); 536 + } else 537 + adapter->macaddr_set(adapter, netdev->dev_addr); 538 + 539 + return 0; 540 + } 541 + 446 542 /* 447 543 * netxen_nic_probe() 448 544 * ··· 509 529 unsigned long mem_base, mem_len, db_base, db_len, pci_len0 = 0; 510 530 int i = 0, err; 511 531 int first_driver, first_boot; 512 - __le64 mac_addr[FLASH_NUM_PORTS + 1]; 513 532 u32 val; 514 533 int pci_func_id = PCI_FUNC(pdev->devfn); 515 - DECLARE_MAC_BUF(mac); 516 534 struct netxen_legacy_intr_set *legacy_intrp; 517 535 uint8_t revision_id; 518 536 ··· 520 542 if (pdev->class != 0x020000) { 521 543 printk(KERN_DEBUG "NetXen function %d, class %x will not " 522 544 "be enabled.\n",pci_func_id, pdev->class); 545 + return -ENODEV; 546 + } 547 + 548 + if (pdev->revision >= NX_P3_A0 && pdev->revision < NX_P3_B1) { 549 + printk(KERN_WARNING "NetXen chip revisions between 0x%x-0x%x" 550 + "will not be enabled.\n", 551 + NX_P3_A0, NX_P3_B1); 523 552 return -ENODEV; 524 553 } 525 554 ··· 883 898 goto err_out_disable_msi; 884 899 885 900 init_timer(&adapter->watchdog_timer); 886 - adapter->ahw.linkup = 0; 887 901 adapter->watchdog_timer.function = &netxen_watchdog; 888 902 adapter->watchdog_timer.data = (unsigned long)adapter; 889 903 INIT_WORK(&adapter->watchdog_task, netxen_watchdog_task); 890 904 INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task); 891 905 892 - if (netxen_is_flash_supported(adapter) == 0 && 893 - netxen_get_flash_mac_addr(adapter, mac_addr) == 0) { 894 - unsigned char *p; 895 - 896 - p = (unsigned char *)&mac_addr[adapter->portnum]; 897 - netdev->dev_addr[0] = *(p + 5); 898 - netdev->dev_addr[1] = *(p + 4); 899 - netdev->dev_addr[2] = *(p + 3); 900 - netdev->dev_addr[3] = *(p + 2); 901 - netdev->dev_addr[4] = *(p + 1); 902 - netdev->dev_addr[5] = *(p + 0); 903 - 904 - memcpy(netdev->perm_addr, netdev->dev_addr, 905 - netdev->addr_len); 906 - if (!is_valid_ether_addr(netdev->perm_addr)) { 907 - printk(KERN_ERR "%s: Bad MAC address %s.\n", 908 - netxen_nic_driver_name, 909 - print_mac(mac, netdev->dev_addr)); 910 - } else { 911 - adapter->macaddr_set(adapter, netdev->dev_addr); 912 - } 913 - } 906 + err = netxen_read_mac_addr(adapter); 907 + if (err) 908 + dev_warn(&pdev->dev, "failed to read mac addr\n"); 914 909 915 910 netif_carrier_off(netdev); 916 911 netif_stop_queue(netdev); ··· 965 1000 966 1001 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) { 967 1002 netxen_free_hw_resources(adapter); 1003 + netxen_release_rx_buffers(adapter); 968 1004 netxen_free_sw_resources(adapter); 969 1005 } 970 1006 ··· 1035 1069 goto err_out_free_sw; 1036 1070 } 1037 1071 1072 + if ((adapter->msi_mode != MSI_MODE_MULTIFUNC) || 1073 + (adapter->intr_scheme != INTR_SCHEME_PERPORT)) { 1074 + printk(KERN_ERR "%s: Firmware interrupt scheme is " 1075 + "incompatible with driver\n", 1076 + netdev->name); 1077 + adapter->driver_mismatch = 1; 1078 + goto err_out_free_hw; 1079 + } 1080 + 1038 1081 if (adapter->fw_major < 4) { 1039 1082 adapter->crb_addr_cmd_producer = 1040 1083 crb_cmd_producer[adapter->portnum]; ··· 1069 1094 flags, netdev->name, adapter); 1070 1095 if (err) { 1071 1096 printk(KERN_ERR "request_irq failed with: %d\n", err); 1072 - goto err_out_free_hw; 1097 + goto err_out_free_rxbuf; 1073 1098 } 1074 1099 1075 1100 adapter->is_up = NETXEN_ADAPTER_UP_MAGIC; ··· 1091 1116 if (adapter->set_mtu) 1092 1117 adapter->set_mtu(adapter, netdev->mtu); 1093 1118 1119 + adapter->ahw.linkup = 0; 1094 1120 mod_timer(&adapter->watchdog_timer, jiffies); 1095 1121 1096 1122 napi_enable(&adapter->napi); ··· 1103 1127 1104 1128 err_out_free_irq: 1105 1129 free_irq(adapter->irq, adapter); 1130 + err_out_free_rxbuf: 1131 + netxen_release_rx_buffers(adapter); 1106 1132 err_out_free_hw: 1107 1133 netxen_free_hw_resources(adapter); 1108 1134 err_out_free_sw: ··· 1130 1152 1131 1153 netxen_release_tx_buffers(adapter); 1132 1154 1133 - if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) { 1134 - FLUSH_SCHEDULED_WORK(); 1135 - del_timer_sync(&adapter->watchdog_timer); 1136 - } 1155 + FLUSH_SCHEDULED_WORK(); 1156 + del_timer_sync(&adapter->watchdog_timer); 1137 1157 1138 1158 return 0; 1139 1159 } ··· 1434 1458 1435 1459 netxen_nic_handle_phy_intr(adapter); 1436 1460 1437 - mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ); 1461 + if (netif_running(adapter->netdev)) 1462 + mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ); 1438 1463 } 1439 1464 1440 1465 static void netxen_tx_timeout(struct net_device *netdev) ··· 1495 1518 return stats; 1496 1519 } 1497 1520 1498 - static inline void 1499 - netxen_handle_int(struct netxen_adapter *adapter) 1500 - { 1501 - netxen_nic_disable_int(adapter); 1502 - napi_schedule(&adapter->napi); 1503 - } 1504 - 1505 1521 static irqreturn_t netxen_intr(int irq, void *data) 1506 1522 { 1507 1523 struct netxen_adapter *adapter = data; 1508 - u32 our_int = 0; 1509 - 1510 1524 u32 status = 0; 1511 1525 1512 1526 status = adapter->pci_read_immediate(adapter, ISR_INT_VECTOR); ··· 1512 1544 if (!ISR_LEGACY_INT_TRIGGERED(status)) 1513 1545 return IRQ_NONE; 1514 1546 1515 - } else if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { 1547 + } else { 1548 + unsigned long our_int = 0; 1516 1549 1517 1550 our_int = adapter->pci_read_normalize(adapter, CRB_INT_VECTOR); 1551 + 1518 1552 /* not our interrupt */ 1519 - if ((our_int & (0x80 << adapter->portnum)) == 0) 1553 + if (!test_and_clear_bit((7 + adapter->portnum), &our_int)) 1520 1554 return IRQ_NONE; 1521 1555 1522 - if (adapter->intr_scheme == INTR_SCHEME_PERPORT) { 1523 - /* claim interrupt */ 1524 - adapter->pci_write_normalize(adapter, 1525 - CRB_INT_VECTOR, 1526 - our_int & ~((u32)(0x80 << adapter->portnum))); 1527 - } 1556 + /* claim interrupt */ 1557 + adapter->pci_write_normalize(adapter, 1558 + CRB_INT_VECTOR, (our_int & 0xffffffff)); 1528 1559 } 1529 1560 1530 - netxen_handle_int(adapter); 1561 + /* clear interrupt */ 1562 + if (adapter->fw_major < 4) 1563 + netxen_nic_disable_int(adapter); 1564 + 1565 + adapter->pci_write_immediate(adapter, 1566 + adapter->legacy_intr.tgt_status_reg, 1567 + 0xffffffff); 1568 + /* read twice to ensure write is flushed */ 1569 + adapter->pci_read_immediate(adapter, ISR_INT_VECTOR); 1570 + adapter->pci_read_immediate(adapter, ISR_INT_VECTOR); 1571 + 1572 + napi_schedule(&adapter->napi); 1531 1573 1532 1574 return IRQ_HANDLED; 1533 1575 } ··· 1546 1568 { 1547 1569 struct netxen_adapter *adapter = data; 1548 1570 1549 - netxen_handle_int(adapter); 1571 + /* clear interrupt */ 1572 + adapter->pci_write_immediate(adapter, 1573 + msi_tgt_status[adapter->ahw.pci_func], 0xffffffff); 1574 + 1575 + napi_schedule(&adapter->napi); 1550 1576 return IRQ_HANDLED; 1551 1577 } 1552 1578
+2
drivers/net/netxen/netxen_nic_phan_reg.h
··· 125 125 #define CRB_SW_INT_MASK_2 NETXEN_NIC_REG(0x1e4) 126 126 #define CRB_SW_INT_MASK_3 NETXEN_NIC_REG(0x1e8) 127 127 128 + #define CRB_MAC_BLOCK_START NETXEN_CAM_RAM(0x1c0) 129 + 128 130 /* 129 131 * capabilities register, can be used to selectively enable/disable features 130 132 * for backward compability
-1
drivers/net/ppp_mppe.c
··· 46 46 #include <linux/err.h> 47 47 #include <linux/module.h> 48 48 #include <linux/kernel.h> 49 - #include <linux/version.h> 50 49 #include <linux/init.h> 51 50 #include <linux/types.h> 52 51 #include <linux/slab.h>
-1
drivers/net/pppol2tp.c
··· 61 61 */ 62 62 63 63 #include <linux/module.h> 64 - #include <linux/version.h> 65 64 #include <linux/string.h> 66 65 #include <linux/list.h> 67 66 #include <asm/uaccess.h>
-1
drivers/net/r6040.c
··· 24 24 25 25 #include <linux/kernel.h> 26 26 #include <linux/module.h> 27 - #include <linux/version.h> 28 27 #include <linux/moduleparam.h> 29 28 #include <linux/string.h> 30 29 #include <linux/timer.h>
-1
drivers/net/sh_eth.c
··· 20 20 * the file called "COPYING". 21 21 */ 22 22 23 - #include <linux/version.h> 24 23 #include <linux/init.h> 25 24 #include <linux/dma-mapping.h> 26 25 #include <linux/etherdevice.h>
+6 -2
drivers/net/sky2.c
··· 24 24 25 25 #include <linux/crc32.h> 26 26 #include <linux/kernel.h> 27 - #include <linux/version.h> 28 27 #include <linux/module.h> 29 28 #include <linux/netdevice.h> 30 29 #include <linux/dma-mapping.h> ··· 665 666 666 667 if (hw->chip_id != CHIP_ID_YUKON_EC) { 667 668 if (hw->chip_id == CHIP_ID_YUKON_EC_U) { 668 - ctrl = gm_phy_read(hw, port, PHY_MARV_PHY_CTRL); 669 + /* select page 2 to access MAC control register */ 670 + gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 2); 669 671 672 + ctrl = gm_phy_read(hw, port, PHY_MARV_PHY_CTRL); 670 673 /* enable Power Down */ 671 674 ctrl |= PHY_M_PC_POW_D_ENA; 672 675 gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, ctrl); 676 + 677 + /* set page register back to 0 */ 678 + gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 0); 673 679 } 674 680 675 681 /* set IEEE compatible Power Down Mode (dev. #4.99) */
-1
drivers/net/tehuti.h
··· 27 27 #include <linux/sched.h> 28 28 #include <linux/tty.h> 29 29 #include <linux/if_vlan.h> 30 - #include <linux/version.h> 31 30 #include <linux/interrupt.h> 32 31 #include <linux/vmalloc.h> 33 32 #include <asm/byteorder.h>
+4 -4
drivers/net/tlan.c
··· 360 360 { 361 361 unsigned long addr; 362 362 363 - addr = tag->buffer[8].address; 364 - addr |= (tag->buffer[9].address << 16) << 16; 363 + addr = tag->buffer[9].address; 364 + addr |= (tag->buffer[8].address << 16) << 16; 365 365 return (struct sk_buff *) addr; 366 366 } 367 367 ··· 1984 1984 TLanList *list; 1985 1985 dma_addr_t list_phys; 1986 1986 struct sk_buff *skb; 1987 - void *t = NULL; 1988 1987 1989 1988 priv->txHead = 0; 1990 1989 priv->txTail = 0; ··· 2021 2022 } 2022 2023 2023 2024 skb_reserve( skb, NET_IP_ALIGN ); 2024 - list->buffer[0].address = pci_map_single(priv->pciDev, t, 2025 + list->buffer[0].address = pci_map_single(priv->pciDev, 2026 + skb->data, 2025 2027 TLAN_MAX_FRAME_SIZE, 2026 2028 PCI_DMA_FROMDEVICE); 2027 2029 TLan_StoreSKB(list, skb);
-1
drivers/net/typhoon.c
··· 128 128 #include <asm/io.h> 129 129 #include <asm/uaccess.h> 130 130 #include <linux/in6.h> 131 - #include <linux/version.h> 132 131 #include <linux/dma-mapping.h> 133 132 134 133 #include "typhoon.h"
+10 -11
drivers/net/usb/Kconfig
··· 154 154 This driver creates an interface named "ethX", where X depends on 155 155 what other networking devices you have in use. 156 156 157 - config USB_HSO 158 - tristate "Option USB High Speed Mobile Devices" 159 - depends on USB && RFKILL 160 - default n 161 - help 162 - Choose this option if you have an Option HSDPA/HSUPA card. 163 - These cards support downlink speeds of 7.2Mbps or greater. 164 - 165 - To compile this driver as a module, choose M here: the 166 - module will be called hso. 167 - 168 157 config USB_NET_CDCETHER 169 158 tristate "CDC Ethernet support (smart devices such as cable modems)" 170 159 depends on USB_USBNET ··· 326 337 really need this non-conformant variant of CDC Ethernet (or in 327 338 some cases CDC MDLM) protocol, not "g_ether". 328 339 340 + config USB_HSO 341 + tristate "Option USB High Speed Mobile Devices" 342 + depends on USB && RFKILL 343 + default n 344 + help 345 + Choose this option if you have an Option HSDPA/HSUPA card. 346 + These cards support downlink speeds of 7.2Mbps or greater. 347 + 348 + To compile this driver as a module, choose M here: the 349 + module will be called hso. 329 350 330 351 endmenu
+30 -23
drivers/net/usb/hso.c
··· 102 102 103 103 #define MAX_RX_URBS 2 104 104 105 - #define get_serial_by_tty(x) \ 106 - (x ? (struct hso_serial *)x->driver_data : NULL) 105 + static inline struct hso_serial *get_serial_by_tty(struct tty_struct *tty) 106 + { 107 + if (tty) 108 + return tty->driver_data; 109 + return NULL; 110 + } 107 111 108 112 /*****************************************************************************/ 109 113 /* Debugging functions */ ··· 298 294 299 295 /* #define DEBUG */ 300 296 301 - #define dev2net(x) (x->port_data.dev_net) 302 - #define dev2ser(x) (x->port_data.dev_serial) 297 + static inline struct hso_net *dev2net(struct hso_device *hso_dev) 298 + { 299 + return hso_dev->port_data.dev_net; 300 + } 301 + 302 + static inline struct hso_serial *dev2ser(struct hso_device *hso_dev) 303 + { 304 + return hso_dev->port_data.dev_serial; 305 + } 303 306 304 307 /* Debugging functions */ 305 308 #ifdef DEBUG 306 309 static void dbg_dump(int line_count, const char *func_name, unsigned char *buf, 307 310 unsigned int len) 308 311 { 309 - u8 i = 0; 312 + static char name[255]; 310 313 311 - printk(KERN_DEBUG "[%d:%s]: len %d", line_count, func_name, len); 312 - 313 - for (i = 0; i < len; i++) { 314 - if (!(i % 16)) 315 - printk("\n 0x%03x: ", i); 316 - printk("%02x ", (unsigned char)buf[i]); 317 - } 318 - printk("\n"); 314 + sprintf(name, "hso[%d:%s]", line_count, func_name); 315 + print_hex_dump_bytes(name, DUMP_PREFIX_NONE, buf, len); 319 316 } 320 317 321 318 #define DUMP(buf_, len_) \ ··· 533 528 534 529 static struct hso_serial *get_serial_by_index(unsigned index) 535 530 { 536 - struct hso_serial *serial; 531 + struct hso_serial *serial = NULL; 537 532 unsigned long flags; 538 533 539 - if (!serial_table[index]) 540 - return NULL; 541 534 spin_lock_irqsave(&serial_table_lock, flags); 542 - serial = dev2ser(serial_table[index]); 535 + if (serial_table[index]) 536 + serial = dev2ser(serial_table[index]); 543 537 spin_unlock_irqrestore(&serial_table_lock, flags); 544 538 545 539 return serial; ··· 565 561 static void set_serial_by_index(unsigned index, struct hso_serial *serial) 566 562 { 567 563 unsigned long flags; 564 + 568 565 spin_lock_irqsave(&serial_table_lock, flags); 569 566 if (serial) 570 567 serial_table[index] = serial->parent; ··· 574 569 spin_unlock_irqrestore(&serial_table_lock, flags); 575 570 } 576 571 577 - /* log a meaningfull explanation of an USB status */ 572 + /* log a meaningful explanation of an USB status */ 578 573 static void log_usb_status(int status, const char *function) 579 574 { 580 575 char *explanation; ··· 1108 1103 /* reset the rts and dtr */ 1109 1104 /* do the actual close */ 1110 1105 serial->open_count--; 1106 + kref_put(&serial->parent->ref, hso_serial_ref_free); 1111 1107 if (serial->open_count <= 0) { 1112 - kref_put(&serial->parent->ref, hso_serial_ref_free); 1113 1108 serial->open_count = 0; 1114 1109 if (serial->tty) { 1115 1110 serial->tty->driver_data = NULL; ··· 1472 1467 return; 1473 1468 } 1474 1469 hso_put_activity(serial->parent); 1475 - tty_wakeup(serial->tty); 1470 + if (serial->tty) 1471 + tty_wakeup(serial->tty); 1476 1472 hso_kick_transmit(serial); 1477 1473 1478 1474 D1(" "); ··· 1544 1538 clear_bit(HSO_SERIAL_FLAG_RX_SENT, &serial->flags); 1545 1539 } else { 1546 1540 hso_put_activity(serial->parent); 1547 - tty_wakeup(serial->tty); 1541 + if (serial->tty) 1542 + tty_wakeup(serial->tty); 1548 1543 /* response to a write command */ 1549 1544 hso_kick_transmit(serial); 1550 1545 } ··· 2659 2652 hso_stop_net_device(network_table[i]); 2660 2653 cancel_work_sync(&network_table[i]->async_put_intf); 2661 2654 cancel_work_sync(&network_table[i]->async_get_intf); 2662 - if(rfk) 2655 + if (rfk) 2663 2656 rfkill_unregister(rfk); 2664 2657 hso_free_net_device(network_table[i]); 2665 2658 } ··· 2730 2723 } 2731 2724 2732 2725 /* operations setup of the serial interface */ 2733 - static struct tty_operations hso_serial_ops = { 2726 + static const struct tty_operations hso_serial_ops = { 2734 2727 .open = hso_serial_open, 2735 2728 .close = hso_serial_close, 2736 2729 .write = hso_serial_write,