diff options
Diffstat (limited to 'drivers/net')
35 files changed, 1039 insertions, 757 deletions
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 7488ee7f7caf..7f47124f118d 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c | |||
@@ -753,9 +753,11 @@ enum tx_desc_status { | |||
753 | enum ChipCaps { CapBusMaster=0x20, CapPwrMgmt=0x2000 }; | 753 | enum ChipCaps { CapBusMaster=0x20, CapPwrMgmt=0x2000 }; |
754 | 754 | ||
755 | struct vortex_extra_stats { | 755 | struct vortex_extra_stats { |
756 | unsigned long tx_deferred; | 756 | unsigned long tx_deferred; |
757 | unsigned long tx_multiple_collisions; | 757 | unsigned long tx_max_collisions; |
758 | unsigned long rx_bad_ssd; | 758 | unsigned long tx_multiple_collisions; |
759 | unsigned long tx_single_collisions; | ||
760 | unsigned long rx_bad_ssd; | ||
759 | }; | 761 | }; |
760 | 762 | ||
761 | struct vortex_private { | 763 | struct vortex_private { |
@@ -863,12 +865,14 @@ static struct { | |||
863 | const char str[ETH_GSTRING_LEN]; | 865 | const char str[ETH_GSTRING_LEN]; |
864 | } ethtool_stats_keys[] = { | 866 | } ethtool_stats_keys[] = { |
865 | { "tx_deferred" }, | 867 | { "tx_deferred" }, |
868 | { "tx_max_collisions" }, | ||
866 | { "tx_multiple_collisions" }, | 869 | { "tx_multiple_collisions" }, |
870 | { "tx_single_collisions" }, | ||
867 | { "rx_bad_ssd" }, | 871 | { "rx_bad_ssd" }, |
868 | }; | 872 | }; |
869 | 873 | ||
870 | /* number of ETHTOOL_GSTATS u64's */ | 874 | /* number of ETHTOOL_GSTATS u64's */ |
871 | #define VORTEX_NUM_STATS 3 | 875 | #define VORTEX_NUM_STATS 5 |
872 | 876 | ||
873 | static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq, | 877 | static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq, |
874 | int chip_idx, int card_idx); | 878 | int chip_idx, int card_idx); |
@@ -2108,9 +2112,12 @@ vortex_error(struct net_device *dev, int status) | |||
2108 | iowrite8(0, ioaddr + TxStatus); | 2112 | iowrite8(0, ioaddr + TxStatus); |
2109 | if (tx_status & 0x30) { /* txJabber or txUnderrun */ | 2113 | if (tx_status & 0x30) { /* txJabber or txUnderrun */ |
2110 | do_tx_reset = 1; | 2114 | do_tx_reset = 1; |
2111 | } else if ((tx_status & 0x08) && (vp->drv_flags & MAX_COLLISION_RESET)) { /* maxCollisions */ | 2115 | } else if (tx_status & 0x08) { /* maxCollisions */ |
2112 | do_tx_reset = 1; | 2116 | vp->xstats.tx_max_collisions++; |
2113 | reset_mask = 0x0108; /* Reset interface logic, but not download logic */ | 2117 | if (vp->drv_flags & MAX_COLLISION_RESET) { |
2118 | do_tx_reset = 1; | ||
2119 | reset_mask = 0x0108; /* Reset interface logic, but not download logic */ | ||
2120 | } | ||
2114 | } else { /* Merely re-enable the transmitter. */ | 2121 | } else { /* Merely re-enable the transmitter. */ |
2115 | iowrite16(TxEnable, ioaddr + EL3_CMD); | 2122 | iowrite16(TxEnable, ioaddr + EL3_CMD); |
2116 | } | 2123 | } |
@@ -2926,7 +2933,6 @@ static void update_stats(void __iomem *ioaddr, struct net_device *dev) | |||
2926 | EL3WINDOW(6); | 2933 | EL3WINDOW(6); |
2927 | vp->stats.tx_carrier_errors += ioread8(ioaddr + 0); | 2934 | vp->stats.tx_carrier_errors += ioread8(ioaddr + 0); |
2928 | vp->stats.tx_heartbeat_errors += ioread8(ioaddr + 1); | 2935 | vp->stats.tx_heartbeat_errors += ioread8(ioaddr + 1); |
2929 | vp->stats.collisions += ioread8(ioaddr + 3); | ||
2930 | vp->stats.tx_window_errors += ioread8(ioaddr + 4); | 2936 | vp->stats.tx_window_errors += ioread8(ioaddr + 4); |
2931 | vp->stats.rx_fifo_errors += ioread8(ioaddr + 5); | 2937 | vp->stats.rx_fifo_errors += ioread8(ioaddr + 5); |
2932 | vp->stats.tx_packets += ioread8(ioaddr + 6); | 2938 | vp->stats.tx_packets += ioread8(ioaddr + 6); |
@@ -2939,10 +2945,15 @@ static void update_stats(void __iomem *ioaddr, struct net_device *dev) | |||
2939 | vp->stats.tx_bytes += ioread16(ioaddr + 12); | 2945 | vp->stats.tx_bytes += ioread16(ioaddr + 12); |
2940 | /* Extra stats for get_ethtool_stats() */ | 2946 | /* Extra stats for get_ethtool_stats() */ |
2941 | vp->xstats.tx_multiple_collisions += ioread8(ioaddr + 2); | 2947 | vp->xstats.tx_multiple_collisions += ioread8(ioaddr + 2); |
2948 | vp->xstats.tx_single_collisions += ioread8(ioaddr + 3); | ||
2942 | vp->xstats.tx_deferred += ioread8(ioaddr + 8); | 2949 | vp->xstats.tx_deferred += ioread8(ioaddr + 8); |
2943 | EL3WINDOW(4); | 2950 | EL3WINDOW(4); |
2944 | vp->xstats.rx_bad_ssd += ioread8(ioaddr + 12); | 2951 | vp->xstats.rx_bad_ssd += ioread8(ioaddr + 12); |
2945 | 2952 | ||
2953 | vp->stats.collisions = vp->xstats.tx_multiple_collisions | ||
2954 | + vp->xstats.tx_single_collisions | ||
2955 | + vp->xstats.tx_max_collisions; | ||
2956 | |||
2946 | { | 2957 | { |
2947 | u8 up = ioread8(ioaddr + 13); | 2958 | u8 up = ioread8(ioaddr + 13); |
2948 | vp->stats.rx_bytes += (up & 0x0f) << 16; | 2959 | vp->stats.rx_bytes += (up & 0x0f) << 16; |
@@ -3036,8 +3047,10 @@ static void vortex_get_ethtool_stats(struct net_device *dev, | |||
3036 | spin_unlock_irqrestore(&vp->lock, flags); | 3047 | spin_unlock_irqrestore(&vp->lock, flags); |
3037 | 3048 | ||
3038 | data[0] = vp->xstats.tx_deferred; | 3049 | data[0] = vp->xstats.tx_deferred; |
3039 | data[1] = vp->xstats.tx_multiple_collisions; | 3050 | data[1] = vp->xstats.tx_max_collisions; |
3040 | data[2] = vp->xstats.rx_bad_ssd; | 3051 | data[2] = vp->xstats.tx_multiple_collisions; |
3052 | data[3] = vp->xstats.tx_single_collisions; | ||
3053 | data[4] = vp->xstats.rx_bad_ssd; | ||
3041 | } | 3054 | } |
3042 | 3055 | ||
3043 | 3056 | ||
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index adfba44dac5a..2beac55b57d6 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c | |||
@@ -586,6 +586,7 @@ struct rtl8139_private { | |||
586 | dma_addr_t tx_bufs_dma; | 586 | dma_addr_t tx_bufs_dma; |
587 | signed char phys[4]; /* MII device addresses. */ | 587 | signed char phys[4]; /* MII device addresses. */ |
588 | char twistie, twist_row, twist_col; /* Twister tune state. */ | 588 | char twistie, twist_row, twist_col; /* Twister tune state. */ |
589 | unsigned int watchdog_fired : 1; | ||
589 | unsigned int default_port : 4; /* Last dev->if_port value. */ | 590 | unsigned int default_port : 4; /* Last dev->if_port value. */ |
590 | unsigned int have_thread : 1; | 591 | unsigned int have_thread : 1; |
591 | spinlock_t lock; | 592 | spinlock_t lock; |
@@ -638,6 +639,7 @@ static void rtl8139_set_rx_mode (struct net_device *dev); | |||
638 | static void __set_rx_mode (struct net_device *dev); | 639 | static void __set_rx_mode (struct net_device *dev); |
639 | static void rtl8139_hw_start (struct net_device *dev); | 640 | static void rtl8139_hw_start (struct net_device *dev); |
640 | static void rtl8139_thread (void *_data); | 641 | static void rtl8139_thread (void *_data); |
642 | static void rtl8139_tx_timeout_task(void *_data); | ||
641 | static struct ethtool_ops rtl8139_ethtool_ops; | 643 | static struct ethtool_ops rtl8139_ethtool_ops; |
642 | 644 | ||
643 | /* write MMIO register, with flush */ | 645 | /* write MMIO register, with flush */ |
@@ -1598,13 +1600,14 @@ static void rtl8139_thread (void *_data) | |||
1598 | { | 1600 | { |
1599 | struct net_device *dev = _data; | 1601 | struct net_device *dev = _data; |
1600 | struct rtl8139_private *tp = netdev_priv(dev); | 1602 | struct rtl8139_private *tp = netdev_priv(dev); |
1601 | unsigned long thr_delay; | 1603 | unsigned long thr_delay = next_tick; |
1602 | 1604 | ||
1603 | if (rtnl_shlock_nowait() == 0) { | 1605 | if (tp->watchdog_fired) { |
1606 | tp->watchdog_fired = 0; | ||
1607 | rtl8139_tx_timeout_task(_data); | ||
1608 | } else if (rtnl_shlock_nowait() == 0) { | ||
1604 | rtl8139_thread_iter (dev, tp, tp->mmio_addr); | 1609 | rtl8139_thread_iter (dev, tp, tp->mmio_addr); |
1605 | rtnl_unlock (); | 1610 | rtnl_unlock (); |
1606 | |||
1607 | thr_delay = next_tick; | ||
1608 | } else { | 1611 | } else { |
1609 | /* unlikely race. mitigate with fast poll. */ | 1612 | /* unlikely race. mitigate with fast poll. */ |
1610 | thr_delay = HZ / 2; | 1613 | thr_delay = HZ / 2; |
@@ -1631,7 +1634,8 @@ static void rtl8139_stop_thread(struct rtl8139_private *tp) | |||
1631 | if (tp->have_thread) { | 1634 | if (tp->have_thread) { |
1632 | cancel_rearming_delayed_work(&tp->thread); | 1635 | cancel_rearming_delayed_work(&tp->thread); |
1633 | tp->have_thread = 0; | 1636 | tp->have_thread = 0; |
1634 | } | 1637 | } else |
1638 | flush_scheduled_work(); | ||
1635 | } | 1639 | } |
1636 | 1640 | ||
1637 | static inline void rtl8139_tx_clear (struct rtl8139_private *tp) | 1641 | static inline void rtl8139_tx_clear (struct rtl8139_private *tp) |
@@ -1642,14 +1646,13 @@ static inline void rtl8139_tx_clear (struct rtl8139_private *tp) | |||
1642 | /* XXX account for unsent Tx packets in tp->stats.tx_dropped */ | 1646 | /* XXX account for unsent Tx packets in tp->stats.tx_dropped */ |
1643 | } | 1647 | } |
1644 | 1648 | ||
1645 | 1649 | static void rtl8139_tx_timeout_task (void *_data) | |
1646 | static void rtl8139_tx_timeout (struct net_device *dev) | ||
1647 | { | 1650 | { |
1651 | struct net_device *dev = _data; | ||
1648 | struct rtl8139_private *tp = netdev_priv(dev); | 1652 | struct rtl8139_private *tp = netdev_priv(dev); |
1649 | void __iomem *ioaddr = tp->mmio_addr; | 1653 | void __iomem *ioaddr = tp->mmio_addr; |
1650 | int i; | 1654 | int i; |
1651 | u8 tmp8; | 1655 | u8 tmp8; |
1652 | unsigned long flags; | ||
1653 | 1656 | ||
1654 | printk (KERN_DEBUG "%s: Transmit timeout, status %2.2x %4.4x %4.4x " | 1657 | printk (KERN_DEBUG "%s: Transmit timeout, status %2.2x %4.4x %4.4x " |
1655 | "media %2.2x.\n", dev->name, RTL_R8 (ChipCmd), | 1658 | "media %2.2x.\n", dev->name, RTL_R8 (ChipCmd), |
@@ -1670,23 +1673,34 @@ static void rtl8139_tx_timeout (struct net_device *dev) | |||
1670 | if (tmp8 & CmdTxEnb) | 1673 | if (tmp8 & CmdTxEnb) |
1671 | RTL_W8 (ChipCmd, CmdRxEnb); | 1674 | RTL_W8 (ChipCmd, CmdRxEnb); |
1672 | 1675 | ||
1673 | spin_lock(&tp->rx_lock); | 1676 | spin_lock_bh(&tp->rx_lock); |
1674 | /* Disable interrupts by clearing the interrupt mask. */ | 1677 | /* Disable interrupts by clearing the interrupt mask. */ |
1675 | RTL_W16 (IntrMask, 0x0000); | 1678 | RTL_W16 (IntrMask, 0x0000); |
1676 | 1679 | ||
1677 | /* Stop a shared interrupt from scavenging while we are. */ | 1680 | /* Stop a shared interrupt from scavenging while we are. */ |
1678 | spin_lock_irqsave (&tp->lock, flags); | 1681 | spin_lock_irq(&tp->lock); |
1679 | rtl8139_tx_clear (tp); | 1682 | rtl8139_tx_clear (tp); |
1680 | spin_unlock_irqrestore (&tp->lock, flags); | 1683 | spin_unlock_irq(&tp->lock); |
1681 | 1684 | ||
1682 | /* ...and finally, reset everything */ | 1685 | /* ...and finally, reset everything */ |
1683 | if (netif_running(dev)) { | 1686 | if (netif_running(dev)) { |
1684 | rtl8139_hw_start (dev); | 1687 | rtl8139_hw_start (dev); |
1685 | netif_wake_queue (dev); | 1688 | netif_wake_queue (dev); |
1686 | } | 1689 | } |
1687 | spin_unlock(&tp->rx_lock); | 1690 | spin_unlock_bh(&tp->rx_lock); |
1688 | } | 1691 | } |
1689 | 1692 | ||
1693 | static void rtl8139_tx_timeout (struct net_device *dev) | ||
1694 | { | ||
1695 | struct rtl8139_private *tp = netdev_priv(dev); | ||
1696 | |||
1697 | if (!tp->have_thread) { | ||
1698 | INIT_WORK(&tp->thread, rtl8139_tx_timeout_task, dev); | ||
1699 | schedule_delayed_work(&tp->thread, next_tick); | ||
1700 | } else | ||
1701 | tp->watchdog_fired = 1; | ||
1702 | |||
1703 | } | ||
1690 | 1704 | ||
1691 | static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev) | 1705 | static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev) |
1692 | { | 1706 | { |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 626508afe1b1..47c72a63dfe1 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -4,9 +4,9 @@ | |||
4 | # | 4 | # |
5 | 5 | ||
6 | menu "Network device support" | 6 | menu "Network device support" |
7 | depends on NET | ||
7 | 8 | ||
8 | config NETDEVICES | 9 | config NETDEVICES |
9 | depends on NET | ||
10 | default y if UML | 10 | default y if UML |
11 | bool "Network device support" | 11 | bool "Network device support" |
12 | ---help--- | 12 | ---help--- |
@@ -24,9 +24,6 @@ config NETDEVICES | |||
24 | 24 | ||
25 | If unsure, say Y. | 25 | If unsure, say Y. |
26 | 26 | ||
27 | # All the following symbols are dependent on NETDEVICES - do not repeat | ||
28 | # that for each of the symbols. | ||
29 | if NETDEVICES | ||
30 | 27 | ||
31 | config IFB | 28 | config IFB |
32 | tristate "Intermediate Functional Block support" | 29 | tristate "Intermediate Functional Block support" |
@@ -2034,13 +2031,28 @@ config SKGE | |||
2034 | It does not support the link failover and network management | 2031 | It does not support the link failover and network management |
2035 | features that "portable" vendor supplied sk98lin driver does. | 2032 | features that "portable" vendor supplied sk98lin driver does. |
2036 | 2033 | ||
2034 | This driver supports adapters based on the original Yukon chipset: | ||
2035 | Marvell 88E8001, Belkin F5D5005, CNet GigaCard, DLink DGE-530T, | ||
2036 | Linksys EG1032/EG1064, 3Com 3C940/3C940B, SysKonnect SK-9871/9872. | ||
2037 | |||
2038 | It does not support the newer Yukon2 chipset: a separate driver, | ||
2039 | sky2, is provided for Yukon2-based adapters. | ||
2040 | |||
2041 | To compile this driver as a module, choose M here: the module | ||
2042 | will be called skge. This is recommended. | ||
2037 | 2043 | ||
2038 | config SKY2 | 2044 | config SKY2 |
2039 | tristate "SysKonnect Yukon2 support (EXPERIMENTAL)" | 2045 | tristate "SysKonnect Yukon2 support (EXPERIMENTAL)" |
2040 | depends on PCI && EXPERIMENTAL | 2046 | depends on PCI && EXPERIMENTAL |
2041 | select CRC32 | 2047 | select CRC32 |
2042 | ---help--- | 2048 | ---help--- |
2043 | This driver support the Marvell Yukon 2 Gigabit Ethernet adapter. | 2049 | This driver supports Gigabit Ethernet adapters based on the the |
2050 | Marvell Yukon 2 chipset: | ||
2051 | Marvell 88E8021/88E8022/88E8035/88E8036/88E8038/88E8050/88E8052/ | ||
2052 | 88E8053/88E8055/88E8061/88E8062, SysKonnect SK-9E21D/SK-9S21 | ||
2053 | |||
2054 | This driver does not support the original Yukon chipset: a seperate | ||
2055 | driver, skge, is provided for Yukon-based adapters. | ||
2044 | 2056 | ||
2045 | To compile this driver as a module, choose M here: the module | 2057 | To compile this driver as a module, choose M here: the module |
2046 | will be called sky2. This is recommended. | 2058 | will be called sky2. This is recommended. |
@@ -2050,8 +2062,15 @@ config SK98LIN | |||
2050 | depends on PCI | 2062 | depends on PCI |
2051 | ---help--- | 2063 | ---help--- |
2052 | Say Y here if you have a Marvell Yukon or SysKonnect SK-98xx/SK-95xx | 2064 | Say Y here if you have a Marvell Yukon or SysKonnect SK-98xx/SK-95xx |
2053 | compliant Gigabit Ethernet Adapter. The following adapters are supported | 2065 | compliant Gigabit Ethernet Adapter. |
2054 | by this driver: | 2066 | |
2067 | This driver supports the original Yukon chipset. A cleaner driver is | ||
2068 | also available (skge) which seems to work better than this one. | ||
2069 | |||
2070 | This driver does not support the newer Yukon2 chipset. A seperate | ||
2071 | driver, sky2, is provided to support Yukon2-based adapters. | ||
2072 | |||
2073 | The following adapters are supported by this driver: | ||
2055 | - 3Com 3C940 Gigabit LOM Ethernet Adapter | 2074 | - 3Com 3C940 Gigabit LOM Ethernet Adapter |
2056 | - 3Com 3C941 Gigabit LOM Ethernet Adapter | 2075 | - 3Com 3C941 Gigabit LOM Ethernet Adapter |
2057 | - Allied Telesyn AT-2970LX Gigabit Ethernet Adapter | 2076 | - Allied Telesyn AT-2970LX Gigabit Ethernet Adapter |
@@ -2696,8 +2715,6 @@ config NETCONSOLE | |||
2696 | If you want to log kernel messages over the network, enable this. | 2715 | If you want to log kernel messages over the network, enable this. |
2697 | See <file:Documentation/networking/netconsole.txt> for details. | 2716 | See <file:Documentation/networking/netconsole.txt> for details. |
2698 | 2717 | ||
2699 | endif #NETDEVICES | ||
2700 | |||
2701 | config NETPOLL | 2718 | config NETPOLL |
2702 | def_bool NETCONSOLE | 2719 | def_bool NETCONSOLE |
2703 | 2720 | ||
diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c index b8953de5664a..b508812e97ac 100644 --- a/drivers/net/acenic.c +++ b/drivers/net/acenic.c | |||
@@ -1002,6 +1002,8 @@ static int __devinit ace_init(struct net_device *dev) | |||
1002 | 1002 | ||
1003 | mac1 = 0; | 1003 | mac1 = 0; |
1004 | for(i = 0; i < 4; i++) { | 1004 | for(i = 0; i < 4; i++) { |
1005 | int tmp; | ||
1006 | |||
1005 | mac1 = mac1 << 8; | 1007 | mac1 = mac1 << 8; |
1006 | tmp = read_eeprom_byte(dev, 0x8c+i); | 1008 | tmp = read_eeprom_byte(dev, 0x8c+i); |
1007 | if (tmp < 0) { | 1009 | if (tmp < 0) { |
@@ -1012,6 +1014,8 @@ static int __devinit ace_init(struct net_device *dev) | |||
1012 | } | 1014 | } |
1013 | mac2 = 0; | 1015 | mac2 = 0; |
1014 | for(i = 4; i < 8; i++) { | 1016 | for(i = 4; i < 8; i++) { |
1017 | int tmp; | ||
1018 | |||
1015 | mac2 = mac2 << 8; | 1019 | mac2 = mac2 << 8; |
1016 | tmp = read_eeprom_byte(dev, 0x8c+i); | 1020 | tmp = read_eeprom_byte(dev, 0x8c+i); |
1017 | if (tmp < 0) { | 1021 | if (tmp < 0) { |
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index df9d6e80c4f2..c3267e4e1bb0 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -1399,7 +1399,6 @@ static int b44_open(struct net_device *dev) | |||
1399 | b44_init_rings(bp); | 1399 | b44_init_rings(bp); |
1400 | b44_init_hw(bp); | 1400 | b44_init_hw(bp); |
1401 | 1401 | ||
1402 | netif_carrier_off(dev); | ||
1403 | b44_check_phy(bp); | 1402 | b44_check_phy(bp); |
1404 | 1403 | ||
1405 | err = request_irq(dev->irq, b44_interrupt, SA_SHIRQ, dev->name, dev); | 1404 | err = request_irq(dev->irq, b44_interrupt, SA_SHIRQ, dev->name, dev); |
@@ -1464,7 +1463,7 @@ static int b44_close(struct net_device *dev) | |||
1464 | #endif | 1463 | #endif |
1465 | b44_halt(bp); | 1464 | b44_halt(bp); |
1466 | b44_free_rings(bp); | 1465 | b44_free_rings(bp); |
1467 | netif_carrier_off(bp->dev); | 1466 | netif_carrier_off(dev); |
1468 | 1467 | ||
1469 | spin_unlock_irq(&bp->lock); | 1468 | spin_unlock_irq(&bp->lock); |
1470 | 1469 | ||
@@ -2000,6 +1999,8 @@ static int __devinit b44_init_one(struct pci_dev *pdev, | |||
2000 | dev->irq = pdev->irq; | 1999 | dev->irq = pdev->irq; |
2001 | SET_ETHTOOL_OPS(dev, &b44_ethtool_ops); | 2000 | SET_ETHTOOL_OPS(dev, &b44_ethtool_ops); |
2002 | 2001 | ||
2002 | netif_carrier_off(dev); | ||
2003 | |||
2003 | err = b44_get_invariants(bp); | 2004 | err = b44_get_invariants(bp); |
2004 | if (err) { | 2005 | if (err) { |
2005 | printk(KERN_ERR PFX "Problem fetching invariants of chip, " | 2006 | printk(KERN_ERR PFX "Problem fetching invariants of chip, " |
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 49fa1e4413fa..a24200d0a616 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* bnx2.c: Broadcom NX2 network driver. | 1 | /* bnx2.c: Broadcom NX2 network driver. |
2 | * | 2 | * |
3 | * Copyright (c) 2004, 2005 Broadcom Corporation | 3 | * Copyright (c) 2004, 2005, 2006 Broadcom Corporation |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
@@ -14,8 +14,8 @@ | |||
14 | 14 | ||
15 | #define DRV_MODULE_NAME "bnx2" | 15 | #define DRV_MODULE_NAME "bnx2" |
16 | #define PFX DRV_MODULE_NAME ": " | 16 | #define PFX DRV_MODULE_NAME ": " |
17 | #define DRV_MODULE_VERSION "1.4.30" | 17 | #define DRV_MODULE_VERSION "1.4.31" |
18 | #define DRV_MODULE_RELDATE "October 11, 2005" | 18 | #define DRV_MODULE_RELDATE "January 19, 2006" |
19 | 19 | ||
20 | #define RUN_AT(x) (jiffies + (x)) | 20 | #define RUN_AT(x) (jiffies + (x)) |
21 | 21 | ||
@@ -316,6 +316,10 @@ bnx2_enable_int(struct bnx2 *bp) | |||
316 | u32 val; | 316 | u32 val; |
317 | 317 | ||
318 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, | 318 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, |
319 | BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | | ||
320 | BNX2_PCICFG_INT_ACK_CMD_MASK_INT | bp->last_status_idx); | ||
321 | |||
322 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, | ||
319 | BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | bp->last_status_idx); | 323 | BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | bp->last_status_idx); |
320 | 324 | ||
321 | val = REG_RD(bp, BNX2_HC_COMMAND); | 325 | val = REG_RD(bp, BNX2_HC_COMMAND); |
@@ -1171,7 +1175,8 @@ bnx2_init_5708s_phy(struct bnx2 *bp) | |||
1171 | } | 1175 | } |
1172 | 1176 | ||
1173 | if ((CHIP_ID(bp) == CHIP_ID_5708_A0) || | 1177 | if ((CHIP_ID(bp) == CHIP_ID_5708_A0) || |
1174 | (CHIP_ID(bp) == CHIP_ID_5708_B0)) { | 1178 | (CHIP_ID(bp) == CHIP_ID_5708_B0) || |
1179 | (CHIP_ID(bp) == CHIP_ID_5708_B1)) { | ||
1175 | /* increase tx signal amplitude */ | 1180 | /* increase tx signal amplitude */ |
1176 | bnx2_write_phy(bp, BCM5708S_BLK_ADDR, | 1181 | bnx2_write_phy(bp, BCM5708S_BLK_ADDR, |
1177 | BCM5708S_BLK_ADDR_TX_MISC); | 1182 | BCM5708S_BLK_ADDR_TX_MISC); |
@@ -1326,44 +1331,78 @@ bnx2_set_mac_loopback(struct bnx2 *bp) | |||
1326 | return 0; | 1331 | return 0; |
1327 | } | 1332 | } |
1328 | 1333 | ||
1334 | static int bnx2_test_link(struct bnx2 *); | ||
1335 | |||
1336 | static int | ||
1337 | bnx2_set_phy_loopback(struct bnx2 *bp) | ||
1338 | { | ||
1339 | u32 mac_mode; | ||
1340 | int rc, i; | ||
1341 | |||
1342 | spin_lock_bh(&bp->phy_lock); | ||
1343 | rc = bnx2_write_phy(bp, MII_BMCR, BMCR_LOOPBACK | BMCR_FULLDPLX | | ||
1344 | BMCR_SPEED1000); | ||
1345 | spin_unlock_bh(&bp->phy_lock); | ||
1346 | if (rc) | ||
1347 | return rc; | ||
1348 | |||
1349 | for (i = 0; i < 10; i++) { | ||
1350 | if (bnx2_test_link(bp) == 0) | ||
1351 | break; | ||
1352 | udelay(10); | ||
1353 | } | ||
1354 | |||
1355 | mac_mode = REG_RD(bp, BNX2_EMAC_MODE); | ||
1356 | mac_mode &= ~(BNX2_EMAC_MODE_PORT | BNX2_EMAC_MODE_HALF_DUPLEX | | ||
1357 | BNX2_EMAC_MODE_MAC_LOOP | BNX2_EMAC_MODE_FORCE_LINK | | ||
1358 | BNX2_EMAC_MODE_25G); | ||
1359 | |||
1360 | mac_mode |= BNX2_EMAC_MODE_PORT_GMII; | ||
1361 | REG_WR(bp, BNX2_EMAC_MODE, mac_mode); | ||
1362 | bp->link_up = 1; | ||
1363 | return 0; | ||
1364 | } | ||
1365 | |||
1329 | static int | 1366 | static int |
1330 | bnx2_fw_sync(struct bnx2 *bp, u32 msg_data) | 1367 | bnx2_fw_sync(struct bnx2 *bp, u32 msg_data, int silent) |
1331 | { | 1368 | { |
1332 | int i; | 1369 | int i; |
1333 | u32 val; | 1370 | u32 val; |
1334 | 1371 | ||
1335 | if (bp->fw_timed_out) | ||
1336 | return -EBUSY; | ||
1337 | |||
1338 | bp->fw_wr_seq++; | 1372 | bp->fw_wr_seq++; |
1339 | msg_data |= bp->fw_wr_seq; | 1373 | msg_data |= bp->fw_wr_seq; |
1340 | 1374 | ||
1341 | REG_WR_IND(bp, bp->shmem_base + BNX2_DRV_MB, msg_data); | 1375 | REG_WR_IND(bp, bp->shmem_base + BNX2_DRV_MB, msg_data); |
1342 | 1376 | ||
1343 | /* wait for an acknowledgement. */ | 1377 | /* wait for an acknowledgement. */ |
1344 | for (i = 0; i < (FW_ACK_TIME_OUT_MS * 1000)/5; i++) { | 1378 | for (i = 0; i < (FW_ACK_TIME_OUT_MS / 10); i++) { |
1345 | udelay(5); | 1379 | msleep(10); |
1346 | 1380 | ||
1347 | val = REG_RD_IND(bp, bp->shmem_base + BNX2_FW_MB); | 1381 | val = REG_RD_IND(bp, bp->shmem_base + BNX2_FW_MB); |
1348 | 1382 | ||
1349 | if ((val & BNX2_FW_MSG_ACK) == (msg_data & BNX2_DRV_MSG_SEQ)) | 1383 | if ((val & BNX2_FW_MSG_ACK) == (msg_data & BNX2_DRV_MSG_SEQ)) |
1350 | break; | 1384 | break; |
1351 | } | 1385 | } |
1386 | if ((msg_data & BNX2_DRV_MSG_DATA) == BNX2_DRV_MSG_DATA_WAIT0) | ||
1387 | return 0; | ||
1352 | 1388 | ||
1353 | /* If we timed out, inform the firmware that this is the case. */ | 1389 | /* If we timed out, inform the firmware that this is the case. */ |
1354 | if (((val & BNX2_FW_MSG_ACK) != (msg_data & BNX2_DRV_MSG_SEQ)) && | 1390 | if ((val & BNX2_FW_MSG_ACK) != (msg_data & BNX2_DRV_MSG_SEQ)) { |
1355 | ((msg_data & BNX2_DRV_MSG_DATA) != BNX2_DRV_MSG_DATA_WAIT0)) { | 1391 | if (!silent) |
1392 | printk(KERN_ERR PFX "fw sync timeout, reset code = " | ||
1393 | "%x\n", msg_data); | ||
1356 | 1394 | ||
1357 | msg_data &= ~BNX2_DRV_MSG_CODE; | 1395 | msg_data &= ~BNX2_DRV_MSG_CODE; |
1358 | msg_data |= BNX2_DRV_MSG_CODE_FW_TIMEOUT; | 1396 | msg_data |= BNX2_DRV_MSG_CODE_FW_TIMEOUT; |
1359 | 1397 | ||
1360 | REG_WR_IND(bp, bp->shmem_base + BNX2_DRV_MB, msg_data); | 1398 | REG_WR_IND(bp, bp->shmem_base + BNX2_DRV_MB, msg_data); |
1361 | 1399 | ||
1362 | bp->fw_timed_out = 1; | ||
1363 | |||
1364 | return -EBUSY; | 1400 | return -EBUSY; |
1365 | } | 1401 | } |
1366 | 1402 | ||
1403 | if ((val & BNX2_FW_MSG_STATUS_MASK) != BNX2_FW_MSG_STATUS_OK) | ||
1404 | return -EIO; | ||
1405 | |||
1367 | return 0; | 1406 | return 0; |
1368 | } | 1407 | } |
1369 | 1408 | ||
@@ -1657,7 +1696,7 @@ bnx2_rx_int(struct bnx2 *bp, int budget) | |||
1657 | rmb(); | 1696 | rmb(); |
1658 | while (sw_cons != hw_cons) { | 1697 | while (sw_cons != hw_cons) { |
1659 | unsigned int len; | 1698 | unsigned int len; |
1660 | u16 status; | 1699 | u32 status; |
1661 | struct sw_bd *rx_buf; | 1700 | struct sw_bd *rx_buf; |
1662 | struct sk_buff *skb; | 1701 | struct sk_buff *skb; |
1663 | 1702 | ||
@@ -1673,7 +1712,7 @@ bnx2_rx_int(struct bnx2 *bp, int budget) | |||
1673 | rx_hdr = (struct l2_fhdr *) skb->data; | 1712 | rx_hdr = (struct l2_fhdr *) skb->data; |
1674 | len = rx_hdr->l2_fhdr_pkt_len - 4; | 1713 | len = rx_hdr->l2_fhdr_pkt_len - 4; |
1675 | 1714 | ||
1676 | if (rx_hdr->l2_fhdr_errors & | 1715 | if ((status = rx_hdr->l2_fhdr_status) & |
1677 | (L2_FHDR_ERRORS_BAD_CRC | | 1716 | (L2_FHDR_ERRORS_BAD_CRC | |
1678 | L2_FHDR_ERRORS_PHY_DECODE | | 1717 | L2_FHDR_ERRORS_PHY_DECODE | |
1679 | L2_FHDR_ERRORS_ALIGNMENT | | 1718 | L2_FHDR_ERRORS_ALIGNMENT | |
@@ -1732,15 +1771,13 @@ reuse_rx: | |||
1732 | 1771 | ||
1733 | } | 1772 | } |
1734 | 1773 | ||
1735 | status = rx_hdr->l2_fhdr_status; | ||
1736 | skb->ip_summed = CHECKSUM_NONE; | 1774 | skb->ip_summed = CHECKSUM_NONE; |
1737 | if (bp->rx_csum && | 1775 | if (bp->rx_csum && |
1738 | (status & (L2_FHDR_STATUS_TCP_SEGMENT | | 1776 | (status & (L2_FHDR_STATUS_TCP_SEGMENT | |
1739 | L2_FHDR_STATUS_UDP_DATAGRAM))) { | 1777 | L2_FHDR_STATUS_UDP_DATAGRAM))) { |
1740 | 1778 | ||
1741 | u16 cksum = rx_hdr->l2_fhdr_tcp_udp_xsum; | 1779 | if (likely((status & (L2_FHDR_ERRORS_TCP_XSUM | |
1742 | 1780 | L2_FHDR_ERRORS_UDP_XSUM)) == 0)) | |
1743 | if (cksum == 0xffff) | ||
1744 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 1781 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
1745 | } | 1782 | } |
1746 | 1783 | ||
@@ -1794,7 +1831,7 @@ static irqreturn_t | |||
1794 | bnx2_msi(int irq, void *dev_instance, struct pt_regs *regs) | 1831 | bnx2_msi(int irq, void *dev_instance, struct pt_regs *regs) |
1795 | { | 1832 | { |
1796 | struct net_device *dev = dev_instance; | 1833 | struct net_device *dev = dev_instance; |
1797 | struct bnx2 *bp = dev->priv; | 1834 | struct bnx2 *bp = netdev_priv(dev); |
1798 | 1835 | ||
1799 | prefetch(bp->status_blk); | 1836 | prefetch(bp->status_blk); |
1800 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, | 1837 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, |
@@ -1814,7 +1851,7 @@ static irqreturn_t | |||
1814 | bnx2_interrupt(int irq, void *dev_instance, struct pt_regs *regs) | 1851 | bnx2_interrupt(int irq, void *dev_instance, struct pt_regs *regs) |
1815 | { | 1852 | { |
1816 | struct net_device *dev = dev_instance; | 1853 | struct net_device *dev = dev_instance; |
1817 | struct bnx2 *bp = dev->priv; | 1854 | struct bnx2 *bp = netdev_priv(dev); |
1818 | 1855 | ||
1819 | /* When using INTx, it is possible for the interrupt to arrive | 1856 | /* When using INTx, it is possible for the interrupt to arrive |
1820 | * at the CPU before the status block posted prior to the | 1857 | * at the CPU before the status block posted prior to the |
@@ -1859,7 +1896,7 @@ bnx2_has_work(struct bnx2 *bp) | |||
1859 | static int | 1896 | static int |
1860 | bnx2_poll(struct net_device *dev, int *budget) | 1897 | bnx2_poll(struct net_device *dev, int *budget) |
1861 | { | 1898 | { |
1862 | struct bnx2 *bp = dev->priv; | 1899 | struct bnx2 *bp = netdev_priv(dev); |
1863 | 1900 | ||
1864 | if ((bp->status_blk->status_attn_bits & | 1901 | if ((bp->status_blk->status_attn_bits & |
1865 | STATUS_ATTN_BITS_LINK_STATE) != | 1902 | STATUS_ATTN_BITS_LINK_STATE) != |
@@ -1891,9 +1928,20 @@ bnx2_poll(struct net_device *dev, int *budget) | |||
1891 | 1928 | ||
1892 | if (!bnx2_has_work(bp)) { | 1929 | if (!bnx2_has_work(bp)) { |
1893 | netif_rx_complete(dev); | 1930 | netif_rx_complete(dev); |
1931 | if (likely(bp->flags & USING_MSI_FLAG)) { | ||
1932 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, | ||
1933 | BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | | ||
1934 | bp->last_status_idx); | ||
1935 | return 0; | ||
1936 | } | ||
1937 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, | ||
1938 | BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | | ||
1939 | BNX2_PCICFG_INT_ACK_CMD_MASK_INT | | ||
1940 | bp->last_status_idx); | ||
1941 | |||
1894 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, | 1942 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, |
1895 | BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | | 1943 | BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | |
1896 | bp->last_status_idx); | 1944 | bp->last_status_idx); |
1897 | return 0; | 1945 | return 0; |
1898 | } | 1946 | } |
1899 | 1947 | ||
@@ -1906,7 +1954,7 @@ bnx2_poll(struct net_device *dev, int *budget) | |||
1906 | static void | 1954 | static void |
1907 | bnx2_set_rx_mode(struct net_device *dev) | 1955 | bnx2_set_rx_mode(struct net_device *dev) |
1908 | { | 1956 | { |
1909 | struct bnx2 *bp = dev->priv; | 1957 | struct bnx2 *bp = netdev_priv(dev); |
1910 | u32 rx_mode, sort_mode; | 1958 | u32 rx_mode, sort_mode; |
1911 | int i; | 1959 | int i; |
1912 | 1960 | ||
@@ -1916,11 +1964,11 @@ bnx2_set_rx_mode(struct net_device *dev) | |||
1916 | BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG); | 1964 | BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG); |
1917 | sort_mode = 1 | BNX2_RPM_SORT_USER0_BC_EN; | 1965 | sort_mode = 1 | BNX2_RPM_SORT_USER0_BC_EN; |
1918 | #ifdef BCM_VLAN | 1966 | #ifdef BCM_VLAN |
1919 | if (!bp->vlgrp) { | 1967 | if (!bp->vlgrp && !(bp->flags & ASF_ENABLE_FLAG)) |
1920 | rx_mode |= BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG; | 1968 | rx_mode |= BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG; |
1921 | } | ||
1922 | #else | 1969 | #else |
1923 | rx_mode |= BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG; | 1970 | if (!(bp->flags & ASF_ENABLE_FLAG)) |
1971 | rx_mode |= BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG; | ||
1924 | #endif | 1972 | #endif |
1925 | if (dev->flags & IFF_PROMISC) { | 1973 | if (dev->flags & IFF_PROMISC) { |
1926 | /* Promiscuous mode. */ | 1974 | /* Promiscuous mode. */ |
@@ -2338,7 +2386,6 @@ bnx2_set_power_state(struct bnx2 *bp, pci_power_t state) | |||
2338 | val |= BNX2_EMAC_MODE_PORT_MII | | 2386 | val |= BNX2_EMAC_MODE_PORT_MII | |
2339 | BNX2_EMAC_MODE_MPKT_RCVD | | 2387 | BNX2_EMAC_MODE_MPKT_RCVD | |
2340 | BNX2_EMAC_MODE_ACPI_RCVD | | 2388 | BNX2_EMAC_MODE_ACPI_RCVD | |
2341 | BNX2_EMAC_MODE_FORCE_LINK | | ||
2342 | BNX2_EMAC_MODE_MPKT; | 2389 | BNX2_EMAC_MODE_MPKT; |
2343 | 2390 | ||
2344 | REG_WR(bp, BNX2_EMAC_MODE, val); | 2391 | REG_WR(bp, BNX2_EMAC_MODE, val); |
@@ -2374,7 +2421,8 @@ bnx2_set_power_state(struct bnx2 *bp, pci_power_t state) | |||
2374 | wol_msg = BNX2_DRV_MSG_CODE_SUSPEND_NO_WOL; | 2421 | wol_msg = BNX2_DRV_MSG_CODE_SUSPEND_NO_WOL; |
2375 | } | 2422 | } |
2376 | 2423 | ||
2377 | bnx2_fw_sync(bp, BNX2_DRV_MSG_DATA_WAIT3 | wol_msg); | 2424 | if (!(bp->flags & NO_WOL_FLAG)) |
2425 | bnx2_fw_sync(bp, BNX2_DRV_MSG_DATA_WAIT3 | wol_msg, 0); | ||
2378 | 2426 | ||
2379 | pmcsr &= ~PCI_PM_CTRL_STATE_MASK; | 2427 | pmcsr &= ~PCI_PM_CTRL_STATE_MASK; |
2380 | if ((CHIP_ID(bp) == CHIP_ID_5706_A0) || | 2428 | if ((CHIP_ID(bp) == CHIP_ID_5706_A0) || |
@@ -2708,9 +2756,16 @@ bnx2_init_nvram(struct bnx2 *bp) | |||
2708 | if (j == entry_count) { | 2756 | if (j == entry_count) { |
2709 | bp->flash_info = NULL; | 2757 | bp->flash_info = NULL; |
2710 | printk(KERN_ALERT PFX "Unknown flash/EEPROM type.\n"); | 2758 | printk(KERN_ALERT PFX "Unknown flash/EEPROM type.\n"); |
2711 | rc = -ENODEV; | 2759 | return -ENODEV; |
2712 | } | 2760 | } |
2713 | 2761 | ||
2762 | val = REG_RD_IND(bp, bp->shmem_base + BNX2_SHARED_HW_CFG_CONFIG2); | ||
2763 | val &= BNX2_SHARED_HW_CFG2_NVM_SIZE_MASK; | ||
2764 | if (val) | ||
2765 | bp->flash_size = val; | ||
2766 | else | ||
2767 | bp->flash_size = bp->flash_info->total_size; | ||
2768 | |||
2714 | return rc; | 2769 | return rc; |
2715 | } | 2770 | } |
2716 | 2771 | ||
@@ -3014,16 +3069,14 @@ bnx2_reset_chip(struct bnx2 *bp, u32 reset_code) | |||
3014 | val = REG_RD(bp, BNX2_MISC_ENABLE_CLR_BITS); | 3069 | val = REG_RD(bp, BNX2_MISC_ENABLE_CLR_BITS); |
3015 | udelay(5); | 3070 | udelay(5); |
3016 | 3071 | ||
3072 | /* Wait for the firmware to tell us it is ok to issue a reset. */ | ||
3073 | bnx2_fw_sync(bp, BNX2_DRV_MSG_DATA_WAIT0 | reset_code, 1); | ||
3074 | |||
3017 | /* Deposit a driver reset signature so the firmware knows that | 3075 | /* Deposit a driver reset signature so the firmware knows that |
3018 | * this is a soft reset. */ | 3076 | * this is a soft reset. */ |
3019 | REG_WR_IND(bp, bp->shmem_base + BNX2_DRV_RESET_SIGNATURE, | 3077 | REG_WR_IND(bp, bp->shmem_base + BNX2_DRV_RESET_SIGNATURE, |
3020 | BNX2_DRV_RESET_SIGNATURE_MAGIC); | 3078 | BNX2_DRV_RESET_SIGNATURE_MAGIC); |
3021 | 3079 | ||
3022 | bp->fw_timed_out = 0; | ||
3023 | |||
3024 | /* Wait for the firmware to tell us it is ok to issue a reset. */ | ||
3025 | bnx2_fw_sync(bp, BNX2_DRV_MSG_DATA_WAIT0 | reset_code); | ||
3026 | |||
3027 | /* Do a dummy read to force the chip to complete all current transaction | 3080 | /* Do a dummy read to force the chip to complete all current transaction |
3028 | * before we issue a reset. */ | 3081 | * before we issue a reset. */ |
3029 | val = REG_RD(bp, BNX2_MISC_ID); | 3082 | val = REG_RD(bp, BNX2_MISC_ID); |
@@ -3062,10 +3115,10 @@ bnx2_reset_chip(struct bnx2 *bp, u32 reset_code) | |||
3062 | return -ENODEV; | 3115 | return -ENODEV; |
3063 | } | 3116 | } |
3064 | 3117 | ||
3065 | bp->fw_timed_out = 0; | ||
3066 | |||
3067 | /* Wait for the firmware to finish its initialization. */ | 3118 | /* Wait for the firmware to finish its initialization. */ |
3068 | bnx2_fw_sync(bp, BNX2_DRV_MSG_DATA_WAIT1 | reset_code); | 3119 | rc = bnx2_fw_sync(bp, BNX2_DRV_MSG_DATA_WAIT1 | reset_code, 0); |
3120 | if (rc) | ||
3121 | return rc; | ||
3069 | 3122 | ||
3070 | if (CHIP_ID(bp) == CHIP_ID_5706_A0) { | 3123 | if (CHIP_ID(bp) == CHIP_ID_5706_A0) { |
3071 | /* Adjust the voltage regular to two steps lower. The default | 3124 | /* Adjust the voltage regular to two steps lower. The default |
@@ -3083,6 +3136,7 @@ static int | |||
3083 | bnx2_init_chip(struct bnx2 *bp) | 3136 | bnx2_init_chip(struct bnx2 *bp) |
3084 | { | 3137 | { |
3085 | u32 val; | 3138 | u32 val; |
3139 | int rc; | ||
3086 | 3140 | ||
3087 | /* Make sure the interrupt is not active. */ | 3141 | /* Make sure the interrupt is not active. */ |
3088 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, BNX2_PCICFG_INT_ACK_CMD_MASK_INT); | 3142 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, BNX2_PCICFG_INT_ACK_CMD_MASK_INT); |
@@ -3098,7 +3152,7 @@ bnx2_init_chip(struct bnx2 *bp) | |||
3098 | 3152 | ||
3099 | val |= (0x2 << 20) | (1 << 11); | 3153 | val |= (0x2 << 20) | (1 << 11); |
3100 | 3154 | ||
3101 | if ((bp->flags & PCIX_FLAG) && (bp->bus_speed_mhz = 133)) | 3155 | if ((bp->flags & PCIX_FLAG) && (bp->bus_speed_mhz == 133)) |
3102 | val |= (1 << 23); | 3156 | val |= (1 << 23); |
3103 | 3157 | ||
3104 | if ((CHIP_NUM(bp) == CHIP_NUM_5706) && | 3158 | if ((CHIP_NUM(bp) == CHIP_NUM_5706) && |
@@ -3218,17 +3272,22 @@ bnx2_init_chip(struct bnx2 *bp) | |||
3218 | 3272 | ||
3219 | REG_WR(bp, BNX2_HC_ATTN_BITS_ENABLE, STATUS_ATTN_BITS_LINK_STATE); | 3273 | REG_WR(bp, BNX2_HC_ATTN_BITS_ENABLE, STATUS_ATTN_BITS_LINK_STATE); |
3220 | 3274 | ||
3275 | if (REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_FEATURE) & | ||
3276 | BNX2_PORT_FEATURE_ASF_ENABLED) | ||
3277 | bp->flags |= ASF_ENABLE_FLAG; | ||
3278 | |||
3221 | /* Initialize the receive filter. */ | 3279 | /* Initialize the receive filter. */ |
3222 | bnx2_set_rx_mode(bp->dev); | 3280 | bnx2_set_rx_mode(bp->dev); |
3223 | 3281 | ||
3224 | bnx2_fw_sync(bp, BNX2_DRV_MSG_DATA_WAIT2 | BNX2_DRV_MSG_CODE_RESET); | 3282 | rc = bnx2_fw_sync(bp, BNX2_DRV_MSG_DATA_WAIT2 | BNX2_DRV_MSG_CODE_RESET, |
3283 | 0); | ||
3225 | 3284 | ||
3226 | REG_WR(bp, BNX2_MISC_ENABLE_SET_BITS, 0x5ffffff); | 3285 | REG_WR(bp, BNX2_MISC_ENABLE_SET_BITS, 0x5ffffff); |
3227 | REG_RD(bp, BNX2_MISC_ENABLE_SET_BITS); | 3286 | REG_RD(bp, BNX2_MISC_ENABLE_SET_BITS); |
3228 | 3287 | ||
3229 | udelay(20); | 3288 | udelay(20); |
3230 | 3289 | ||
3231 | return 0; | 3290 | return rc; |
3232 | } | 3291 | } |
3233 | 3292 | ||
3234 | 3293 | ||
@@ -3880,26 +3939,33 @@ bnx2_test_memory(struct bnx2 *bp) | |||
3880 | return ret; | 3939 | return ret; |
3881 | } | 3940 | } |
3882 | 3941 | ||
3942 | #define BNX2_MAC_LOOPBACK 0 | ||
3943 | #define BNX2_PHY_LOOPBACK 1 | ||
3944 | |||
3883 | static int | 3945 | static int |
3884 | bnx2_test_loopback(struct bnx2 *bp) | 3946 | bnx2_run_loopback(struct bnx2 *bp, int loopback_mode) |
3885 | { | 3947 | { |
3886 | unsigned int pkt_size, num_pkts, i; | 3948 | unsigned int pkt_size, num_pkts, i; |
3887 | struct sk_buff *skb, *rx_skb; | 3949 | struct sk_buff *skb, *rx_skb; |
3888 | unsigned char *packet; | 3950 | unsigned char *packet; |
3889 | u16 rx_start_idx, rx_idx, send_idx; | 3951 | u16 rx_start_idx, rx_idx; |
3890 | u32 send_bseq, val; | 3952 | u32 val; |
3891 | dma_addr_t map; | 3953 | dma_addr_t map; |
3892 | struct tx_bd *txbd; | 3954 | struct tx_bd *txbd; |
3893 | struct sw_bd *rx_buf; | 3955 | struct sw_bd *rx_buf; |
3894 | struct l2_fhdr *rx_hdr; | 3956 | struct l2_fhdr *rx_hdr; |
3895 | int ret = -ENODEV; | 3957 | int ret = -ENODEV; |
3896 | 3958 | ||
3897 | if (!netif_running(bp->dev)) | 3959 | if (loopback_mode == BNX2_MAC_LOOPBACK) { |
3898 | return -ENODEV; | 3960 | bp->loopback = MAC_LOOPBACK; |
3899 | 3961 | bnx2_set_mac_loopback(bp); | |
3900 | bp->loopback = MAC_LOOPBACK; | 3962 | } |
3901 | bnx2_reset_nic(bp, BNX2_DRV_MSG_CODE_DIAG); | 3963 | else if (loopback_mode == BNX2_PHY_LOOPBACK) { |
3902 | bnx2_set_mac_loopback(bp); | 3964 | bp->loopback = 0; |
3965 | bnx2_set_phy_loopback(bp); | ||
3966 | } | ||
3967 | else | ||
3968 | return -EINVAL; | ||
3903 | 3969 | ||
3904 | pkt_size = 1514; | 3970 | pkt_size = 1514; |
3905 | skb = dev_alloc_skb(pkt_size); | 3971 | skb = dev_alloc_skb(pkt_size); |
@@ -3921,11 +3987,9 @@ bnx2_test_loopback(struct bnx2 *bp) | |||
3921 | udelay(5); | 3987 | udelay(5); |
3922 | rx_start_idx = bp->status_blk->status_rx_quick_consumer_index0; | 3988 | rx_start_idx = bp->status_blk->status_rx_quick_consumer_index0; |
3923 | 3989 | ||
3924 | send_idx = 0; | ||
3925 | send_bseq = 0; | ||
3926 | num_pkts = 0; | 3990 | num_pkts = 0; |
3927 | 3991 | ||
3928 | txbd = &bp->tx_desc_ring[send_idx]; | 3992 | txbd = &bp->tx_desc_ring[TX_RING_IDX(bp->tx_prod)]; |
3929 | 3993 | ||
3930 | txbd->tx_bd_haddr_hi = (u64) map >> 32; | 3994 | txbd->tx_bd_haddr_hi = (u64) map >> 32; |
3931 | txbd->tx_bd_haddr_lo = (u64) map & 0xffffffff; | 3995 | txbd->tx_bd_haddr_lo = (u64) map & 0xffffffff; |
@@ -3933,13 +3997,11 @@ bnx2_test_loopback(struct bnx2 *bp) | |||
3933 | txbd->tx_bd_vlan_tag_flags = TX_BD_FLAGS_START | TX_BD_FLAGS_END; | 3997 | txbd->tx_bd_vlan_tag_flags = TX_BD_FLAGS_START | TX_BD_FLAGS_END; |
3934 | 3998 | ||
3935 | num_pkts++; | 3999 | num_pkts++; |
3936 | send_idx = NEXT_TX_BD(send_idx); | 4000 | bp->tx_prod = NEXT_TX_BD(bp->tx_prod); |
3937 | 4001 | bp->tx_prod_bseq += pkt_size; | |
3938 | send_bseq += pkt_size; | ||
3939 | |||
3940 | REG_WR16(bp, MB_TX_CID_ADDR + BNX2_L2CTX_TX_HOST_BIDX, send_idx); | ||
3941 | REG_WR(bp, MB_TX_CID_ADDR + BNX2_L2CTX_TX_HOST_BSEQ, send_bseq); | ||
3942 | 4002 | ||
4003 | REG_WR16(bp, MB_TX_CID_ADDR + BNX2_L2CTX_TX_HOST_BIDX, bp->tx_prod); | ||
4004 | REG_WR(bp, MB_TX_CID_ADDR + BNX2_L2CTX_TX_HOST_BSEQ, bp->tx_prod_bseq); | ||
3943 | 4005 | ||
3944 | udelay(100); | 4006 | udelay(100); |
3945 | 4007 | ||
@@ -3952,7 +4014,7 @@ bnx2_test_loopback(struct bnx2 *bp) | |||
3952 | pci_unmap_single(bp->pdev, map, pkt_size, PCI_DMA_TODEVICE); | 4014 | pci_unmap_single(bp->pdev, map, pkt_size, PCI_DMA_TODEVICE); |
3953 | dev_kfree_skb_irq(skb); | 4015 | dev_kfree_skb_irq(skb); |
3954 | 4016 | ||
3955 | if (bp->status_blk->status_tx_quick_consumer_index0 != send_idx) { | 4017 | if (bp->status_blk->status_tx_quick_consumer_index0 != bp->tx_prod) { |
3956 | goto loopback_test_done; | 4018 | goto loopback_test_done; |
3957 | } | 4019 | } |
3958 | 4020 | ||
@@ -3971,7 +4033,7 @@ bnx2_test_loopback(struct bnx2 *bp) | |||
3971 | pci_unmap_addr(rx_buf, mapping), | 4033 | pci_unmap_addr(rx_buf, mapping), |
3972 | bp->rx_buf_size, PCI_DMA_FROMDEVICE); | 4034 | bp->rx_buf_size, PCI_DMA_FROMDEVICE); |
3973 | 4035 | ||
3974 | if (rx_hdr->l2_fhdr_errors & | 4036 | if (rx_hdr->l2_fhdr_status & |
3975 | (L2_FHDR_ERRORS_BAD_CRC | | 4037 | (L2_FHDR_ERRORS_BAD_CRC | |
3976 | L2_FHDR_ERRORS_PHY_DECODE | | 4038 | L2_FHDR_ERRORS_PHY_DECODE | |
3977 | L2_FHDR_ERRORS_ALIGNMENT | | 4039 | L2_FHDR_ERRORS_ALIGNMENT | |
@@ -3998,6 +4060,30 @@ loopback_test_done: | |||
3998 | return ret; | 4060 | return ret; |
3999 | } | 4061 | } |
4000 | 4062 | ||
4063 | #define BNX2_MAC_LOOPBACK_FAILED 1 | ||
4064 | #define BNX2_PHY_LOOPBACK_FAILED 2 | ||
4065 | #define BNX2_LOOPBACK_FAILED (BNX2_MAC_LOOPBACK_FAILED | \ | ||
4066 | BNX2_PHY_LOOPBACK_FAILED) | ||
4067 | |||
4068 | static int | ||
4069 | bnx2_test_loopback(struct bnx2 *bp) | ||
4070 | { | ||
4071 | int rc = 0; | ||
4072 | |||
4073 | if (!netif_running(bp->dev)) | ||
4074 | return BNX2_LOOPBACK_FAILED; | ||
4075 | |||
4076 | bnx2_reset_nic(bp, BNX2_DRV_MSG_CODE_RESET); | ||
4077 | spin_lock_bh(&bp->phy_lock); | ||
4078 | bnx2_init_phy(bp); | ||
4079 | spin_unlock_bh(&bp->phy_lock); | ||
4080 | if (bnx2_run_loopback(bp, BNX2_MAC_LOOPBACK)) | ||
4081 | rc |= BNX2_MAC_LOOPBACK_FAILED; | ||
4082 | if (bnx2_run_loopback(bp, BNX2_PHY_LOOPBACK)) | ||
4083 | rc |= BNX2_PHY_LOOPBACK_FAILED; | ||
4084 | return rc; | ||
4085 | } | ||
4086 | |||
4001 | #define NVRAM_SIZE 0x200 | 4087 | #define NVRAM_SIZE 0x200 |
4002 | #define CRC32_RESIDUAL 0xdebb20e3 | 4088 | #define CRC32_RESIDUAL 0xdebb20e3 |
4003 | 4089 | ||
@@ -4167,7 +4253,7 @@ bnx2_restart_timer: | |||
4167 | static int | 4253 | static int |
4168 | bnx2_open(struct net_device *dev) | 4254 | bnx2_open(struct net_device *dev) |
4169 | { | 4255 | { |
4170 | struct bnx2 *bp = dev->priv; | 4256 | struct bnx2 *bp = netdev_priv(dev); |
4171 | int rc; | 4257 | int rc; |
4172 | 4258 | ||
4173 | bnx2_set_power_state(bp, PCI_D0); | 4259 | bnx2_set_power_state(bp, PCI_D0); |
@@ -4280,7 +4366,7 @@ bnx2_reset_task(void *data) | |||
4280 | static void | 4366 | static void |
4281 | bnx2_tx_timeout(struct net_device *dev) | 4367 | bnx2_tx_timeout(struct net_device *dev) |
4282 | { | 4368 | { |
4283 | struct bnx2 *bp = dev->priv; | 4369 | struct bnx2 *bp = netdev_priv(dev); |
4284 | 4370 | ||
4285 | /* This allows the netif to be shutdown gracefully before resetting */ | 4371 | /* This allows the netif to be shutdown gracefully before resetting */ |
4286 | schedule_work(&bp->reset_task); | 4372 | schedule_work(&bp->reset_task); |
@@ -4291,7 +4377,7 @@ bnx2_tx_timeout(struct net_device *dev) | |||
4291 | static void | 4377 | static void |
4292 | bnx2_vlan_rx_register(struct net_device *dev, struct vlan_group *vlgrp) | 4378 | bnx2_vlan_rx_register(struct net_device *dev, struct vlan_group *vlgrp) |
4293 | { | 4379 | { |
4294 | struct bnx2 *bp = dev->priv; | 4380 | struct bnx2 *bp = netdev_priv(dev); |
4295 | 4381 | ||
4296 | bnx2_netif_stop(bp); | 4382 | bnx2_netif_stop(bp); |
4297 | 4383 | ||
@@ -4305,7 +4391,7 @@ bnx2_vlan_rx_register(struct net_device *dev, struct vlan_group *vlgrp) | |||
4305 | static void | 4391 | static void |
4306 | bnx2_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid) | 4392 | bnx2_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid) |
4307 | { | 4393 | { |
4308 | struct bnx2 *bp = dev->priv; | 4394 | struct bnx2 *bp = netdev_priv(dev); |
4309 | 4395 | ||
4310 | bnx2_netif_stop(bp); | 4396 | bnx2_netif_stop(bp); |
4311 | 4397 | ||
@@ -4326,7 +4412,7 @@ bnx2_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid) | |||
4326 | static int | 4412 | static int |
4327 | bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) | 4413 | bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) |
4328 | { | 4414 | { |
4329 | struct bnx2 *bp = dev->priv; | 4415 | struct bnx2 *bp = netdev_priv(dev); |
4330 | dma_addr_t mapping; | 4416 | dma_addr_t mapping; |
4331 | struct tx_bd *txbd; | 4417 | struct tx_bd *txbd; |
4332 | struct sw_bd *tx_buf; | 4418 | struct sw_bd *tx_buf; |
@@ -4455,7 +4541,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
4455 | static int | 4541 | static int |
4456 | bnx2_close(struct net_device *dev) | 4542 | bnx2_close(struct net_device *dev) |
4457 | { | 4543 | { |
4458 | struct bnx2 *bp = dev->priv; | 4544 | struct bnx2 *bp = netdev_priv(dev); |
4459 | u32 reset_code; | 4545 | u32 reset_code; |
4460 | 4546 | ||
4461 | /* Calling flush_scheduled_work() may deadlock because | 4547 | /* Calling flush_scheduled_work() may deadlock because |
@@ -4467,7 +4553,9 @@ bnx2_close(struct net_device *dev) | |||
4467 | 4553 | ||
4468 | bnx2_netif_stop(bp); | 4554 | bnx2_netif_stop(bp); |
4469 | del_timer_sync(&bp->timer); | 4555 | del_timer_sync(&bp->timer); |
4470 | if (bp->wol) | 4556 | if (bp->flags & NO_WOL_FLAG) |
4557 | reset_code = BNX2_DRV_MSG_CODE_UNLOAD; | ||
4558 | else if (bp->wol) | ||
4471 | reset_code = BNX2_DRV_MSG_CODE_SUSPEND_WOL; | 4559 | reset_code = BNX2_DRV_MSG_CODE_SUSPEND_WOL; |
4472 | else | 4560 | else |
4473 | reset_code = BNX2_DRV_MSG_CODE_SUSPEND_NO_WOL; | 4561 | reset_code = BNX2_DRV_MSG_CODE_SUSPEND_NO_WOL; |
@@ -4501,7 +4589,7 @@ bnx2_close(struct net_device *dev) | |||
4501 | static struct net_device_stats * | 4589 | static struct net_device_stats * |
4502 | bnx2_get_stats(struct net_device *dev) | 4590 | bnx2_get_stats(struct net_device *dev) |
4503 | { | 4591 | { |
4504 | struct bnx2 *bp = dev->priv; | 4592 | struct bnx2 *bp = netdev_priv(dev); |
4505 | struct statistics_block *stats_blk = bp->stats_blk; | 4593 | struct statistics_block *stats_blk = bp->stats_blk; |
4506 | struct net_device_stats *net_stats = &bp->net_stats; | 4594 | struct net_device_stats *net_stats = &bp->net_stats; |
4507 | 4595 | ||
@@ -4575,7 +4663,7 @@ bnx2_get_stats(struct net_device *dev) | |||
4575 | static int | 4663 | static int |
4576 | bnx2_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 4664 | bnx2_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) |
4577 | { | 4665 | { |
4578 | struct bnx2 *bp = dev->priv; | 4666 | struct bnx2 *bp = netdev_priv(dev); |
4579 | 4667 | ||
4580 | cmd->supported = SUPPORTED_Autoneg; | 4668 | cmd->supported = SUPPORTED_Autoneg; |
4581 | if (bp->phy_flags & PHY_SERDES_FLAG) { | 4669 | if (bp->phy_flags & PHY_SERDES_FLAG) { |
@@ -4622,7 +4710,7 @@ bnx2_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
4622 | static int | 4710 | static int |
4623 | bnx2_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 4711 | bnx2_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) |
4624 | { | 4712 | { |
4625 | struct bnx2 *bp = dev->priv; | 4713 | struct bnx2 *bp = netdev_priv(dev); |
4626 | u8 autoneg = bp->autoneg; | 4714 | u8 autoneg = bp->autoneg; |
4627 | u8 req_duplex = bp->req_duplex; | 4715 | u8 req_duplex = bp->req_duplex; |
4628 | u16 req_line_speed = bp->req_line_speed; | 4716 | u16 req_line_speed = bp->req_line_speed; |
@@ -4694,7 +4782,7 @@ bnx2_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
4694 | static void | 4782 | static void |
4695 | bnx2_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) | 4783 | bnx2_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) |
4696 | { | 4784 | { |
4697 | struct bnx2 *bp = dev->priv; | 4785 | struct bnx2 *bp = netdev_priv(dev); |
4698 | 4786 | ||
4699 | strcpy(info->driver, DRV_MODULE_NAME); | 4787 | strcpy(info->driver, DRV_MODULE_NAME); |
4700 | strcpy(info->version, DRV_MODULE_VERSION); | 4788 | strcpy(info->version, DRV_MODULE_VERSION); |
@@ -4702,15 +4790,14 @@ bnx2_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) | |||
4702 | info->fw_version[0] = ((bp->fw_ver & 0xff000000) >> 24) + '0'; | 4790 | info->fw_version[0] = ((bp->fw_ver & 0xff000000) >> 24) + '0'; |
4703 | info->fw_version[2] = ((bp->fw_ver & 0xff0000) >> 16) + '0'; | 4791 | info->fw_version[2] = ((bp->fw_ver & 0xff0000) >> 16) + '0'; |
4704 | info->fw_version[4] = ((bp->fw_ver & 0xff00) >> 8) + '0'; | 4792 | info->fw_version[4] = ((bp->fw_ver & 0xff00) >> 8) + '0'; |
4705 | info->fw_version[6] = (bp->fw_ver & 0xff) + '0'; | 4793 | info->fw_version[1] = info->fw_version[3] = '.'; |
4706 | info->fw_version[1] = info->fw_version[3] = info->fw_version[5] = '.'; | 4794 | info->fw_version[5] = 0; |
4707 | info->fw_version[7] = 0; | ||
4708 | } | 4795 | } |
4709 | 4796 | ||
4710 | static void | 4797 | static void |
4711 | bnx2_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | 4798 | bnx2_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) |
4712 | { | 4799 | { |
4713 | struct bnx2 *bp = dev->priv; | 4800 | struct bnx2 *bp = netdev_priv(dev); |
4714 | 4801 | ||
4715 | if (bp->flags & NO_WOL_FLAG) { | 4802 | if (bp->flags & NO_WOL_FLAG) { |
4716 | wol->supported = 0; | 4803 | wol->supported = 0; |
@@ -4729,7 +4816,7 @@ bnx2_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
4729 | static int | 4816 | static int |
4730 | bnx2_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | 4817 | bnx2_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) |
4731 | { | 4818 | { |
4732 | struct bnx2 *bp = dev->priv; | 4819 | struct bnx2 *bp = netdev_priv(dev); |
4733 | 4820 | ||
4734 | if (wol->wolopts & ~WAKE_MAGIC) | 4821 | if (wol->wolopts & ~WAKE_MAGIC) |
4735 | return -EINVAL; | 4822 | return -EINVAL; |
@@ -4749,7 +4836,7 @@ bnx2_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
4749 | static int | 4836 | static int |
4750 | bnx2_nway_reset(struct net_device *dev) | 4837 | bnx2_nway_reset(struct net_device *dev) |
4751 | { | 4838 | { |
4752 | struct bnx2 *bp = dev->priv; | 4839 | struct bnx2 *bp = netdev_priv(dev); |
4753 | u32 bmcr; | 4840 | u32 bmcr; |
4754 | 4841 | ||
4755 | if (!(bp->autoneg & AUTONEG_SPEED)) { | 4842 | if (!(bp->autoneg & AUTONEG_SPEED)) { |
@@ -4785,19 +4872,19 @@ bnx2_nway_reset(struct net_device *dev) | |||
4785 | static int | 4872 | static int |
4786 | bnx2_get_eeprom_len(struct net_device *dev) | 4873 | bnx2_get_eeprom_len(struct net_device *dev) |
4787 | { | 4874 | { |
4788 | struct bnx2 *bp = dev->priv; | 4875 | struct bnx2 *bp = netdev_priv(dev); |
4789 | 4876 | ||
4790 | if (bp->flash_info == 0) | 4877 | if (bp->flash_info == NULL) |
4791 | return 0; | 4878 | return 0; |
4792 | 4879 | ||
4793 | return (int) bp->flash_info->total_size; | 4880 | return (int) bp->flash_size; |
4794 | } | 4881 | } |
4795 | 4882 | ||
4796 | static int | 4883 | static int |
4797 | bnx2_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, | 4884 | bnx2_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, |
4798 | u8 *eebuf) | 4885 | u8 *eebuf) |
4799 | { | 4886 | { |
4800 | struct bnx2 *bp = dev->priv; | 4887 | struct bnx2 *bp = netdev_priv(dev); |
4801 | int rc; | 4888 | int rc; |
4802 | 4889 | ||
4803 | /* parameters already validated in ethtool_get_eeprom */ | 4890 | /* parameters already validated in ethtool_get_eeprom */ |
@@ -4811,7 +4898,7 @@ static int | |||
4811 | bnx2_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, | 4898 | bnx2_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, |
4812 | u8 *eebuf) | 4899 | u8 *eebuf) |
4813 | { | 4900 | { |
4814 | struct bnx2 *bp = dev->priv; | 4901 | struct bnx2 *bp = netdev_priv(dev); |
4815 | int rc; | 4902 | int rc; |
4816 | 4903 | ||
4817 | /* parameters already validated in ethtool_set_eeprom */ | 4904 | /* parameters already validated in ethtool_set_eeprom */ |
@@ -4824,7 +4911,7 @@ bnx2_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, | |||
4824 | static int | 4911 | static int |
4825 | bnx2_get_coalesce(struct net_device *dev, struct ethtool_coalesce *coal) | 4912 | bnx2_get_coalesce(struct net_device *dev, struct ethtool_coalesce *coal) |
4826 | { | 4913 | { |
4827 | struct bnx2 *bp = dev->priv; | 4914 | struct bnx2 *bp = netdev_priv(dev); |
4828 | 4915 | ||
4829 | memset(coal, 0, sizeof(struct ethtool_coalesce)); | 4916 | memset(coal, 0, sizeof(struct ethtool_coalesce)); |
4830 | 4917 | ||
@@ -4846,7 +4933,7 @@ bnx2_get_coalesce(struct net_device *dev, struct ethtool_coalesce *coal) | |||
4846 | static int | 4933 | static int |
4847 | bnx2_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal) | 4934 | bnx2_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal) |
4848 | { | 4935 | { |
4849 | struct bnx2 *bp = dev->priv; | 4936 | struct bnx2 *bp = netdev_priv(dev); |
4850 | 4937 | ||
4851 | bp->rx_ticks = (u16) coal->rx_coalesce_usecs; | 4938 | bp->rx_ticks = (u16) coal->rx_coalesce_usecs; |
4852 | if (bp->rx_ticks > 0x3ff) bp->rx_ticks = 0x3ff; | 4939 | if (bp->rx_ticks > 0x3ff) bp->rx_ticks = 0x3ff; |
@@ -4890,7 +4977,7 @@ bnx2_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal) | |||
4890 | static void | 4977 | static void |
4891 | bnx2_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) | 4978 | bnx2_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) |
4892 | { | 4979 | { |
4893 | struct bnx2 *bp = dev->priv; | 4980 | struct bnx2 *bp = netdev_priv(dev); |
4894 | 4981 | ||
4895 | ering->rx_max_pending = MAX_RX_DESC_CNT; | 4982 | ering->rx_max_pending = MAX_RX_DESC_CNT; |
4896 | ering->rx_mini_max_pending = 0; | 4983 | ering->rx_mini_max_pending = 0; |
@@ -4907,7 +4994,7 @@ bnx2_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) | |||
4907 | static int | 4994 | static int |
4908 | bnx2_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) | 4995 | bnx2_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) |
4909 | { | 4996 | { |
4910 | struct bnx2 *bp = dev->priv; | 4997 | struct bnx2 *bp = netdev_priv(dev); |
4911 | 4998 | ||
4912 | if ((ering->rx_pending > MAX_RX_DESC_CNT) || | 4999 | if ((ering->rx_pending > MAX_RX_DESC_CNT) || |
4913 | (ering->tx_pending > MAX_TX_DESC_CNT) || | 5000 | (ering->tx_pending > MAX_TX_DESC_CNT) || |
@@ -4930,7 +5017,7 @@ bnx2_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) | |||
4930 | static void | 5017 | static void |
4931 | bnx2_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) | 5018 | bnx2_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) |
4932 | { | 5019 | { |
4933 | struct bnx2 *bp = dev->priv; | 5020 | struct bnx2 *bp = netdev_priv(dev); |
4934 | 5021 | ||
4935 | epause->autoneg = ((bp->autoneg & AUTONEG_FLOW_CTRL) != 0); | 5022 | epause->autoneg = ((bp->autoneg & AUTONEG_FLOW_CTRL) != 0); |
4936 | epause->rx_pause = ((bp->flow_ctrl & FLOW_CTRL_RX) != 0); | 5023 | epause->rx_pause = ((bp->flow_ctrl & FLOW_CTRL_RX) != 0); |
@@ -4940,7 +5027,7 @@ bnx2_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) | |||
4940 | static int | 5027 | static int |
4941 | bnx2_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) | 5028 | bnx2_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) |
4942 | { | 5029 | { |
4943 | struct bnx2 *bp = dev->priv; | 5030 | struct bnx2 *bp = netdev_priv(dev); |
4944 | 5031 | ||
4945 | bp->req_flow_ctrl = 0; | 5032 | bp->req_flow_ctrl = 0; |
4946 | if (epause->rx_pause) | 5033 | if (epause->rx_pause) |
@@ -4967,7 +5054,7 @@ bnx2_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) | |||
4967 | static u32 | 5054 | static u32 |
4968 | bnx2_get_rx_csum(struct net_device *dev) | 5055 | bnx2_get_rx_csum(struct net_device *dev) |
4969 | { | 5056 | { |
4970 | struct bnx2 *bp = dev->priv; | 5057 | struct bnx2 *bp = netdev_priv(dev); |
4971 | 5058 | ||
4972 | return bp->rx_csum; | 5059 | return bp->rx_csum; |
4973 | } | 5060 | } |
@@ -4975,7 +5062,7 @@ bnx2_get_rx_csum(struct net_device *dev) | |||
4975 | static int | 5062 | static int |
4976 | bnx2_set_rx_csum(struct net_device *dev, u32 data) | 5063 | bnx2_set_rx_csum(struct net_device *dev, u32 data) |
4977 | { | 5064 | { |
4978 | struct bnx2 *bp = dev->priv; | 5065 | struct bnx2 *bp = netdev_priv(dev); |
4979 | 5066 | ||
4980 | bp->rx_csum = data; | 5067 | bp->rx_csum = data; |
4981 | return 0; | 5068 | return 0; |
@@ -5124,7 +5211,7 @@ bnx2_self_test_count(struct net_device *dev) | |||
5124 | static void | 5211 | static void |
5125 | bnx2_self_test(struct net_device *dev, struct ethtool_test *etest, u64 *buf) | 5212 | bnx2_self_test(struct net_device *dev, struct ethtool_test *etest, u64 *buf) |
5126 | { | 5213 | { |
5127 | struct bnx2 *bp = dev->priv; | 5214 | struct bnx2 *bp = netdev_priv(dev); |
5128 | 5215 | ||
5129 | memset(buf, 0, sizeof(u64) * BNX2_NUM_TESTS); | 5216 | memset(buf, 0, sizeof(u64) * BNX2_NUM_TESTS); |
5130 | if (etest->flags & ETH_TEST_FL_OFFLINE) { | 5217 | if (etest->flags & ETH_TEST_FL_OFFLINE) { |
@@ -5140,10 +5227,8 @@ bnx2_self_test(struct net_device *dev, struct ethtool_test *etest, u64 *buf) | |||
5140 | buf[1] = 1; | 5227 | buf[1] = 1; |
5141 | etest->flags |= ETH_TEST_FL_FAILED; | 5228 | etest->flags |= ETH_TEST_FL_FAILED; |
5142 | } | 5229 | } |
5143 | if (bnx2_test_loopback(bp) != 0) { | 5230 | if ((buf[2] = bnx2_test_loopback(bp)) != 0) |
5144 | buf[2] = 1; | ||
5145 | etest->flags |= ETH_TEST_FL_FAILED; | 5231 | etest->flags |= ETH_TEST_FL_FAILED; |
5146 | } | ||
5147 | 5232 | ||
5148 | if (!netif_running(bp->dev)) { | 5233 | if (!netif_running(bp->dev)) { |
5149 | bnx2_reset_chip(bp, BNX2_DRV_MSG_CODE_RESET); | 5234 | bnx2_reset_chip(bp, BNX2_DRV_MSG_CODE_RESET); |
@@ -5200,7 +5285,7 @@ static void | |||
5200 | bnx2_get_ethtool_stats(struct net_device *dev, | 5285 | bnx2_get_ethtool_stats(struct net_device *dev, |
5201 | struct ethtool_stats *stats, u64 *buf) | 5286 | struct ethtool_stats *stats, u64 *buf) |
5202 | { | 5287 | { |
5203 | struct bnx2 *bp = dev->priv; | 5288 | struct bnx2 *bp = netdev_priv(dev); |
5204 | int i; | 5289 | int i; |
5205 | u32 *hw_stats = (u32 *) bp->stats_blk; | 5290 | u32 *hw_stats = (u32 *) bp->stats_blk; |
5206 | u8 *stats_len_arr = NULL; | 5291 | u8 *stats_len_arr = NULL; |
@@ -5240,7 +5325,7 @@ bnx2_get_ethtool_stats(struct net_device *dev, | |||
5240 | static int | 5325 | static int |
5241 | bnx2_phys_id(struct net_device *dev, u32 data) | 5326 | bnx2_phys_id(struct net_device *dev, u32 data) |
5242 | { | 5327 | { |
5243 | struct bnx2 *bp = dev->priv; | 5328 | struct bnx2 *bp = netdev_priv(dev); |
5244 | int i; | 5329 | int i; |
5245 | u32 save; | 5330 | u32 save; |
5246 | 5331 | ||
@@ -5312,7 +5397,7 @@ static int | |||
5312 | bnx2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | 5397 | bnx2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
5313 | { | 5398 | { |
5314 | struct mii_ioctl_data *data = if_mii(ifr); | 5399 | struct mii_ioctl_data *data = if_mii(ifr); |
5315 | struct bnx2 *bp = dev->priv; | 5400 | struct bnx2 *bp = netdev_priv(dev); |
5316 | int err; | 5401 | int err; |
5317 | 5402 | ||
5318 | switch(cmd) { | 5403 | switch(cmd) { |
@@ -5354,7 +5439,7 @@ static int | |||
5354 | bnx2_change_mac_addr(struct net_device *dev, void *p) | 5439 | bnx2_change_mac_addr(struct net_device *dev, void *p) |
5355 | { | 5440 | { |
5356 | struct sockaddr *addr = p; | 5441 | struct sockaddr *addr = p; |
5357 | struct bnx2 *bp = dev->priv; | 5442 | struct bnx2 *bp = netdev_priv(dev); |
5358 | 5443 | ||
5359 | if (!is_valid_ether_addr(addr->sa_data)) | 5444 | if (!is_valid_ether_addr(addr->sa_data)) |
5360 | return -EINVAL; | 5445 | return -EINVAL; |
@@ -5370,7 +5455,7 @@ bnx2_change_mac_addr(struct net_device *dev, void *p) | |||
5370 | static int | 5455 | static int |
5371 | bnx2_change_mtu(struct net_device *dev, int new_mtu) | 5456 | bnx2_change_mtu(struct net_device *dev, int new_mtu) |
5372 | { | 5457 | { |
5373 | struct bnx2 *bp = dev->priv; | 5458 | struct bnx2 *bp = netdev_priv(dev); |
5374 | 5459 | ||
5375 | if (((new_mtu + ETH_HLEN) > MAX_ETHERNET_JUMBO_PACKET_SIZE) || | 5460 | if (((new_mtu + ETH_HLEN) > MAX_ETHERNET_JUMBO_PACKET_SIZE) || |
5376 | ((new_mtu + ETH_HLEN) < MIN_ETHERNET_PACKET_SIZE)) | 5461 | ((new_mtu + ETH_HLEN) < MIN_ETHERNET_PACKET_SIZE)) |
@@ -5391,7 +5476,7 @@ bnx2_change_mtu(struct net_device *dev, int new_mtu) | |||
5391 | static void | 5476 | static void |
5392 | poll_bnx2(struct net_device *dev) | 5477 | poll_bnx2(struct net_device *dev) |
5393 | { | 5478 | { |
5394 | struct bnx2 *bp = dev->priv; | 5479 | struct bnx2 *bp = netdev_priv(dev); |
5395 | 5480 | ||
5396 | disable_irq(bp->pdev->irq); | 5481 | disable_irq(bp->pdev->irq); |
5397 | bnx2_interrupt(bp->pdev->irq, dev, NULL); | 5482 | bnx2_interrupt(bp->pdev->irq, dev, NULL); |
@@ -5409,7 +5494,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) | |||
5409 | 5494 | ||
5410 | SET_MODULE_OWNER(dev); | 5495 | SET_MODULE_OWNER(dev); |
5411 | SET_NETDEV_DEV(dev, &pdev->dev); | 5496 | SET_NETDEV_DEV(dev, &pdev->dev); |
5412 | bp = dev->priv; | 5497 | bp = netdev_priv(dev); |
5413 | 5498 | ||
5414 | bp->flags = 0; | 5499 | bp->flags = 0; |
5415 | bp->phy_flags = 0; | 5500 | bp->phy_flags = 0; |
@@ -5629,6 +5714,9 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) | |||
5629 | } | 5714 | } |
5630 | } | 5715 | } |
5631 | 5716 | ||
5717 | if (CHIP_NUM(bp) == CHIP_NUM_5708) | ||
5718 | bp->flags |= NO_WOL_FLAG; | ||
5719 | |||
5632 | if (CHIP_ID(bp) == CHIP_ID_5706_A0) { | 5720 | if (CHIP_ID(bp) == CHIP_ID_5706_A0) { |
5633 | bp->tx_quick_cons_trip_int = | 5721 | bp->tx_quick_cons_trip_int = |
5634 | bp->tx_quick_cons_trip; | 5722 | bp->tx_quick_cons_trip; |
@@ -5725,7 +5813,7 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
5725 | dev->ethtool_ops = &bnx2_ethtool_ops; | 5813 | dev->ethtool_ops = &bnx2_ethtool_ops; |
5726 | dev->weight = 64; | 5814 | dev->weight = 64; |
5727 | 5815 | ||
5728 | bp = dev->priv; | 5816 | bp = netdev_priv(dev); |
5729 | 5817 | ||
5730 | #if defined(HAVE_POLL_CONTROLLER) || defined(CONFIG_NET_POLL_CONTROLLER) | 5818 | #if defined(HAVE_POLL_CONTROLLER) || defined(CONFIG_NET_POLL_CONTROLLER) |
5731 | dev->poll_controller = poll_bnx2; | 5819 | dev->poll_controller = poll_bnx2; |
@@ -5784,7 +5872,7 @@ static void __devexit | |||
5784 | bnx2_remove_one(struct pci_dev *pdev) | 5872 | bnx2_remove_one(struct pci_dev *pdev) |
5785 | { | 5873 | { |
5786 | struct net_device *dev = pci_get_drvdata(pdev); | 5874 | struct net_device *dev = pci_get_drvdata(pdev); |
5787 | struct bnx2 *bp = dev->priv; | 5875 | struct bnx2 *bp = netdev_priv(dev); |
5788 | 5876 | ||
5789 | flush_scheduled_work(); | 5877 | flush_scheduled_work(); |
5790 | 5878 | ||
@@ -5803,7 +5891,7 @@ static int | |||
5803 | bnx2_suspend(struct pci_dev *pdev, pm_message_t state) | 5891 | bnx2_suspend(struct pci_dev *pdev, pm_message_t state) |
5804 | { | 5892 | { |
5805 | struct net_device *dev = pci_get_drvdata(pdev); | 5893 | struct net_device *dev = pci_get_drvdata(pdev); |
5806 | struct bnx2 *bp = dev->priv; | 5894 | struct bnx2 *bp = netdev_priv(dev); |
5807 | u32 reset_code; | 5895 | u32 reset_code; |
5808 | 5896 | ||
5809 | if (!netif_running(dev)) | 5897 | if (!netif_running(dev)) |
@@ -5812,7 +5900,9 @@ bnx2_suspend(struct pci_dev *pdev, pm_message_t state) | |||
5812 | bnx2_netif_stop(bp); | 5900 | bnx2_netif_stop(bp); |
5813 | netif_device_detach(dev); | 5901 | netif_device_detach(dev); |
5814 | del_timer_sync(&bp->timer); | 5902 | del_timer_sync(&bp->timer); |
5815 | if (bp->wol) | 5903 | if (bp->flags & NO_WOL_FLAG) |
5904 | reset_code = BNX2_DRV_MSG_CODE_UNLOAD; | ||
5905 | else if (bp->wol) | ||
5816 | reset_code = BNX2_DRV_MSG_CODE_SUSPEND_WOL; | 5906 | reset_code = BNX2_DRV_MSG_CODE_SUSPEND_WOL; |
5817 | else | 5907 | else |
5818 | reset_code = BNX2_DRV_MSG_CODE_SUSPEND_NO_WOL; | 5908 | reset_code = BNX2_DRV_MSG_CODE_SUSPEND_NO_WOL; |
@@ -5826,7 +5916,7 @@ static int | |||
5826 | bnx2_resume(struct pci_dev *pdev) | 5916 | bnx2_resume(struct pci_dev *pdev) |
5827 | { | 5917 | { |
5828 | struct net_device *dev = pci_get_drvdata(pdev); | 5918 | struct net_device *dev = pci_get_drvdata(pdev); |
5829 | struct bnx2 *bp = dev->priv; | 5919 | struct bnx2 *bp = netdev_priv(dev); |
5830 | 5920 | ||
5831 | if (!netif_running(dev)) | 5921 | if (!netif_running(dev)) |
5832 | return 0; | 5922 | return 0; |
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h index 76bb5f1a250b..9f691cbd666b 100644 --- a/drivers/net/bnx2.h +++ b/drivers/net/bnx2.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* bnx2.h: Broadcom NX2 network driver. | 1 | /* bnx2.h: Broadcom NX2 network driver. |
2 | * | 2 | * |
3 | * Copyright (c) 2004, 2005 Broadcom Corporation | 3 | * Copyright (c) 2004, 2005, 2006 Broadcom Corporation |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
@@ -277,19 +277,7 @@ struct statistics_block { | |||
277 | * l2_fhdr definition | 277 | * l2_fhdr definition |
278 | */ | 278 | */ |
279 | struct l2_fhdr { | 279 | struct l2_fhdr { |
280 | #if defined(__BIG_ENDIAN) | 280 | u32 l2_fhdr_status; |
281 | u16 l2_fhdr_errors; | ||
282 | u16 l2_fhdr_status; | ||
283 | #elif defined(__LITTLE_ENDIAN) | ||
284 | u16 l2_fhdr_status; | ||
285 | u16 l2_fhdr_errors; | ||
286 | #endif | ||
287 | #define L2_FHDR_ERRORS_BAD_CRC (1<<1) | ||
288 | #define L2_FHDR_ERRORS_PHY_DECODE (1<<2) | ||
289 | #define L2_FHDR_ERRORS_ALIGNMENT (1<<3) | ||
290 | #define L2_FHDR_ERRORS_TOO_SHORT (1<<4) | ||
291 | #define L2_FHDR_ERRORS_GIANT_FRAME (1<<5) | ||
292 | |||
293 | #define L2_FHDR_STATUS_RULE_CLASS (0x7<<0) | 281 | #define L2_FHDR_STATUS_RULE_CLASS (0x7<<0) |
294 | #define L2_FHDR_STATUS_RULE_P2 (1<<3) | 282 | #define L2_FHDR_STATUS_RULE_P2 (1<<3) |
295 | #define L2_FHDR_STATUS_RULE_P3 (1<<4) | 283 | #define L2_FHDR_STATUS_RULE_P3 (1<<4) |
@@ -301,6 +289,14 @@ struct l2_fhdr { | |||
301 | #define L2_FHDR_STATUS_TCP_SEGMENT (1<<14) | 289 | #define L2_FHDR_STATUS_TCP_SEGMENT (1<<14) |
302 | #define L2_FHDR_STATUS_UDP_DATAGRAM (1<<15) | 290 | #define L2_FHDR_STATUS_UDP_DATAGRAM (1<<15) |
303 | 291 | ||
292 | #define L2_FHDR_ERRORS_BAD_CRC (1<<17) | ||
293 | #define L2_FHDR_ERRORS_PHY_DECODE (1<<18) | ||
294 | #define L2_FHDR_ERRORS_ALIGNMENT (1<<19) | ||
295 | #define L2_FHDR_ERRORS_TOO_SHORT (1<<20) | ||
296 | #define L2_FHDR_ERRORS_GIANT_FRAME (1<<21) | ||
297 | #define L2_FHDR_ERRORS_TCP_XSUM (1<<28) | ||
298 | #define L2_FHDR_ERRORS_UDP_XSUM (1<<31) | ||
299 | |||
304 | u32 l2_fhdr_hash; | 300 | u32 l2_fhdr_hash; |
305 | #if defined(__BIG_ENDIAN) | 301 | #if defined(__BIG_ENDIAN) |
306 | u16 l2_fhdr_pkt_len; | 302 | u16 l2_fhdr_pkt_len; |
@@ -3956,6 +3952,7 @@ struct bnx2 { | |||
3956 | #define NO_WOL_FLAG 8 | 3952 | #define NO_WOL_FLAG 8 |
3957 | #define USING_DAC_FLAG 0x10 | 3953 | #define USING_DAC_FLAG 0x10 |
3958 | #define USING_MSI_FLAG 0x20 | 3954 | #define USING_MSI_FLAG 0x20 |
3955 | #define ASF_ENABLE_FLAG 0x40 | ||
3959 | 3956 | ||
3960 | u32 phy_flags; | 3957 | u32 phy_flags; |
3961 | #define PHY_SERDES_FLAG 1 | 3958 | #define PHY_SERDES_FLAG 1 |
@@ -3986,6 +3983,7 @@ struct bnx2 { | |||
3986 | #define CHIP_ID_5706_A2 0x57060020 | 3983 | #define CHIP_ID_5706_A2 0x57060020 |
3987 | #define CHIP_ID_5708_A0 0x57080000 | 3984 | #define CHIP_ID_5708_A0 0x57080000 |
3988 | #define CHIP_ID_5708_B0 0x57081000 | 3985 | #define CHIP_ID_5708_B0 0x57081000 |
3986 | #define CHIP_ID_5708_B1 0x57081010 | ||
3989 | 3987 | ||
3990 | #define CHIP_BOND_ID(bp) (((bp)->chip_id) & 0xf) | 3988 | #define CHIP_BOND_ID(bp) (((bp)->chip_id) & 0xf) |
3991 | 3989 | ||
@@ -3998,7 +3996,7 @@ struct bnx2 { | |||
3998 | u16 bus_speed_mhz; | 3996 | u16 bus_speed_mhz; |
3999 | u8 wol; | 3997 | u8 wol; |
4000 | 3998 | ||
4001 | u8 fw_timed_out; | 3999 | u8 pad; |
4002 | 4000 | ||
4003 | u16 fw_wr_seq; | 4001 | u16 fw_wr_seq; |
4004 | u16 fw_drv_pulse_wr_seq; | 4002 | u16 fw_drv_pulse_wr_seq; |
@@ -4074,6 +4072,7 @@ struct bnx2 { | |||
4074 | struct net_device_stats net_stats; | 4072 | struct net_device_stats net_stats; |
4075 | 4073 | ||
4076 | struct flash_spec *flash_info; | 4074 | struct flash_spec *flash_info; |
4075 | u32 flash_size; | ||
4077 | }; | 4076 | }; |
4078 | 4077 | ||
4079 | static u32 bnx2_reg_rd_ind(struct bnx2 *bp, u32 offset); | 4078 | static u32 bnx2_reg_rd_ind(struct bnx2 *bp, u32 offset); |
@@ -4172,7 +4171,7 @@ struct fw_info { | |||
4172 | * the firmware has timed out, the driver will assume there is no firmware | 4171 | * the firmware has timed out, the driver will assume there is no firmware |
4173 | * running and there won't be any firmware-driver synchronization during a | 4172 | * running and there won't be any firmware-driver synchronization during a |
4174 | * driver reset. */ | 4173 | * driver reset. */ |
4175 | #define FW_ACK_TIME_OUT_MS 50 | 4174 | #define FW_ACK_TIME_OUT_MS 100 |
4176 | 4175 | ||
4177 | 4176 | ||
4178 | #define BNX2_DRV_RESET_SIGNATURE 0x00000000 | 4177 | #define BNX2_DRV_RESET_SIGNATURE 0x00000000 |
@@ -4275,6 +4274,9 @@ struct fw_info { | |||
4275 | #define BNX2_SHARED_HW_CFG_LED_MODE_GPHY1 0x100 | 4274 | #define BNX2_SHARED_HW_CFG_LED_MODE_GPHY1 0x100 |
4276 | #define BNX2_SHARED_HW_CFG_LED_MODE_GPHY2 0x200 | 4275 | #define BNX2_SHARED_HW_CFG_LED_MODE_GPHY2 0x200 |
4277 | 4276 | ||
4277 | #define BNX2_SHARED_HW_CFG_CONFIG2 0x00000040 | ||
4278 | #define BNX2_SHARED_HW_CFG2_NVM_SIZE_MASK 0x00fff000 | ||
4279 | |||
4278 | #define BNX2_DEV_INFO_BC_REV 0x0000004c | 4280 | #define BNX2_DEV_INFO_BC_REV 0x0000004c |
4279 | 4281 | ||
4280 | #define BNX2_PORT_HW_CFG_MAC_UPPER 0x00000050 | 4282 | #define BNX2_PORT_HW_CFG_MAC_UPPER 0x00000050 |
diff --git a/drivers/net/bnx2_fw.h b/drivers/net/bnx2_fw.h index ab07a4900e9a..0c21bd849814 100644 --- a/drivers/net/bnx2_fw.h +++ b/drivers/net/bnx2_fw.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* bnx2_fw.h: Broadcom NX2 network driver. | 1 | /* bnx2_fw.h: Broadcom NX2 network driver. |
2 | * | 2 | * |
3 | * Copyright (c) 2004, 2005 Broadcom Corporation | 3 | * Copyright (c) 2004, 2005, 2006 Broadcom Corporation |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
@@ -978,20 +978,20 @@ static u32 bnx2_COM_b06FwSbss[(0x1c/4) + 1] = { 0x0 }; | |||
978 | static int bnx2_RXP_b06FwReleaseMajor = 0x1; | 978 | static int bnx2_RXP_b06FwReleaseMajor = 0x1; |
979 | static int bnx2_RXP_b06FwReleaseMinor = 0x0; | 979 | static int bnx2_RXP_b06FwReleaseMinor = 0x0; |
980 | static int bnx2_RXP_b06FwReleaseFix = 0x0; | 980 | static int bnx2_RXP_b06FwReleaseFix = 0x0; |
981 | static u32 bnx2_RXP_b06FwStartAddr = 0x08003104; | 981 | static u32 bnx2_RXP_b06FwStartAddr = 0x08003184; |
982 | static u32 bnx2_RXP_b06FwTextAddr = 0x08000000; | 982 | static u32 bnx2_RXP_b06FwTextAddr = 0x08000000; |
983 | static int bnx2_RXP_b06FwTextLen = 0x562c; | 983 | static int bnx2_RXP_b06FwTextLen = 0x588c; |
984 | static u32 bnx2_RXP_b06FwDataAddr = 0x08005660; | 984 | static u32 bnx2_RXP_b06FwDataAddr = 0x080058e0; |
985 | static int bnx2_RXP_b06FwDataLen = 0x0; | 985 | static int bnx2_RXP_b06FwDataLen = 0x0; |
986 | static u32 bnx2_RXP_b06FwRodataAddr = 0x00000000; | 986 | static u32 bnx2_RXP_b06FwRodataAddr = 0x08005890; |
987 | static int bnx2_RXP_b06FwRodataLen = 0x0; | 987 | static int bnx2_RXP_b06FwRodataLen = 0x28; |
988 | static u32 bnx2_RXP_b06FwBssAddr = 0x08005680; | 988 | static u32 bnx2_RXP_b06FwBssAddr = 0x08005900; |
989 | static int bnx2_RXP_b06FwBssLen = 0x1394; | 989 | static int bnx2_RXP_b06FwBssLen = 0x13a4; |
990 | static u32 bnx2_RXP_b06FwSbssAddr = 0x08005660; | 990 | static u32 bnx2_RXP_b06FwSbssAddr = 0x080058e0; |
991 | static int bnx2_RXP_b06FwSbssLen = 0x18; | 991 | static int bnx2_RXP_b06FwSbssLen = 0x1c; |
992 | static u32 bnx2_RXP_b06FwText[(0x562c/4) + 1] = { | 992 | static u32 bnx2_RXP_b06FwText[(0x588c/4) + 1] = { |
993 | 0x0a000c41, 0x00000000, 0x00000000, 0x0000000d, 0x72787020, 0x322e352e, | 993 | 0x0a000c61, 0x00000000, 0x00000000, 0x0000000d, 0x72787020, 0x322e362e, |
994 | 0x38000000, 0x02050803, 0x00000000, 0x0000000d, 0x00000000, 0x00000000, | 994 | 0x31000000, 0x02060103, 0x00000000, 0x0000000d, 0x00000000, 0x00000000, |
995 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, | 995 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
996 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, | 996 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
997 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, | 997 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
@@ -1513,408 +1513,435 @@ static u32 bnx2_RXP_b06FwText[(0x562c/4) + 1] = { | |||
1513 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, | 1513 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
1514 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, | 1514 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
1515 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, | 1515 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
1516 | 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, 0x3c020800, 0x24425660, | 1516 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
1517 | 0x3c030800, 0x24636a14, 0xac400000, 0x0043202b, 0x1480fffd, 0x24420004, | 1517 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
1518 | 0x3c1d0800, 0x37bd7ffc, 0x03a0f021, 0x3c100800, 0x26103104, 0x3c1c0800, | 1518 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
1519 | 0x279c5660, 0x0e001035, 0x00000000, 0x0000000d, 0x3c080800, 0x8d023100, | 1519 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
1520 | 0x2c420080, 0x50400001, 0xad003100, 0x8d073100, 0x3c040800, 0x24840100, | 1520 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
1521 | 0x8f460100, 0x00071840, 0x00671821, 0x00031940, 0x00641021, 0xac460000, | 1521 | 0x00000000, 0x00000000, 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, |
1522 | 0x8f450104, 0x00831021, 0xac450004, 0x8f460108, 0xac460008, 0x8f45010c, | 1522 | 0x3c020800, 0x244258e0, 0x3c030800, 0x24636ca4, 0xac400000, 0x0043202b, |
1523 | 0xac45000c, 0x8f460114, 0xac460010, 0x8f450118, 0xac450014, 0x8f460124, | 1523 | 0x1480fffd, 0x24420004, 0x3c1d0800, 0x37bd7ffc, 0x03a0f021, 0x3c100800, |
1524 | 0xac460018, 0x8f450128, 0xac45001c, 0x8f464010, 0xac460020, 0x8f454014, | 1524 | 0x26103184, 0x3c1c0800, 0x279c58e0, 0x0e00104a, 0x00000000, 0x0000000d, |
1525 | 0xac450024, 0x8f464018, 0xac460028, 0x8f45401c, 0xac45002c, 0x8f464020, | 1525 | 0x27bdffe8, 0xafb00010, 0xafbf0014, 0x0e000f1d, 0x00808021, 0x1440000d, |
1526 | 0xac460030, 0x8f454024, 0xac450034, 0x8f464028, 0xac460038, 0x8f45402c, | 1526 | 0x00000000, 0x8f820010, 0x10400005, 0x00000000, 0x9743011c, 0x9742011e, |
1527 | 0xac45003c, 0x8f464030, 0xac460040, 0x8f454034, 0xac450044, 0x8f464038, | 1527 | 0x0a000c89, 0x00021400, 0x9743011e, 0x9742011c, 0x00021400, 0x00621825, |
1528 | 0xac460048, 0x8f45403c, 0xac45004c, 0x8f464040, 0xac460050, 0x8f454044, | 1528 | 0xaf830004, 0x8f840008, 0x3c020020, 0x34424000, 0x00821824, 0x54620004, |
1529 | 0xac450054, 0x8f464048, 0xac460058, 0x8f45404c, 0x24e70001, 0x00402021, | 1529 | 0x3c020020, 0x8f820014, 0x0a000c9a, 0x34421000, 0x34428000, 0x00821824, |
1530 | 0xad073100, 0x03e00008, 0xac85005c, 0x8f820004, 0x9743010c, 0x00804821, | 1530 | 0x14620004, 0x00000000, 0x8f820014, 0x34428000, 0xaf820014, 0x8f820008, |
1531 | 0x00403021, 0x30421000, 0x10400010, 0x306affff, 0x30c20020, 0x1440000e, | 1531 | 0x9743010c, 0x00403021, 0x30421000, 0x10400010, 0x3069ffff, 0x30c20020, |
1532 | 0x24070005, 0x3c021000, 0x00c21024, 0x10400009, 0x3c030dff, 0x3463ffff, | 1532 | 0x1440000e, 0x24070005, 0x3c021000, 0x00c21024, 0x10400009, 0x3c030dff, |
1533 | 0x3c020e00, 0x00c21024, 0x0062182b, 0x50600004, 0x24070001, 0x0a000cb1, | 1533 | 0x3463ffff, 0x3c020e00, 0x00c21024, 0x0062182b, 0x50600004, 0x24070001, |
1534 | 0x3c020800, 0x24070001, 0x3c020800, 0x8c430034, 0x1460001d, 0x00405821, | 1534 | 0x0a000cb2, 0x3c020800, 0x24070001, 0x3c020800, 0x8c430034, 0x1460001d, |
1535 | 0x8f820010, 0x30424000, 0x1440001a, 0x3c020001, 0x3c021f01, 0x00c24024, | 1535 | 0x00405821, 0x8f820014, 0x30424000, 0x1440001a, 0x3c020001, 0x3c021f01, |
1536 | 0x3c031000, 0x15030015, 0x3c020001, 0x31420200, 0x54400012, 0x3c020001, | 1536 | 0x00c24024, 0x3c031000, 0x15030015, 0x3c020001, 0x31220200, 0x14400012, |
1537 | 0x9744010e, 0x24020003, 0xa342018b, 0x97850012, 0x24020002, 0x34e30002, | 1537 | 0x3c020001, 0x9744010e, 0x24020003, 0xa342018b, 0x97850016, 0x24020002, |
1538 | 0xaf400180, 0xa742018c, 0xa7430188, 0x24840004, 0x30a5bfff, 0xa744018e, | 1538 | 0x34e30002, 0xaf400180, 0xa742018c, 0xa7430188, 0x24840004, 0x30a5bfff, |
1539 | 0xa74501a6, 0xaf4801b8, 0x03e00008, 0x00001021, 0x3c020001, 0x00c21024, | 1539 | 0xa744018e, 0xa74501a6, 0xaf4801b8, 0x0a000f19, 0x00001021, 0x3c020001, |
1540 | 0x10400039, 0x00000000, 0x9742010e, 0x3c038000, 0x3046ffff, 0x8f4201b8, | 1540 | 0x00c21024, 0x1040002f, 0x00000000, 0x9742010e, 0x3c038000, 0x3046ffff, |
1541 | 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x97840006, 0x8f85000c, | 1541 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x9784000a, |
1542 | 0x24020080, 0x24030002, 0xaf420180, 0xa743018c, 0xa746018e, 0x10a00005, | 1542 | 0x8f850004, 0x8f870014, 0x24020080, 0x24030002, 0xaf420180, 0x24020003, |
1543 | 0xa7440190, 0x9743011c, 0x9742011e, 0x0a000cec, 0x00021400, 0x9743011e, | 1543 | 0xa743018c, 0xa746018e, 0xa7420188, 0x30e28000, 0xa7440190, 0x1040000c, |
1544 | 0x9742011c, 0x00021400, 0x00621825, 0xaf4301a8, 0x8f840010, 0x24020003, | 1544 | 0xaf4501a8, 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, 0x8c430000, |
1545 | 0x30838000, 0x1060000d, 0xa7420188, 0x93420116, 0x304200fc, 0x005a1021, | 1545 | 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, 0x00e21024, 0xaf820014, |
1546 | 0x24424004, 0x8c430000, 0x3063ffff, 0x14600005, 0x00000000, 0x3c02ffff, | 1546 | 0x97820016, 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, 0x3084ffff, |
1547 | 0x34427fff, 0x00821024, 0xaf820010, 0x97820012, 0x9743010c, 0x8f440104, | 1547 | 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, 0x0a000f19, |
1548 | 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, | 1548 | 0x00001021, 0x8f820014, 0x30434000, 0x10600016, 0x00404021, 0x3c020f00, |
1549 | 0x3c021000, 0xaf4201b8, 0x03e00008, 0x00001021, 0x8f820010, 0x30434000, | 1549 | 0x00c21024, 0x14400012, 0x00000000, 0x93420116, 0x34424000, 0x03421821, |
1550 | 0x10600016, 0x00404021, 0x3c020f00, 0x00c21024, 0x14400012, 0x00000000, | 1550 | 0x94650002, 0x2ca21389, 0x1040000b, 0x3c020800, 0x24425900, 0x00051942, |
1551 | 0x93420116, 0x34424000, 0x03421821, 0x94650002, 0x2ca21389, 0x1040000b, | 1551 | 0x00031880, 0x00621821, 0x30a5001f, 0x8c640000, 0x24020001, 0x00a21004, |
1552 | 0x3c020800, 0x24425680, 0x00051942, 0x00031880, 0x00621821, 0x30a5001f, | 1552 | 0x00822024, 0x02048025, 0x12000030, 0x3c021000, 0x9742010e, 0x34e80002, |
1553 | 0x8c640000, 0x24020001, 0x00a21004, 0x00822024, 0x01244825, 0x11200039, | 1553 | 0x3c038000, 0x24420004, 0x3046ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, |
1554 | 0x3c021000, 0x9742010e, 0x34e70002, 0x3c038000, 0x24420004, 0x3046ffff, | 1554 | 0x24020003, 0xa342018b, 0x9784000a, 0x8f850004, 0x8f870014, 0x24020180, |
1555 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x97840006, | 1555 | 0x24030002, 0xaf420180, 0xa743018c, 0xa746018e, 0xa7480188, 0x30e28000, |
1556 | 0x8f85000c, 0x24020180, 0x24030002, 0xaf420180, 0xa743018c, 0xa746018e, | 1556 | 0xa7440190, 0x1040000c, 0xaf4501a8, 0x93420116, 0x304200fc, 0x005a1021, |
1557 | 0x10a00005, 0xa7440190, 0x9743011c, 0x9742011e, 0x0a000d41, 0x00021400, | ||
1558 | 0x9743011e, 0x9742011c, 0x00021400, 0x00621825, 0xaf4301a8, 0x8f840010, | ||
1559 | 0x30828000, 0x1040000c, 0xa7470188, 0x93420116, 0x304200fc, 0x005a1021, | ||
1560 | 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, | 1557 | 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, |
1561 | 0x00821024, 0xaf820010, 0x97820012, 0x9743010c, 0x8f440104, 0x3042bfff, | 1558 | 0x00e21024, 0xaf820014, 0x97820016, 0x9743010c, 0x8f440104, 0x3042bfff, |
1562 | 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, | 1559 | 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, |
1563 | 0xaf4201b8, 0x03e00008, 0x00001021, 0x00c21024, 0x104000e3, 0x3c020800, | 1560 | 0xaf4201b8, 0x0a000f19, 0x00001021, 0x00c21024, 0x104000c0, 0x3c020800, |
1564 | 0x8c430030, 0x10600040, 0x31024000, 0x1040003e, 0x3c030f00, 0x00c31824, | 1561 | 0x8c430030, 0x10600037, 0x31024000, 0x10400035, 0x3c030f00, 0x00c31824, |
1565 | 0x3c020100, 0x0043102b, 0x1440003a, 0x3c030800, 0x9742010e, 0x34e70002, | 1562 | 0x3c020100, 0x0043102b, 0x14400031, 0x3c030800, 0x9742010e, 0x34e80002, |
1566 | 0x3c038000, 0x24420004, 0x3046ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, | 1563 | 0x3c038000, 0x24420004, 0x3046ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, |
1567 | 0x24020003, 0xa342018b, 0x97840006, 0x8f85000c, 0x24020080, 0x24030002, | 1564 | 0x24020003, 0xa342018b, 0x9784000a, 0x8f850004, 0x8f870014, 0x24020080, |
1568 | 0xaf420180, 0xa743018c, 0xa746018e, 0x10a00005, 0xa7440190, 0x9743011c, | 1565 | 0x24030002, 0xaf420180, 0xa743018c, 0xa746018e, 0xa7480188, 0x30e28000, |
1569 | 0x9742011e, 0x0a000d86, 0x00021400, 0x9743011e, 0x9742011c, 0x00021400, | 1566 | 0xa7440190, 0x1040000c, 0xaf4501a8, 0x93420116, 0x304200fc, 0x005a1021, |
1570 | 0x00621825, 0xaf4301a8, 0x8f840010, 0x30828000, 0x1040000c, 0xa7470188, | 1567 | 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, |
1568 | 0x00e21024, 0xaf820014, 0x97820016, 0x9743010c, 0x8f440104, 0x3042bfff, | ||
1569 | 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, | ||
1570 | 0xaf4201b8, 0x0a000f19, 0x00001021, 0x3c030800, 0x8c620024, 0x30420008, | ||
1571 | 0x10400035, 0x34ea0002, 0x3c020f00, 0x00c21024, 0x14400032, 0x8d620034, | ||
1572 | 0x31220200, 0x1040002f, 0x8d620034, 0x9742010e, 0x30e8fffb, 0x3c038000, | ||
1573 | 0x24420004, 0x3046ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, | ||
1574 | 0xa342018b, 0x9784000a, 0x8f850004, 0x8f870014, 0x24020180, 0x24030002, | ||
1575 | 0xaf420180, 0xa743018c, 0xa746018e, 0xa7480188, 0x30e28000, 0xa7440190, | ||
1576 | 0x1040000c, 0xaf4501a8, 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, | ||
1577 | 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, 0x00e21024, | ||
1578 | 0xaf820014, 0x97820016, 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, | ||
1579 | 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, | ||
1580 | 0x8d620034, 0x8f860008, 0x10400012, 0x30c20100, 0x10400010, 0x3c020f00, | ||
1581 | 0x00c21024, 0x3c030200, 0x1043000c, 0x3c020800, 0x8c430038, 0x8f840004, | ||
1582 | 0x3c020800, 0x2442003c, 0x2463ffff, 0x00832024, 0x00822021, 0x90830000, | ||
1583 | 0x24630004, 0x0a000de1, 0x000329c0, 0x00000000, 0x00061602, 0x3042000f, | ||
1584 | 0x000229c0, 0x3c04fc00, 0x00441021, 0x3c030300, 0x0062182b, 0x50600001, | ||
1585 | 0x24050800, 0x9742010e, 0x3148ffff, 0x3c038000, 0x24420004, 0x3046ffff, | ||
1586 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x9783000a, | ||
1587 | 0x8f840004, 0x8f870014, 0x24020002, 0xaf450180, 0xa742018c, 0xa746018e, | ||
1588 | 0xa7480188, 0x30e28000, 0xa7430190, 0x1040000c, 0xaf4401a8, 0x93420116, | ||
1589 | 0x304200fc, 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, | ||
1590 | 0x3c02ffff, 0x34427fff, 0x00e21024, 0xaf820014, 0x97820016, 0x9743010c, | ||
1591 | 0x8f440104, 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, | ||
1592 | 0xaf4301ac, 0x3c021000, 0xaf4201b8, 0x0a000f19, 0x00001021, 0x8f424000, | ||
1593 | 0x30420100, 0x104000d5, 0x3c020800, 0x8c440024, 0x24030001, 0x1483002f, | ||
1594 | 0x00405021, 0x9742010e, 0x34e70002, 0x3c038000, 0x24420004, 0x3045ffff, | ||
1595 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x9783000a, | ||
1596 | 0x8f840004, 0x8f860014, 0x24020002, 0xaf400180, 0xa742018c, 0xa745018e, | ||
1597 | 0xa7470188, 0x30c28000, 0xa7430190, 0x1040000c, 0xaf4401a8, 0x93420116, | ||
1598 | 0x304200fc, 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, | ||
1599 | 0x3c02ffff, 0x34427fff, 0x00c21024, 0xaf820014, 0x97820016, 0x9743010c, | ||
1600 | 0x8f440104, 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, | ||
1601 | 0xaf4301ac, 0x3c021000, 0xaf4201b8, 0x0a000f19, 0x00001021, 0x30820001, | ||
1602 | 0x1040002e, 0x30eb0004, 0x9742010e, 0x30e9fffb, 0x3c038000, 0x24420004, | ||
1603 | 0x3045ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, | ||
1604 | 0x9783000a, 0x8f840004, 0x8f860014, 0x24020002, 0xaf400180, 0xa742018c, | ||
1605 | 0xa745018e, 0xa7470188, 0x30c28000, 0xa7430190, 0x1040000c, 0xaf4401a8, | ||
1571 | 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, | 1606 | 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, |
1572 | 0x14600004, 0x3c02ffff, 0x34427fff, 0x00821024, 0xaf820010, 0x97820012, | 1607 | 0x14600004, 0x3c02ffff, 0x34427fff, 0x00c21024, 0xaf820014, 0x97820016, |
1573 | 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, | 1608 | 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, |
1574 | 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, 0x03e00008, 0x00001021, | 1609 | 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, 0x3127ffff, 0x8d420024, |
1575 | 0x3c030800, 0x8c620024, 0x30420008, 0x1040003e, 0x34e80002, 0x3c020f00, | 1610 | 0x30420004, 0x10400030, 0x8d420024, 0x9742010e, 0x30e9fffb, 0x3c038000, |
1576 | 0x00c21024, 0x1440003b, 0x8d620034, 0x31420200, 0x10400038, 0x8d620034, | ||
1577 | 0x9742010e, 0x30e7fffb, 0x3c038000, 0x24420004, 0x3046ffff, 0x8f4201b8, | ||
1578 | 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x97840006, 0x8f85000c, | ||
1579 | 0x24020180, 0x24030002, 0xaf420180, 0xa743018c, 0xa746018e, 0x10a00005, | ||
1580 | 0xa7440190, 0x9743011c, 0x9742011e, 0x0a000dca, 0x00021400, 0x9743011e, | ||
1581 | 0x9742011c, 0x00021400, 0x00621825, 0xaf4301a8, 0x8f840010, 0x30828000, | ||
1582 | 0x1040000c, 0xa7470188, 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, | ||
1583 | 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, 0x00821024, | ||
1584 | 0xaf820010, 0x97820012, 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, | ||
1585 | 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, | ||
1586 | 0x8d620034, 0x8f860004, 0x1040001a, 0x30c20100, 0x10400018, 0x3c020f00, | ||
1587 | 0x00c21024, 0x3c030200, 0x10430014, 0x00000000, 0x8f82000c, 0x10400004, | ||
1588 | 0x00000000, 0x9742011c, 0x0a000df8, 0x3044ffff, 0x9742011e, 0x3044ffff, | ||
1589 | 0x3c030800, 0x8c620038, 0x3c030800, 0x2463003c, 0x2442ffff, 0x00822024, | ||
1590 | 0x00831821, 0x90620000, 0x24420004, 0x0a000e0d, 0x000229c0, 0x00000000, | ||
1591 | 0x00061602, 0x3042000f, 0x000229c0, 0x3c04fc00, 0x00441021, 0x3c030300, | ||
1592 | 0x0062182b, 0x50600001, 0x24050800, 0x9742010e, 0x3107ffff, 0x3c038000, | ||
1593 | 0x24420004, 0x3046ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, | 1611 | 0x24420004, 0x3046ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, |
1594 | 0xa342018b, 0x97830006, 0x8f84000c, 0x24020002, 0xaf450180, 0xa742018c, | 1612 | 0xa342018b, 0x9784000a, 0x8f850004, 0x8f880014, 0x24020100, 0x24030002, |
1595 | 0xa746018e, 0x10800005, 0xa7430190, 0x9743011c, 0x9742011e, 0x0a000e26, | 1613 | 0xaf420180, 0xa743018c, 0xa746018e, 0xa7470188, 0x31028000, 0xa7440190, |
1596 | 0x00021400, 0x9743011e, 0x9742011c, 0x00021400, 0x00621825, 0xaf4301a8, | 1614 | 0x1040000c, 0xaf4501a8, 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, |
1597 | 0x8f840010, 0x30828000, 0x1040000c, 0xa7470188, 0x93420116, 0x304200fc, | 1615 | 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, 0x01021024, |
1598 | 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, | 1616 | 0xaf820014, 0x97820016, 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, |
1599 | 0x34427fff, 0x00821024, 0xaf820010, 0x97820012, 0x9743010c, 0x8f440104, | 1617 | 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, |
1600 | 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, | 1618 | 0x3127ffff, 0x8d420024, 0x30420008, 0x1040002d, 0x00000000, 0x9742010e, |
1601 | 0x3c021000, 0xaf4201b8, 0x03e00008, 0x00001021, 0x8f424000, 0x30420100, | 1619 | 0x3c038000, 0x24420004, 0x3046ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, |
1602 | 0x104000f9, 0x3c020800, 0x8c440024, 0x24030001, 0x14830038, 0x00404821, | 1620 | 0x24020003, 0xa342018b, 0x9784000a, 0x8f850004, 0x8f880014, 0x24020180, |
1603 | 0x9742010e, 0x34e60002, 0x3c038000, 0x24420004, 0x3045ffff, 0x8f4201b8, | 1621 | 0x24030002, 0xaf420180, 0xa743018c, 0xa746018e, 0xa7470188, 0x31028000, |
1604 | 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x97830006, 0x8f84000c, | 1622 | 0xa7440190, 0x1040000c, 0xaf4501a8, 0x93420116, 0x304200fc, 0x005a1021, |
1605 | 0x24020002, 0xaf400180, 0xa742018c, 0xa745018e, 0x10800005, 0xa7430190, | 1623 | 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, |
1606 | 0x9743011c, 0x9742011e, 0x0a000e65, 0x00021400, 0x9743011e, 0x9742011c, | 1624 | 0x01021024, 0xaf820014, 0x97820016, 0x9743010c, 0x8f440104, 0x3042bfff, |
1607 | 0x00021400, 0x00621825, 0xaf4301a8, 0x8f840010, 0x30828000, 0x1040000c, | 1625 | 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, |
1608 | 0xa7460188, 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, 0x8c430000, | 1626 | 0xaf4201b8, 0x15600041, 0x00001021, 0x27440180, 0x3c038000, 0x8f4201b8, |
1609 | 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, 0x00821024, 0xaf820010, | 1627 | 0x00431024, 0x1440fffd, 0x24022000, 0x24030002, 0xa4820008, 0xa083000b, |
1610 | 0x97820012, 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, 0x3084ffff, | 1628 | 0xa4800010, 0x3c021000, 0xaf4201b8, 0x0a000f19, 0x00001021, 0x3c030800, |
1611 | 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, 0x03e00008, | 1629 | 0x8c620024, 0x30420001, 0x1040002e, 0x00001021, 0x9742010e, 0x34e70002, |
1612 | 0x00001021, 0x30820001, 0x10400037, 0x30ea0004, 0x9742010e, 0x30e8fffb, | ||
1613 | 0x3c038000, 0x24420004, 0x3045ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, | 1630 | 0x3c038000, 0x24420004, 0x3045ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, |
1614 | 0x24020003, 0xa342018b, 0x97830006, 0x8f84000c, 0x24020002, 0xaf400180, | 1631 | 0x24020003, 0xa342018b, 0x9783000a, 0x8f840004, 0x8f860014, 0x24020002, |
1615 | 0xa742018c, 0xa745018e, 0x10800005, 0xa7430190, 0x9743011c, 0x9742011e, | 1632 | 0xaf400180, 0xa742018c, 0xa745018e, 0xa7470188, 0x30c28000, 0xa7430190, |
1616 | 0x0a000e9f, 0x00021400, 0x9743011e, 0x9742011c, 0x00021400, 0x00621825, | 1633 | 0x1040000c, 0xaf4401a8, 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, |
1617 | 0xaf4301a8, 0x8f840010, 0x30828000, 0x1040000c, 0xa7470188, 0x93420116, | 1634 | 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, 0x00c21024, |
1618 | 0x304200fc, 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, | 1635 | 0xaf820014, 0x97820016, 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, |
1619 | 0x3c02ffff, 0x34427fff, 0x00821024, 0xaf820010, 0x97820012, 0x9743010c, | ||
1620 | 0x8f440104, 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, | ||
1621 | 0xaf4301ac, 0x3c021000, 0xaf4201b8, 0x3107ffff, 0x8d220024, 0x30420004, | ||
1622 | 0x10400039, 0x8d220024, 0x9742010e, 0x30e8fffb, 0x3c038000, 0x24420004, | ||
1623 | 0x3046ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, | ||
1624 | 0x97840006, 0x8f85000c, 0x24020100, 0x24030002, 0xaf420180, 0xa743018c, | ||
1625 | 0xa746018e, 0x10a00005, 0xa7440190, 0x9743011c, 0x9742011e, 0x0a000eda, | ||
1626 | 0x00021400, 0x9743011e, 0x9742011c, 0x00021400, 0x00621825, 0xaf4301a8, | ||
1627 | 0x8f840010, 0x30828000, 0x1040000c, 0xa7470188, 0x93420116, 0x304200fc, | ||
1628 | 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, | ||
1629 | 0x34427fff, 0x00821024, 0xaf820010, 0x97820012, 0x9743010c, 0x8f440104, | ||
1630 | 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, | ||
1631 | 0x3c021000, 0xaf4201b8, 0x3107ffff, 0x8d220024, 0x30420008, 0x10400036, | ||
1632 | 0x00000000, 0x9742010e, 0x3c038000, 0x24420004, 0x3046ffff, 0x8f4201b8, | ||
1633 | 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x97840006, 0x8f85000c, | ||
1634 | 0x24020180, 0x24030002, 0xaf420180, 0xa743018c, 0xa746018e, 0x10a00005, | ||
1635 | 0xa7440190, 0x9743011c, 0x9742011e, 0x0a000f14, 0x00021400, 0x9743011e, | ||
1636 | 0x9742011c, 0x00021400, 0x00621825, 0xaf4301a8, 0x8f840010, 0x30828000, | ||
1637 | 0x1040000c, 0xa7470188, 0x93420116, 0x304200fc, 0x005a1021, 0x24424004, | ||
1638 | 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, 0x00821024, | ||
1639 | 0xaf820010, 0x97820012, 0x9743010c, 0x8f440104, 0x3042bfff, 0x00031c00, | ||
1640 | 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, | 1636 | 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, 0xaf4201b8, |
1641 | 0x1540004a, 0x00001021, 0x27440180, 0x3c038000, 0x8f4201b8, 0x00431024, | 1637 | 0x00001021, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x8f4b0070, |
1642 | 0x1440fffd, 0x24022000, 0x24030002, 0xa4820008, 0xa083000b, 0xa4800010, | 1638 | 0x93420112, 0x8f840008, 0x00022882, 0x30820100, 0x14400003, 0x24a30003, |
1643 | 0x3c021000, 0xaf4201b8, 0x03e00008, 0x00001021, 0x3c030800, 0x8c620024, | 1639 | 0x03e00008, 0x00001021, 0x30824000, 0x10400010, 0x27424000, 0x00031880, |
1644 | 0x30420001, 0x10400037, 0x00001021, 0x9742010e, 0x34e60002, 0x3c038000, | 1640 | 0x00431021, 0x8c470000, 0x24a30004, 0x00031880, 0x27424000, 0x00431021, |
1645 | 0x24420004, 0x3045ffff, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, | 1641 | 0x8c490000, 0x93430116, 0x27424000, 0x306300fc, 0x00431021, 0x8c4a0000, |
1646 | 0xa342018b, 0x97830006, 0x8f84000c, 0x24020002, 0xaf400180, 0xa742018c, | 1642 | 0x0a000f45, 0x3c030800, 0x30822000, 0x1040ffea, 0x00031880, 0x27424000, |
1647 | 0xa745018e, 0x10800005, 0xa7430190, 0x9743011c, 0x9742011e, 0x0a000f5e, | 1643 | 0x00431021, 0x8c470000, 0x24a30004, 0x00031880, 0x27424000, 0x00431021, |
1648 | 0x00021400, 0x9743011e, 0x9742011c, 0x00021400, 0x00621825, 0xaf4301a8, | 1644 | 0x8c490000, 0x00005021, 0x3c030800, 0x24680100, 0x00071602, 0x00021080, |
1649 | 0x8f840010, 0x30828000, 0x1040000c, 0xa7460188, 0x93420116, 0x304200fc, | 1645 | 0x00481021, 0x8c460000, 0x00071b82, 0x306303fc, 0x01031821, 0x8c640400, |
1646 | 0x00071182, 0x304203fc, 0x01021021, 0x8c450800, 0x30e300ff, 0x00031880, | ||
1647 | 0x01031821, 0x00091602, 0x00021080, 0x01021021, 0x00c43026, 0x8c640c00, | ||
1648 | 0x8c431000, 0x00c53026, 0x00091382, 0x304203fc, 0x01021021, 0x8c451400, | ||
1649 | 0x312200ff, 0x00021080, 0x01021021, 0x00c43026, 0x00c33026, 0x00091982, | ||
1650 | 0x306303fc, 0x01031821, 0x8c641800, 0x8c431c00, 0x00c53026, 0x00c43026, | ||
1651 | 0x11400015, 0x00c33026, 0x000a1602, 0x00021080, 0x01021021, 0x8c432000, | ||
1652 | 0x000a1382, 0x304203fc, 0x01021021, 0x8c452400, 0x314200ff, 0x00021080, | ||
1653 | 0x01021021, 0x00c33026, 0x000a1982, 0x306303fc, 0x01031821, 0x8c642800, | ||
1654 | 0x8c432c00, 0x00c53026, 0x00c43026, 0x00c33026, 0x8f430070, 0x3c050800, | ||
1655 | 0x8ca43100, 0x2c820020, 0x10400008, 0x006b5823, 0x3c020800, 0x24423104, | ||
1656 | 0x00041880, 0x00621821, 0x24820001, 0xac6b0000, 0xaca23100, 0xaf860004, | ||
1657 | 0x03e00008, 0x24020001, 0x27bdffe8, 0xafbf0010, 0x8f460128, 0x8f840010, | ||
1658 | 0xaf460020, 0x8f450104, 0x8f420100, 0x24030800, 0xaf850008, 0xaf820014, | ||
1659 | 0xaf4301b8, 0x1080000a, 0x3c020800, 0x8c430034, 0x10600007, 0x30a22000, | ||
1660 | 0x10400005, 0x34a30100, 0x8f82000c, 0xaf830008, 0x24420001, 0xaf82000c, | ||
1661 | 0x3c020800, 0x8c4300c0, 0x10600006, 0x3c030800, 0x8c6200c4, 0x24040001, | ||
1662 | 0x24420001, 0x0a000fd5, 0xac6200c4, 0x8f820008, 0x3c030010, 0x00431024, | ||
1663 | 0x14400009, 0x3c02001f, 0x3c030800, 0x8c620020, 0x00002021, 0x24420001, | ||
1664 | 0x0e000c78, 0xac620020, 0x0a000fd5, 0x00402021, 0x3442ff00, 0x14c20009, | ||
1665 | 0x2403bfff, 0x3c030800, 0x8c620020, 0x24040001, 0x24420001, 0x0e000c78, | ||
1666 | 0xac620020, 0x0a000fd5, 0x00402021, 0x8f820014, 0x00431024, 0x14400006, | ||
1667 | 0x00000000, 0xaf400048, 0x0e0011a9, 0xaf400040, 0x0a000fd5, 0x00402021, | ||
1668 | 0x0e001563, 0x00000000, 0x00402021, 0x10800005, 0x3c024000, 0x8f430124, | ||
1669 | 0x3c026020, 0xac430014, 0x3c024000, 0xaf420138, 0x00000000, 0x8fbf0010, | ||
1670 | 0x03e00008, 0x27bd0018, 0x27bdffe0, 0xafbf0018, 0xafb10014, 0xafb00010, | ||
1671 | 0x8f420140, 0xaf420020, 0x8f430148, 0x3c027000, 0x00621824, 0x3c023000, | ||
1672 | 0x10620021, 0x0043102b, 0x14400006, 0x3c024000, 0x3c022000, 0x10620009, | ||
1673 | 0x3c024000, 0x0a001040, 0x00000000, 0x10620045, 0x3c025000, 0x10620047, | ||
1674 | 0x3c024000, 0x0a001040, 0x00000000, 0x27440180, 0x3c038000, 0x8f4201b8, | ||
1675 | 0x00431024, 0x1440fffd, 0x00000000, 0x8f420148, 0x24030002, 0xa083000b, | ||
1676 | 0x00021402, 0xa4820008, 0x8f430148, 0xa4830010, 0x8f420144, 0x3c031000, | ||
1677 | 0xac820024, 0xaf4301b8, 0x0a001040, 0x3c024000, 0x8f420148, 0x24030002, | ||
1678 | 0x3044ffff, 0x00021402, 0x305000ff, 0x1203000c, 0x27510180, 0x2a020003, | ||
1679 | 0x10400005, 0x24020003, 0x0600001d, 0x36053000, 0x0a001027, 0x3c038000, | ||
1680 | 0x12020007, 0x00000000, 0x0a001034, 0x00000000, 0x0e00112c, 0x00000000, | ||
1681 | 0x0a001025, 0x00402021, 0x0e00113e, 0x00000000, 0x00402021, 0x36053000, | ||
1682 | 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020002, 0xa6250008, | ||
1683 | 0xa222000b, 0xa6240010, 0x8f420144, 0x3c031000, 0xae220024, 0xaf4301b8, | ||
1684 | 0x0a001040, 0x3c024000, 0x0000000d, 0x00000000, 0x240002bf, 0x0a001040, | ||
1685 | 0x3c024000, 0x0e001441, 0x00000000, 0x0a001040, 0x3c024000, 0x0e0015ea, | ||
1686 | 0x00000000, 0x3c024000, 0xaf420178, 0x00000000, 0x8fbf0018, 0x8fb10014, | ||
1687 | 0x8fb00010, 0x03e00008, 0x27bd0020, 0x24020800, 0x03e00008, 0xaf4201b8, | ||
1688 | 0x27bdffe8, 0x3c04600c, 0xafbf0014, 0xafb00010, 0x8c825000, 0x3c1a8000, | ||
1689 | 0x2403ff7f, 0x3c106000, 0x00431024, 0x3442380c, 0x24030003, 0xac825000, | ||
1690 | 0x3c020008, 0xaf430008, 0x8e040808, 0x0342d825, 0x8e020808, 0x3c030800, | ||
1691 | 0xac600020, 0x3084fff0, 0x2c840001, 0x3042fff0, 0x38420010, 0x2c420001, | ||
1692 | 0xaf840010, 0xaf820000, 0x0e00160c, 0x00000000, 0x0e001561, 0x00000000, | ||
1693 | 0x3c020400, 0x3442000c, 0x3c03ffff, 0x34630806, 0xae021948, 0xae03194c, | ||
1694 | 0x8e021980, 0x34420200, 0xae021980, 0x8f500000, 0x32020003, 0x1040fffd, | ||
1695 | 0x32020001, 0x10400004, 0x32020002, 0x0e000f92, 0x00000000, 0x32020002, | ||
1696 | 0x1040fff6, 0x00000000, 0x0e000fe0, 0x00000000, 0x0a001071, 0x00000000, | ||
1697 | 0x27bdffe8, 0x3c04600c, 0xafbf0014, 0xafb00010, 0x8c825000, 0x3c1a8000, | ||
1698 | 0x2403ff7f, 0x3c106000, 0x00431024, 0x3442380c, 0x24030003, 0xac825000, | ||
1699 | 0x3c020008, 0xaf430008, 0x8e040808, 0x0342d825, 0x8e020808, 0x3c030800, | ||
1700 | 0xac600020, 0x3084fff0, 0x2c840001, 0x3042fff0, 0x38420010, 0x2c420001, | ||
1701 | 0xaf840010, 0xaf820000, 0x0e00160c, 0x00000000, 0x0e001561, 0x00000000, | ||
1702 | 0x3c020400, 0x3442000c, 0x3c03ffff, 0x34630806, 0xae021948, 0xae03194c, | ||
1703 | 0x8e021980, 0x8fbf0014, 0x34420200, 0xae021980, 0x8fb00010, 0x03e00008, | ||
1704 | 0x27bd0018, 0x00804821, 0x30a5ffff, 0x30c6ffff, 0x30e7ffff, 0x3c038000, | ||
1705 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, 0xa342018b, 0x9783000a, | ||
1706 | 0x8f840004, 0x8f880014, 0xaf490180, 0xa745018c, 0xa746018e, 0xa7470188, | ||
1707 | 0x31028000, 0xa7430190, 0x1040000c, 0xaf4401a8, 0x93420116, 0x304200fc, | ||
1650 | 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, | 1708 | 0x005a1021, 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, |
1651 | 0x34427fff, 0x00821024, 0xaf820010, 0x97820012, 0x9743010c, 0x8f440104, | 1709 | 0x34427fff, 0x01021024, 0xaf820014, 0x97820016, 0x9743010c, 0x8f440104, |
1652 | 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, | 1710 | 0x3042bfff, 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, |
1653 | 0x3c021000, 0xaf4201b8, 0x00001021, 0x03e00008, 0x00000000, 0x27bdffe8, | 1711 | 0x3c021000, 0xaf4201b8, 0x03e00008, 0x00000000, 0x27440180, 0x3c038000, |
1654 | 0xafbf0010, 0x8f460128, 0x8f84000c, 0xaf460020, 0x8f450104, 0x8f420100, | 1712 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24022000, 0x24030002, 0xa4820008, |
1655 | 0x24030800, 0xaf850004, 0xaf820010, 0xaf4301b8, 0x1080000a, 0x3c020800, | 1713 | 0xa083000b, 0xa4800010, 0x3c021000, 0xaf4201b8, 0x03e00008, 0x00000000, |
1656 | 0x8c430034, 0x10600007, 0x30a22000, 0x10400005, 0x34a30100, 0x8f820008, | ||
1657 | 0xaf830004, 0x24420001, 0xaf820008, 0x3c020800, 0x8c4300c0, 0x10600006, | ||
1658 | 0x3c030800, 0x8c6200c4, 0x24040001, 0x24420001, 0x0a000fc0, 0xac6200c4, | ||
1659 | 0x8f820004, 0x3c030010, 0x00431024, 0x14400009, 0x3c02001f, 0x3c030800, | ||
1660 | 0x8c620020, 0x00002021, 0x24420001, 0x0e000c99, 0xac620020, 0x0a000fc0, | ||
1661 | 0x00402021, 0x3442ff00, 0x14c20009, 0x2403bfff, 0x3c030800, 0x8c620020, | ||
1662 | 0x24040001, 0x24420001, 0x0e000c99, 0xac620020, 0x0a000fc0, 0x00402021, | ||
1663 | 0x8f820010, 0x00431024, 0x14400006, 0x00000000, 0xaf400048, 0x0e001144, | ||
1664 | 0xaf400040, 0x0a000fc0, 0x00402021, 0x0e0014c9, 0x00000000, 0x00402021, | ||
1665 | 0x10800005, 0x3c024000, 0x8f430124, 0x3c026020, 0xac430014, 0x3c024000, | ||
1666 | 0xaf420138, 0x00000000, 0x8fbf0010, 0x03e00008, 0x27bd0018, 0x27bdffe0, | ||
1667 | 0xafbf0018, 0xafb10014, 0xafb00010, 0x8f420140, 0xaf420020, 0x8f430148, | ||
1668 | 0x3c027000, 0x00621824, 0x3c023000, 0x10620021, 0x0043102b, 0x14400006, | ||
1669 | 0x3c024000, 0x3c022000, 0x10620009, 0x3c024000, 0x0a00102b, 0x00000000, | ||
1670 | 0x10620045, 0x3c025000, 0x10620047, 0x3c024000, 0x0a00102b, 0x00000000, | ||
1671 | 0x27440180, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, | 1714 | 0x27440180, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, |
1672 | 0x8f420148, 0x24030002, 0xa083000b, 0x00021402, 0xa4820008, 0x8f430148, | 1715 | 0x8f420148, 0x24030002, 0xa083000b, 0x00021402, 0xa4820008, 0x8f430148, |
1673 | 0xa4830010, 0x8f420144, 0x3c031000, 0xac820024, 0xaf4301b8, 0x0a00102b, | 1716 | 0xa4830010, 0x8f420144, 0x3c031000, 0xac820024, 0x03e00008, 0xaf4301b8, |
1674 | 0x3c024000, 0x8f420148, 0x24030002, 0x3044ffff, 0x00021402, 0x305000ff, | 1717 | 0x27bdffe0, 0xafbf0018, 0xafb10014, 0xafb00010, 0x8f420148, 0x24030002, |
1675 | 0x1203000c, 0x27510180, 0x2a020003, 0x10400005, 0x24020003, 0x0600001d, | 1718 | 0x3044ffff, 0x00021402, 0x305000ff, 0x1203000c, 0x27510180, 0x2a020003, |
1676 | 0x36053000, 0x0a001012, 0x3c038000, 0x12020007, 0x00000000, 0x0a00101f, | 1719 | 0x10400005, 0x24020003, 0x0600001d, 0x36053000, 0x0a001117, 0x3c038000, |
1677 | 0x00000000, 0x0e00111f, 0x00000000, 0x0a001010, 0x00402021, 0x0e001131, | 1720 | 0x12020007, 0x00000000, 0x0a001124, 0x00000000, 0x0e00112c, 0x00000000, |
1678 | 0x00000000, 0x00402021, 0x36053000, 0x3c038000, 0x8f4201b8, 0x00431024, | 1721 | 0x0a001115, 0x00402021, 0x0e00113e, 0x00000000, 0x00402021, 0x36053000, |
1679 | 0x1440fffd, 0x24020002, 0xa6250008, 0xa222000b, 0xa6240010, 0x8f420144, | 1722 | 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020002, 0xa6250008, |
1680 | 0x3c031000, 0xae220024, 0xaf4301b8, 0x0a00102b, 0x3c024000, 0x0000000d, | 1723 | 0xa222000b, 0xa6240010, 0x8f420144, 0x3c031000, 0xae220024, 0xaf4301b8, |
1681 | 0x00000000, 0x24000295, 0x0a00102b, 0x3c024000, 0x0e0013a7, 0x00000000, | 1724 | 0x0a001128, 0x8fbf0018, 0x0000000d, 0x00000000, 0x240002bf, 0x8fbf0018, |
1682 | 0x0a00102b, 0x3c024000, 0x0e001552, 0x00000000, 0x3c024000, 0xaf420178, | 1725 | 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020, 0x3084ffff, 0x2c821389, |
1683 | 0x00000000, 0x8fbf0018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020, | 1726 | 0x1040000d, 0x00001021, 0x3c030800, 0x24635900, 0x00042942, 0x00052880, |
1684 | 0x24020800, 0x03e00008, 0xaf4201b8, 0x27bdffe8, 0x3c04600c, 0xafbf0014, | 1727 | 0x00a32821, 0x3086001f, 0x8ca40000, 0x24030001, 0x00c31804, 0x00832025, |
1685 | 0xafb00010, 0x8c825000, 0x3c1a8000, 0x2403ff7f, 0x3c106000, 0x00431024, | 1728 | 0x03e00008, 0xaca40000, 0x03e00008, 0x24020091, 0x3084ffff, 0x2c821389, |
1686 | 0x3442380c, 0x24030003, 0xac825000, 0x3c020008, 0xaf430008, 0x8e040808, | 1729 | 0x1040000e, 0x00001021, 0x3c030800, 0x24635900, 0x00042942, 0x00052880, |
1687 | 0x0342d825, 0x8e020808, 0x3c030800, 0xac600020, 0x3084fff0, 0x2c840001, | 1730 | 0x00a32821, 0x3086001f, 0x24030001, 0x8ca40000, 0x00c31804, 0x00031827, |
1688 | 0x3042fff0, 0x38420010, 0x2c420001, 0xaf84000c, 0xaf820000, 0x0e001574, | 1731 | 0x00832024, 0x03e00008, 0xaca40000, 0x03e00008, 0x24020091, 0x9482000c, |
1689 | 0x00000000, 0x0e0014c7, 0x00000000, 0x3c020400, 0x3442000c, 0x3c03ffff, | 1732 | 0x24870014, 0x00021302, 0x00021080, 0x00824021, 0x00e8182b, 0x1060004f, |
1690 | 0x34630806, 0xae021948, 0xae03194c, 0x8e021980, 0x34420200, 0xae021980, | 1733 | 0x00000000, 0x90e30000, 0x2c620009, 0x10400047, 0x3c020800, 0x24425890, |
1691 | 0x8f500000, 0x32020003, 0x1040fffd, 0x32020001, 0x10400004, 0x32020002, | 1734 | 0x00031880, 0x00621821, 0x8c640000, 0x00800008, 0x00000000, 0x0a0011a4, |
1692 | 0x0e000f7d, 0x00000000, 0x32020002, 0x1040fff6, 0x00000000, 0x0e000fcb, | 1735 | 0x24e70001, 0x90e30001, 0x2402000a, 0x54620024, 0x01003821, 0x01071023, |
1693 | 0x00000000, 0x0a00105c, 0x00000000, 0x27bdffe8, 0x3c04600c, 0xafbf0014, | 1736 | 0x2c42000a, 0x54400020, 0x01003821, 0x3c050800, 0x8ca26c98, 0x24e70002, |
1694 | 0xafb00010, 0x8c825000, 0x3c1a8000, 0x2403ff7f, 0x3c106000, 0x00431024, | 1737 | 0x34420100, 0xaca26c98, 0x90e30000, 0x90e20001, 0x90e40002, 0x90e60003, |
1695 | 0x3442380c, 0x24030003, 0xac825000, 0x3c020008, 0xaf430008, 0x8e040808, | 1738 | 0x24e70004, 0x24a56c98, 0x00031e00, 0x00021400, 0x00621825, 0x00042200, |
1696 | 0x0342d825, 0x8e020808, 0x3c030800, 0xac600020, 0x3084fff0, 0x2c840001, | 1739 | 0x00641825, 0x00661825, 0xaca30004, 0x90e20000, 0x90e30001, 0x90e40002, |
1697 | 0x3042fff0, 0x38420010, 0x2c420001, 0xaf84000c, 0xaf820000, 0x0e001574, | 1740 | 0x90e60003, 0x24e70004, 0x00021600, 0x00031c00, 0x00431025, 0x00042200, |
1698 | 0x00000000, 0x0e0014c7, 0x00000000, 0x3c020400, 0x3442000c, 0x3c03ffff, | 1741 | 0x00441025, 0x00461025, 0x0a0011a4, 0xaca20008, 0x90e30001, 0x24020004, |
1699 | 0x34630806, 0xae021948, 0xae03194c, 0x8e021980, 0x8fbf0014, 0x34420200, | 1742 | 0x1062000e, 0x00601021, 0x0a00119e, 0x01001021, 0x90e30001, 0x24020003, |
1700 | 0xae021980, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x30a5ffff, 0x30c6ffff, | 1743 | 0x10620008, 0x00601021, 0x0a00119e, 0x01001021, 0x90e30001, 0x24020002, |
1701 | 0x30e7ffff, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020003, | 1744 | 0x14620003, 0x01001021, 0x00601021, 0x00e21021, 0x0a0011a4, 0x00403821, |
1702 | 0xa342018b, 0x97830006, 0x8f82000c, 0xaf440180, 0xa745018c, 0xa746018e, | 1745 | 0x90e20001, 0x0a0011a4, 0x00e23821, 0x01003821, 0x00e8102b, 0x5440ffb4, |
1703 | 0x10400005, 0xa7430190, 0x9743011c, 0x9742011e, 0x0a0010ad, 0x00021400, | 1746 | 0x90e30000, 0x03e00008, 0x24020001, 0x27bdff90, 0x3c030800, 0xafbf006c, |
1704 | 0x9743011e, 0x9742011c, 0x00021400, 0x00621825, 0xaf4301a8, 0x8f840010, | 1747 | 0xafbe0068, 0xafb70064, 0xafb60060, 0xafb5005c, 0xafb40058, 0xafb30054, |
1705 | 0x30828000, 0x1040000c, 0xa7470188, 0x93420116, 0x304200fc, 0x005a1021, | 1748 | 0xafb20050, 0xafb1004c, 0xafb00048, 0xac606c98, 0x93620023, 0x30420010, |
1706 | 0x24424004, 0x8c430000, 0x3063ffff, 0x14600004, 0x3c02ffff, 0x34427fff, | 1749 | 0x1440027c, 0x24020001, 0x93420116, 0x93630005, 0x34424000, 0x30630001, |
1707 | 0x00821024, 0xaf820010, 0x97820012, 0x9743010c, 0x8f440104, 0x3042bfff, | 1750 | 0x14600005, 0x0342b021, 0x0e0015e0, 0x00000000, 0x0a001436, 0x8fbf006c, |
1708 | 0x00031c00, 0x3084ffff, 0x00641825, 0xa74201a6, 0xaf4301ac, 0x3c021000, | 1751 | 0x93420112, 0x8f430104, 0x3c040020, 0x34424000, 0x00641824, 0x10600012, |
1709 | 0xaf4201b8, 0x03e00008, 0x00000000, 0x27440180, 0x3c038000, 0x8f4201b8, | 1752 | 0x03422821, 0x27450180, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, |
1710 | 0x00431024, 0x1440fffd, 0x24022000, 0x24030002, 0xa4820008, 0xa083000b, | 1753 | 0x00000000, 0x8f420128, 0xaca20000, 0x8f640040, 0x24030008, 0x240240c1, |
1711 | 0xa4800010, 0x3c021000, 0xaf4201b8, 0x03e00008, 0x00000000, 0x27440180, | 1754 | 0xa4a20008, 0x24020002, 0xa0a2000b, 0x3c021000, 0x0a0011f1, 0xa0a3000a, |
1712 | 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x8f420148, | 1755 | 0x8f420104, 0x3c030040, 0x00431024, 0x1040001d, 0x3c038000, 0x27450180, |
1713 | 0x24030002, 0xa083000b, 0x00021402, 0xa4820008, 0x8f430148, 0xa4830010, | 1756 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x8f420128, 0xaca20000, |
1714 | 0x8f420144, 0x3c031000, 0xac820024, 0x03e00008, 0xaf4301b8, 0x27bdffe0, | 1757 | 0x8f640040, 0x24030010, 0x240240c1, 0xa4a20008, 0x24020002, 0xa0a3000a, |
1715 | 0xafbf0018, 0xafb10014, 0xafb00010, 0x8f420148, 0x24030002, 0x3044ffff, | 1758 | 0x24030008, 0xa0a2000b, 0x3c021000, 0xa4a30010, 0xa0a00012, 0xa0a00013, |
1716 | 0x00021402, 0x305000ff, 0x1203000c, 0x27510180, 0x2a020003, 0x10400005, | 1759 | 0xaca00014, 0xaca00024, 0xaca00028, 0xaca0002c, 0xaca40018, 0x0e0015e0, |
1717 | 0x24020003, 0x0600001d, 0x36053000, 0x0a00110a, 0x3c038000, 0x12020007, | 1760 | 0xaf4201b8, 0x0a001436, 0x8fbf006c, 0x8f820000, 0x10400016, 0x00000000, |
1718 | 0x00000000, 0x0a001117, 0x00000000, 0x0e00111f, 0x00000000, 0x0a001108, | 1761 | 0x8f420104, 0x3c030001, 0x00431024, 0x10400011, 0x00000000, 0x8ca3000c, |
1719 | 0x00402021, 0x0e001131, 0x00000000, 0x00402021, 0x36053000, 0x3c038000, | 1762 | 0x8f620030, 0x1462022d, 0x24020001, 0x8ca30010, 0x8f62002c, 0x14620229, |
1720 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020002, 0xa6250008, 0xa222000b, | 1763 | 0x24020001, 0x9763003a, 0x96c20000, 0x14430225, 0x24020001, 0x97630038, |
1721 | 0xa6240010, 0x8f420144, 0x3c031000, 0xae220024, 0xaf4301b8, 0x0a00111b, | 1764 | 0x96c20002, 0x14430221, 0x24020001, 0xaf400048, 0xaf400054, 0xaf400040, |
1722 | 0x8fbf0018, 0x0000000d, 0x00000000, 0x24000295, 0x8fbf0018, 0x8fb10014, | 1765 | 0x8f740040, 0x8f650048, 0x00b43023, 0x04c10004, 0x00000000, 0x0000000d, |
1723 | 0x8fb00010, 0x03e00008, 0x27bd0020, 0x3084ffff, 0x2c821389, 0x1040000d, | 1766 | 0x00000000, 0x240001af, 0x9742011a, 0x3052ffff, 0x12400004, 0x8ed30004, |
1724 | 0x00001021, 0x3c030800, 0x24635680, 0x00042942, 0x00052880, 0x00a32821, | 1767 | 0x02721021, 0x0a001228, 0x2451ffff, 0x02608821, 0x92d7000d, 0xa7a00020, |
1725 | 0x3086001f, 0x8ca40000, 0x24030001, 0x00c31804, 0x00832025, 0x03e00008, | 1768 | 0xa3a0001a, 0xafa00028, 0x9362003f, 0x32e30004, 0x1060003a, 0x305000ff, |
1726 | 0xaca40000, 0x03e00008, 0x24020091, 0x3084ffff, 0x2c821389, 0x1040000e, | 1769 | 0x24040012, 0x16040006, 0x24020001, 0x3c040800, 0x8c830028, 0x24630001, |
1727 | 0x00001021, 0x3c030800, 0x24635680, 0x00042942, 0x00052880, 0x00a32821, | 1770 | 0x0a001328, 0xac830028, 0x8f620044, 0x16620010, 0x27a60010, 0x27450180, |
1728 | 0x3086001f, 0x24030001, 0x8ca40000, 0x00c31804, 0x00031827, 0x00832024, | 1771 | 0x3c038000, 0x2402001a, 0xa7a20020, 0x24020020, 0xafb40028, 0xa3b00022, |
1729 | 0x03e00008, 0xaca40000, 0x03e00008, 0x24020091, 0x27bdffb0, 0xafbf0048, | 1772 | 0xa3a40023, 0xa3a2001a, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, |
1730 | 0x93620023, 0x30420010, 0x1440025b, 0x24020001, 0x93420116, 0x93630005, | 1773 | 0x0a00130d, 0x00000000, 0x8f620044, 0x02621023, 0x0440001a, 0x02651023, |
1731 | 0x34424000, 0x30630001, 0x14600005, 0x03425821, 0x0e001548, 0x00000000, | 1774 | 0x044100d9, 0x24020001, 0x3c020800, 0x8c4300d8, 0x10600004, 0x24020001, |
1732 | 0x0a0013a5, 0x8fbf0048, 0x93420112, 0x8f430104, 0x3c040020, 0x34424000, | 1775 | 0xa7a20020, 0x0a00125e, 0xafb40028, 0x2402001a, 0xa7a20020, 0x24020020, |
1733 | 0x00641824, 0x10600012, 0x03422821, 0x27450180, 0x3c038000, 0x8f4201b8, | 1776 | 0xafb40028, 0xa3b00022, 0xa3a40023, 0xa3a2001a, 0x27a60010, 0x27450180, |
1777 | 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x0a00130d, | ||
1778 | 0x00000000, 0x0a001328, 0x24020001, 0x0293f023, 0x1bc00016, 0x025e102a, | ||
1779 | 0x54400007, 0x32f700fe, 0x57d2000f, 0x027e9821, 0x32e20001, 0x5440000c, | ||
1780 | 0x027e9821, 0x32f700fe, 0x0240f021, 0x3c040800, 0x8c8300c8, 0x00009021, | ||
1781 | 0x24020001, 0xa7a20020, 0xafb40028, 0x24630001, 0x0a001282, 0xac8300c8, | ||
1782 | 0x025e1023, 0x0a001282, 0x3052ffff, 0x0000f021, 0x24a2ffff, 0x02221823, | ||
1783 | 0x1860001f, 0x0072102a, 0x54400019, 0x00a08821, 0x97a20020, 0x3c040800, | ||
1784 | 0x8c8300cc, 0xafb40028, 0x34420001, 0x24630001, 0xa7a20020, 0x02741026, | ||
1785 | 0x2c420001, 0xac8300cc, 0x2cc30001, 0x00431024, 0x1440000a, 0x02401821, | ||
1786 | 0x27a60010, 0x27450180, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, | ||
1787 | 0x00000000, 0x0a00130d, 0x00000000, 0x00a08821, 0x02431023, 0x3052ffff, | ||
1788 | 0x0a0012ae, 0x32f700f6, 0x02741023, 0x18400008, 0x97a20020, 0x3c040800, | ||
1789 | 0x8c8300d4, 0xafb30028, 0x34420400, 0x24630001, 0xa7a20020, 0xac8300d4, | ||
1790 | 0x32e20002, 0x1040001c, 0x32e20010, 0x8f620044, 0x1662000d, 0x27a60010, | ||
1791 | 0x97a20020, 0x27450180, 0x3c038000, 0xafb40028, 0x34420001, 0xa7a20020, | ||
1792 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x0a00130d, 0x00000000, | ||
1793 | 0x97a20020, 0x27450180, 0x3c038000, 0xafb40028, 0x34420001, 0xa7a20020, | ||
1794 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x0a00130d, 0x00000000, | ||
1795 | 0x54400003, 0x8ed50008, 0x0a001328, 0x24020001, 0x8f630054, 0x26a2ffff, | ||
1796 | 0x00431023, 0x18400011, 0x27a60010, 0x97a20020, 0x3c040800, 0x8c8300d0, | ||
1797 | 0x27450180, 0x3c078000, 0xafb40028, 0x34420001, 0x24630001, 0xa7a20020, | ||
1798 | 0xac8300d0, 0x8f4201b8, 0x00471024, 0x1440fffd, 0x00000000, 0x0a00130d, | ||
1799 | 0x00000000, 0x32e20020, 0x10400011, 0x00000000, 0x96c20012, 0x0052102b, | ||
1800 | 0x10400008, 0x97a20020, 0x96d20012, 0x12400003, 0x02721021, 0x0a0012f2, | ||
1801 | 0x2451ffff, 0x02608821, 0x97a20020, 0x93a3001a, 0x34420008, 0x34630004, | ||
1802 | 0xa7a20020, 0xa3a3001a, 0x8f420104, 0x3c030080, 0x00431024, 0x10400037, | ||
1803 | 0x3a03000a, 0x0e001151, 0x02c02021, 0x24030002, 0x1443002b, 0x3c030800, | ||
1804 | 0x27a60010, 0x97a20020, 0x27450180, 0x3c038000, 0xafb40028, 0x34420001, | ||
1805 | 0xa7a20020, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x8f420128, | ||
1806 | 0xaca20000, 0x8cc30018, 0x240240c1, 0xa4a20008, 0xaca30018, 0x90c4000a, | ||
1807 | 0x24020002, 0xa0a2000b, 0xa0a4000a, 0x94c20010, 0xa4a20010, 0x90c30012, | ||
1808 | 0xa0a30012, 0x90c20013, 0xa0a20013, 0x8cc30014, 0xaca30014, 0x8cc20024, | ||
1809 | 0xaca20024, 0x8cc30028, 0xaca30028, 0x8cc4002c, 0x24020001, 0x3c031000, | ||
1810 | 0xaca4002c, 0xaf4301b8, 0xaf400044, 0xaf400050, 0x0a001436, 0x8fbf006c, | ||
1811 | 0x8c626c98, 0x30420100, 0x10400003, 0x24636c98, 0x8c620004, 0xaf62017c, | ||
1812 | 0x3a03000a, 0x2c630001, 0x3a02000c, 0x2c420001, 0x00621825, 0x14600003, | ||
1813 | 0x2402000e, 0x56020030, 0x00009021, 0x52400008, 0x96c4000e, 0x12400004, | ||
1814 | 0xa7b20040, 0x02721021, 0x0a001343, 0x2451ffff, 0x02608821, 0x96c4000e, | ||
1815 | 0x93630035, 0x8f62004c, 0x00642004, 0x00952021, 0x00821023, 0x18400015, | ||
1816 | 0x00000000, 0x8f620018, 0x02621023, 0x1c400015, 0x97a20020, 0x8f620018, | ||
1817 | 0x1662001c, 0x00000000, 0x8f62001c, 0x02a21023, 0x1c40000e, 0x97a20020, | ||
1818 | 0x8f62001c, 0x16a20015, 0x00000000, 0x8f620058, 0x00821023, 0x18400011, | ||
1819 | 0x97a20020, 0x0a001364, 0xafb10028, 0x8f620058, 0x00821023, 0x0441000b, | ||
1820 | 0x97a20020, 0xafb10028, 0xafb30034, 0xafb50038, 0xafa4003c, 0x34420020, | ||
1821 | 0x0a00136d, 0xa7a20020, 0x02809821, 0x02608821, 0x8f640058, 0x8f62004c, | ||
1822 | 0x02a21023, 0x18400009, 0x00000000, 0x8f620054, 0x02a21023, 0x1c400005, | ||
1823 | 0x97a20020, 0xafb10028, 0xafb50024, 0x0a001385, 0x34420040, 0x9742011a, | ||
1824 | 0x1440000c, 0x24020014, 0x8f620058, 0x14820009, 0x24020014, 0x8f63004c, | ||
1825 | 0x8f620054, 0x10620004, 0x97a20020, 0xafb10028, 0x34420080, 0xa7a20020, | ||
1826 | 0x24020014, 0x1202000a, 0x2a020015, 0x10400005, 0x2402000c, 0x12020006, | ||
1827 | 0x32e20001, 0x0a0013c6, 0x00000000, 0x24020016, 0x16020035, 0x32e20001, | ||
1828 | 0x8f620084, 0x24420001, 0x16a20031, 0x32e20001, 0x24020014, 0x12020021, | ||
1829 | 0x2a020015, 0x10400005, 0x2402000c, 0x12020008, 0x32e20001, 0x0a0013c6, | ||
1830 | 0x00000000, 0x24020016, 0x1202000c, 0x32e20001, 0x0a0013c6, 0x00000000, | ||
1831 | 0x97a30020, 0x2402000e, 0xafb10028, 0xa3b00022, 0xa3a20023, 0xafb50024, | ||
1832 | 0x34630054, 0x0a0013c5, 0xa7a30020, 0x97a20020, 0x93a4001a, 0x24030010, | ||
1833 | 0xafb10028, 0xa3b00022, 0xa3a30023, 0xafb50024, 0x3442005d, 0x34840002, | ||
1834 | 0xa7a20020, 0x0a0013c5, 0xa3a4001a, 0x97a20020, 0x24030012, 0xa3a30023, | ||
1835 | 0x93a3001a, 0xafb10028, 0xa3b00022, 0xafb50024, 0x3042fffe, 0x3442005c, | ||
1836 | 0x34630002, 0xa7a20020, 0xa3a3001a, 0x32e20001, 0x10400030, 0x2402000c, | ||
1837 | 0x12020013, 0x2a02000d, 0x10400005, 0x2402000a, 0x12020008, 0x97a20020, | ||
1838 | 0x0a0013f8, 0x32e20009, 0x2402000e, 0x1202001b, 0x32e20009, 0x0a0013f9, | ||
1839 | 0x0002102b, 0x93a4001a, 0x24030008, 0xafb10028, 0xa3b00022, 0xa3a30023, | ||
1840 | 0x0a0013f4, 0x34420013, 0x97a30020, 0x30620004, 0x14400005, 0x93a2001a, | ||
1841 | 0x3463001b, 0xa7a30020, 0x0a0013e7, 0x24030016, 0x3463001b, 0xa7a30020, | ||
1842 | 0x24030010, 0xafb10028, 0xa3b00022, 0xa3a30023, 0x34420002, 0x0a0013f7, | ||
1843 | 0xa3a2001a, 0x97a20020, 0x93a4001a, 0x24030010, 0xafb10028, 0xa3b00022, | ||
1844 | 0xa3a30023, 0x3442001b, 0x34840002, 0xa7a20020, 0xa3a4001a, 0x32e20009, | ||
1845 | 0x0002102b, 0x00021023, 0x30420007, 0x12400015, 0x34450003, 0x8f820018, | ||
1846 | 0x24030800, 0x27440180, 0x24420001, 0xaf820018, 0x24020004, 0xaf4301b8, | ||
1847 | 0xa4850008, 0xa082000b, 0x93430120, 0x00003021, 0x3c021000, 0xa492000e, | ||
1848 | 0xac950024, 0xac930028, 0x007e1821, 0xa483000c, 0xaf4201b8, 0x0a001413, | ||
1849 | 0x97a20020, 0x24060001, 0x97a20020, 0x10400020, 0x27450180, 0x3c038000, | ||
1850 | 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x8f420128, 0xaca20000, | ||
1851 | 0x8fa30028, 0x240240c1, 0xa4a20008, 0xaca30018, 0x93a4001a, 0x24020002, | ||
1852 | 0xa0a2000b, 0xa0a4000a, 0x97a20020, 0xa4a20010, 0x93a30022, 0xa0a30012, | ||
1853 | 0x93a20023, 0xa0a20013, 0x8fa30024, 0xaca30014, 0x8fa20034, 0xaca20024, | ||
1854 | 0x8fa30038, 0xaca30028, 0x8fa2003c, 0x3c031000, 0xaca2002c, 0xaf4301b8, | ||
1855 | 0x00c01021, 0x8fbf006c, 0x8fbe0068, 0x8fb70064, 0x8fb60060, 0x8fb5005c, | ||
1856 | 0x8fb40058, 0x8fb30054, 0x8fb20050, 0x8fb1004c, 0x8fb00048, 0x03e00008, | ||
1857 | 0x27bd0070, 0x8f470140, 0x8f460148, 0x3c028000, 0x00c24024, 0x00062c02, | ||
1858 | 0x30a300ff, 0x24020019, 0x106200e7, 0x27440180, 0x2862001a, 0x1040001f, | ||
1859 | 0x24020008, 0x106200be, 0x28620009, 0x1040000d, 0x24020001, 0x10620046, | ||
1860 | 0x28620002, 0x50400005, 0x24020006, 0x1060002e, 0x00a01821, 0x0a00155e, | ||
1861 | 0x00000000, 0x1062005b, 0x00a01821, 0x0a00155e, 0x00000000, 0x2402000b, | ||
1862 | 0x10620084, 0x2862000c, 0x10400005, 0x24020009, 0x106200bc, 0x00061c02, | ||
1863 | 0x0a00155e, 0x00000000, 0x2402000e, 0x106200b7, 0x00061c02, 0x0a00155e, | ||
1864 | 0x00000000, 0x28620021, 0x10400009, 0x2862001f, 0x104000c1, 0x2402001b, | ||
1865 | 0x106200bf, 0x2402001c, 0x1062009a, 0x00061c02, 0x0a00155e, 0x00000000, | ||
1866 | 0x240200c2, 0x106200ca, 0x286200c3, 0x10400005, 0x24020080, 0x1062005a, | ||
1867 | 0x00a01821, 0x0a00155e, 0x00000000, 0x240200c9, 0x106200cd, 0x30c5ffff, | ||
1868 | 0x0a00155e, 0x00000000, 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, | ||
1869 | 0x24020001, 0xa4830008, 0x24030002, 0xac870000, 0xac800004, 0xa082000a, | ||
1870 | 0xa083000b, 0xa4860010, 0x8f430144, 0x3c021000, 0xac800028, 0xac830024, | ||
1871 | 0x3c036000, 0xaf4201b8, 0x03e00008, 0xac600808, 0x11000009, 0x00a01821, | ||
1872 | 0x3c020800, 0x24030002, 0xa0436c88, 0x24426c88, 0xac470008, 0x8f430144, | ||
1873 | 0x03e00008, 0xac430004, 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, | ||
1874 | 0x24020002, 0xac800000, 0xac870004, 0xa4830008, 0xa082000a, 0xa082000b, | ||
1875 | 0xa4860010, 0xac800024, 0x8f420144, 0x3c031000, 0xac820028, 0x3c026000, | ||
1876 | 0xaf4301b8, 0x03e00008, 0xac400808, 0x3c080800, 0x3c058000, 0x8f4201b8, | ||
1877 | 0x00451024, 0x1440fffd, 0x00000000, 0xac870000, 0x91026c88, 0x00002821, | ||
1878 | 0x10400002, 0x25076c88, 0x8ce50008, 0xac850004, 0xa4830008, 0x91036c88, | ||
1879 | 0x24020002, 0xa082000b, 0xa4860010, 0x34630001, 0xa083000a, 0x8f420144, | ||
1880 | 0xac820024, 0x91036c88, 0x10600002, 0x00001021, 0x8ce20004, 0xac820028, | ||
1881 | 0x3c021000, 0xaf4201b8, 0x3c026000, 0xa1006c88, 0x03e00008, 0xac400808, | ||
1882 | 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, 0x24020002, 0xa082000b, | ||
1883 | 0xa4830008, 0xa4860010, 0x8f420144, 0x3c031000, 0xa4820012, 0x03e00008, | ||
1884 | 0xaf4301b8, 0x30c2ffff, 0x14400028, 0x00061c02, 0x93620005, 0x30420004, | ||
1885 | 0x14400020, 0x3c029000, 0x34420001, 0x00e21025, 0xaf420020, 0x3c038000, | ||
1886 | 0x8f420020, 0x00431024, 0x1440fffd, 0x00000000, 0x93620005, 0x3c038000, | ||
1887 | 0x34630001, 0x00e31825, 0x34420004, 0xa3620005, 0xaf430020, 0x93620005, | ||
1888 | 0x30420004, 0x14400003, 0x3c038000, 0x0000000d, 0x3c038000, 0x8f4201b8, | ||
1889 | 0x00431024, 0x1440fffd, 0x24020005, 0x3c031000, 0xac870000, 0xa082000b, | ||
1890 | 0xaf4301b8, 0x0a00150d, 0x00061c02, 0x0000000d, 0x03e00008, 0x00000000, | ||
1891 | 0x00061c02, 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, 0x24020001, | ||
1892 | 0xa4830008, 0x24030002, 0xac870000, 0xac800004, 0xa082000a, 0xa083000b, | ||
1893 | 0xa4860010, 0x8f430144, 0x3c021000, 0xac800028, 0xac830024, 0x03e00008, | ||
1894 | 0xaf4201b8, 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, 0x24020002, | ||
1895 | 0xac800000, 0xac870004, 0xa4830008, 0xa082000a, 0xa082000b, 0xa4860010, | ||
1896 | 0xac800024, 0x8f420144, 0x3c031000, 0xac820028, 0x03e00008, 0xaf4301b8, | ||
1897 | 0x00061c02, 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, 0x24020001, | ||
1898 | 0xa4830008, 0x24030002, 0xa082000a, 0x3c021000, 0xac870000, 0xac800004, | ||
1899 | 0xa083000b, 0xa4860010, 0xac800024, 0xac800028, 0x03e00008, 0xaf4201b8, | ||
1900 | 0x00a01821, 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, 0x24020002, | ||
1901 | 0xac870000, 0xac800004, 0xa4830008, 0xa080000a, 0x0a001518, 0xa082000b, | ||
1902 | 0x8f440144, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020002, | ||
1903 | 0x240340c9, 0xaf470180, 0xa342018b, 0x3c021000, 0xa7430188, 0xaf4401a4, | ||
1904 | 0xaf4501a8, 0xaf4001ac, 0x03e00008, 0xaf4201b8, 0x0000000d, 0x03e00008, | ||
1905 | 0x00000000, 0x03e00008, 0x00000000, 0x8f420100, 0x3042003e, 0x14400011, | ||
1906 | 0x24020001, 0xaf400048, 0x8f420100, 0x304207c0, 0x10400005, 0x00000000, | ||
1907 | 0xaf40004c, 0xaf400050, 0x03e00008, 0x24020001, 0xaf400054, 0xaf400040, | ||
1908 | 0x8f420100, 0x30423800, 0x54400001, 0xaf400044, 0x24020001, 0x03e00008, | ||
1909 | 0x00000000, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020002, | ||
1910 | 0x240340c9, 0xaf440180, 0xa342018b, 0x3c021000, 0xa7430188, 0xaf4501a4, | ||
1911 | 0xaf4601a8, 0xaf4701ac, 0x03e00008, 0xaf4201b8, 0x3c029000, 0x34420001, | ||
1912 | 0x00822025, 0xaf440020, 0x3c038000, 0x8f420020, 0x00431024, 0x1440fffd, | ||
1913 | 0x00000000, 0x03e00008, 0x00000000, 0x3c028000, 0x34420001, 0x00822025, | ||
1914 | 0x03e00008, 0xaf440020, 0x308600ff, 0x27450180, 0x3c038000, 0x8f4201b8, | ||
1734 | 0x00431024, 0x1440fffd, 0x00000000, 0x8f420128, 0xaca20000, 0x8f640040, | 1915 | 0x00431024, 0x1440fffd, 0x00000000, 0x8f420128, 0xaca20000, 0x8f640040, |
1735 | 0x24030008, 0x240240c1, 0xa4a20008, 0x24020002, 0xa0a2000b, 0x3c021000, | 1916 | 0x24030008, 0x240240c1, 0xa4a20008, 0x24020002, 0xa0a2000b, 0x3c021000, |
1736 | 0x0a001181, 0xa0a3000a, 0x8f420104, 0x3c030040, 0x00431024, 0x1040001d, | 1917 | 0xa0a6000a, 0xa4a30010, 0xa0a00012, 0xa0a00013, 0xaca00014, 0xaca00024, |
1737 | 0x3c038000, 0x27450180, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, | 1918 | 0xaca00028, 0xaca0002c, 0xaca40018, 0x03e00008, 0xaf4201b8, 0x24020001, |
1738 | 0x8f420128, 0xaca20000, 0x8f640040, 0x24030010, 0x240240c1, 0xa4a20008, | 1919 | 0xacc40000, 0x03e00008, 0xa4e50000, 0x24020001, 0xaf400044, 0x03e00008, |
1739 | 0x24020002, 0xa0a3000a, 0x24030008, 0xa0a2000b, 0x3c021000, 0xa4a30010, | 1920 | 0xaf400050, 0x00803021, 0x27450180, 0x3c038000, 0x8f4201b8, 0x00431024, |
1740 | 0xa0a00012, 0xa0a00013, 0xaca00014, 0xaca00024, 0xaca00028, 0xaca0002c, | 1921 | 0x1440fffd, 0x00000000, 0x8f420128, 0xaca20000, 0x8cc30018, 0x240240c1, |
1741 | 0xaca40018, 0x0e001548, 0xaf4201b8, 0x0a0013a5, 0x8fbf0048, 0x8f820000, | 1922 | 0xa4a20008, 0xaca30018, 0x90c4000a, 0x24020002, 0xa0a2000b, 0xa0a4000a, |
1742 | 0x10400016, 0x00000000, 0x8f420104, 0x3c030001, 0x00431024, 0x10400011, | 1923 | 0x94c20010, 0xa4a20010, 0x90c30012, 0xa0a30012, 0x90c20013, 0xa0a20013, |
1743 | 0x00000000, 0x8ca3000c, 0x8f620030, 0x1462020c, 0x24020001, 0x8ca30010, | 1924 | 0x8cc30014, 0xaca30014, 0x8cc20024, 0xaca20024, 0x8cc30028, 0xaca30028, |
1744 | 0x8f62002c, 0x14620208, 0x24020001, 0x9763003a, 0x95620000, 0x14430204, | 1925 | 0x8cc2002c, 0x3c031000, 0xaca2002c, 0x24020001, 0xaf4301b8, 0xaf400044, |
1745 | 0x24020001, 0x97630038, 0x95620002, 0x14430200, 0x24020001, 0xaf400048, | 1926 | 0x03e00008, 0xaf400050, 0x27bdffe8, 0xafbf0010, 0x0e001047, 0x00000000, |
1746 | 0xaf400054, 0xaf400040, 0x8f690040, 0x8f6a0048, 0x01497023, 0x05c10004, | 1927 | 0x00002021, 0x0e000c78, 0xaf400180, 0x8fbf0010, 0x03e00008, 0x27bd0018, |
1747 | 0x00000000, 0x0000000d, 0x00000000, 0x24000169, 0x9742011a, 0x3046ffff, | 1928 | 0x8f460148, 0x27450180, 0x3c038000, 0x00061402, 0x304700ff, 0x8f4201b8, |
1748 | 0x10c00004, 0x8d680004, 0x01061021, 0x0a0011b8, 0x2445ffff, 0x01002821, | 1929 | 0x00431024, 0x1440fffd, 0x00000000, 0x8f440140, 0x00061202, 0x304200ff, |
1749 | 0x916c000d, 0xa7a00020, 0xa3a0001a, 0xafa00028, 0x9362003f, 0x31830004, | 1930 | 0x00061c02, 0xaca20004, 0x24020002, 0xa4a30008, 0x30c300ff, 0xa0a2000b, |
1750 | 0x1060003a, 0x304700ff, 0x24040012, 0x14e40006, 0x24020001, 0x3c040800, | 1931 | 0xaca30024, 0x10e0000a, 0xaca40000, 0x28e20004, 0x14400005, 0x24020001, |
1751 | 0x8c830028, 0x24630001, 0x0a00128d, 0xac830028, 0x8f620044, 0x15020010, | 1932 | 0x24020005, 0x54e20005, 0xa0a0000a, 0x24020001, 0x0a001609, 0xa0a2000a, |
1752 | 0x27a60010, 0x27450180, 0x3c038000, 0x2402001a, 0xa7a20020, 0x24020020, | 1933 | 0xa0a0000a, 0x3c021000, 0x03e00008, 0xaf4201b8, 0x03e00008, 0x00001021, |
1753 | 0xafa90028, 0xa3a70022, 0xa3a40023, 0xa3a2001a, 0x8f4201b8, 0x00431024, | 1934 | 0x10c00007, 0x00000000, 0x8ca20000, 0x24c6ffff, 0x24a50004, 0xac820000, |
1754 | 0x1440fffd, 0x00000000, 0x0a001272, 0x00000000, 0x8f620044, 0x01021023, | 1935 | 0x14c0fffb, 0x24840004, 0x03e00008, 0x00000000, 0x0a00161f, 0x00a01021, |
1755 | 0x0440001a, 0x010a1023, 0x044100ae, 0x24020001, 0x3c020800, 0x8c4300d8, | 1936 | 0xac860000, 0x00000000, 0x00000000, 0x24840004, 0x00a01021, 0x1440fffa, |
1756 | 0x10600004, 0x24020001, 0xa7a20020, 0x0a0011ee, 0xafa90028, 0x2402001a, | 1937 | 0x24a5ffff, 0x03e00008, 0x00000000, 0x00000000 }; |
1757 | 0xa7a20020, 0x24020020, 0xafa90028, 0xa3a70022, 0xa3a40023, 0xa3a2001a, | ||
1758 | 0x27a60010, 0x27450180, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, | ||
1759 | 0x00000000, 0x0a001272, 0x00000000, 0x0a00128d, 0x24020001, 0x01286823, | ||
1760 | 0x19a00016, 0x00cd102a, 0x54400007, 0x318c00fe, 0x55a6000f, 0x010d4021, | ||
1761 | 0x31820001, 0x5440000c, 0x010d4021, 0x318c00fe, 0x00c06821, 0x3c040800, | ||
1762 | 0x8c8300c8, 0x00003021, 0x24020001, 0xa7a20020, 0xafa90028, 0x24630001, | ||
1763 | 0x0a001212, 0xac8300c8, 0x00cd1023, 0x0a001212, 0x3046ffff, 0x00006821, | ||
1764 | 0x2542ffff, 0x00a21823, 0x1860001e, 0x0066102a, 0x14400018, 0x01402821, | ||
1765 | 0x97a20020, 0x3c040800, 0x8c8300cc, 0xafa90028, 0x34420001, 0x24630001, | ||
1766 | 0xa7a20020, 0x01091026, 0x2c420001, 0xac8300cc, 0x2dc30001, 0x00431024, | ||
1767 | 0x1440000a, 0x00c01821, 0x27a60010, 0x27450180, 0x3c038000, 0x8f4201b8, | ||
1768 | 0x00431024, 0x1440fffd, 0x00000000, 0x0a001272, 0x00000000, 0x00c31023, | ||
1769 | 0x3046ffff, 0x0a00123d, 0x318c00f6, 0x01091023, 0x18400008, 0x97a20020, | ||
1770 | 0x3c040800, 0x8c8300d4, 0xafa80028, 0x34420400, 0x24630001, 0xa7a20020, | ||
1771 | 0xac8300d4, 0x31820002, 0x1040001c, 0x31820010, 0x8f620044, 0x1502000d, | ||
1772 | 0x27a60010, 0x97a20020, 0x27450180, 0x3c038000, 0xafa90028, 0x34420001, | ||
1773 | 0xa7a20020, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x0a001272, | ||
1774 | 0x00000000, 0x97a20020, 0x27450180, 0x3c038000, 0xafa90028, 0x34420001, | ||
1775 | 0xa7a20020, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x0a001272, | ||
1776 | 0x00000000, 0x54400003, 0x8d6a0008, 0x0a00128d, 0x24020001, 0x8f630054, | ||
1777 | 0x2542ffff, 0x00431023, 0x1840002e, 0x97a20020, 0x27a60010, 0x3c040800, | ||
1778 | 0x8c8300d0, 0x27450180, 0x3c078000, 0xafa90028, 0x34420001, 0x24630001, | ||
1779 | 0xa7a20020, 0xac8300d0, 0x8f4201b8, 0x00471024, 0x1440fffd, 0x00000000, | ||
1780 | 0x8f420128, 0xaca20000, 0x8cc30018, 0x240240c1, 0xa4a20008, 0xaca30018, | ||
1781 | 0x90c4000a, 0x24020002, 0xa0a2000b, 0xa0a4000a, 0x94c20010, 0xa4a20010, | ||
1782 | 0x90c30012, 0xa0a30012, 0x90c20013, 0xa0a20013, 0x8cc30014, 0xaca30014, | ||
1783 | 0x8cc20024, 0xaca20024, 0x8cc30028, 0xaca30028, 0x8cc4002c, 0x24020001, | ||
1784 | 0x3c031000, 0xaca4002c, 0xaf4301b8, 0xaf400044, 0xaf400050, 0x0a0013a5, | ||
1785 | 0x8fbf0048, 0x31820020, 0x10400011, 0x00000000, 0x95620012, 0x0046102b, | ||
1786 | 0x10400008, 0x97a20020, 0x95660012, 0x10c00003, 0x01061021, 0x0a00129e, | ||
1787 | 0x2445ffff, 0x01002821, 0x97a20020, 0x93a3001a, 0x34420008, 0x34630004, | ||
1788 | 0xa7a20020, 0xa3a3001a, 0x8f420104, 0x38e3000a, 0x2c630001, 0x38e2000c, | ||
1789 | 0x2c420001, 0x00621825, 0x14600003, 0x2402000e, 0x54e2002a, 0x00003021, | ||
1790 | 0x50c00008, 0x9564000e, 0x10c00004, 0xa7a60040, 0x01061021, 0x0a0012b6, | ||
1791 | 0x2445ffff, 0x01002821, 0x9564000e, 0x93630035, 0x8f62004c, 0x00642004, | ||
1792 | 0x008a2021, 0x00821023, 0x1840001d, 0x00000000, 0x8f620018, 0x01021023, | ||
1793 | 0x1c40000f, 0x97a20020, 0x8f620018, 0x15020016, 0x00000000, 0x8f62001c, | ||
1794 | 0x01421023, 0x1c400008, 0x97a20020, 0x8f62001c, 0x1542000f, 0x00000000, | ||
1795 | 0x8f620058, 0x00821023, 0x1840000b, 0x97a20020, 0xafa50028, 0xafa80034, | ||
1796 | 0xafaa0038, 0xafa4003c, 0x34420020, 0x0a0012da, 0xa7a20020, 0x01204021, | ||
1797 | 0x01002821, 0x8f640058, 0x8f62004c, 0x01421023, 0x18400009, 0x00000000, | ||
1798 | 0x8f620054, 0x01421023, 0x1c400005, 0x97a20020, 0xafa50028, 0xafaa0024, | ||
1799 | 0x0a0012f2, 0x34420040, 0x9742011a, 0x1440000c, 0x24020014, 0x8f620058, | ||
1800 | 0x14820009, 0x24020014, 0x8f63004c, 0x8f620054, 0x10620004, 0x97a20020, | ||
1801 | 0xafa50028, 0x34420080, 0xa7a20020, 0x24020014, 0x10e2000a, 0x28e20015, | ||
1802 | 0x10400005, 0x2402000c, 0x10e20006, 0x31820001, 0x0a001333, 0x00000000, | ||
1803 | 0x24020016, 0x14e20035, 0x31820001, 0x8f620084, 0x24420001, 0x15420031, | ||
1804 | 0x31820001, 0x24020014, 0x10e20021, 0x28e20015, 0x10400005, 0x2402000c, | ||
1805 | 0x10e20008, 0x31820001, 0x0a001333, 0x00000000, 0x24020016, 0x10e2000c, | ||
1806 | 0x31820001, 0x0a001333, 0x00000000, 0x97a30020, 0x2402000e, 0xafa50028, | ||
1807 | 0xa3a70022, 0xa3a20023, 0xafaa0024, 0x34630054, 0x0a001332, 0xa7a30020, | ||
1808 | 0x97a20020, 0x93a4001a, 0x24030010, 0xafa50028, 0xa3a70022, 0xa3a30023, | ||
1809 | 0xafaa0024, 0x3442005d, 0x34840002, 0xa7a20020, 0x0a001332, 0xa3a4001a, | ||
1810 | 0x97a20020, 0x24030012, 0xa3a30023, 0x93a3001a, 0xafa50028, 0xa3a70022, | ||
1811 | 0xafaa0024, 0x3042fffe, 0x3442005c, 0x34630002, 0xa7a20020, 0xa3a3001a, | ||
1812 | 0x31820001, 0x10400030, 0x2402000c, 0x10e20013, 0x28e2000d, 0x10400005, | ||
1813 | 0x2402000a, 0x10e20008, 0x97a20020, 0x0a001365, 0x31820009, 0x2402000e, | ||
1814 | 0x10e2001b, 0x31820009, 0x0a001366, 0x0002102b, 0x93a4001a, 0x24030008, | ||
1815 | 0xafa50028, 0xa3a70022, 0xa3a30023, 0x0a001361, 0x34420013, 0x97a30020, | ||
1816 | 0x30620004, 0x14400005, 0x93a2001a, 0x3463001b, 0xa7a30020, 0x0a001354, | ||
1817 | 0x24030016, 0x3463001b, 0xa7a30020, 0x24030010, 0xafa50028, 0xa3a70022, | ||
1818 | 0xa3a30023, 0x34420002, 0x0a001364, 0xa3a2001a, 0x97a20020, 0x93a4001a, | ||
1819 | 0x24030010, 0xafa50028, 0xa3a70022, 0xa3a30023, 0x3442001b, 0x34840002, | ||
1820 | 0xa7a20020, 0xa3a4001a, 0x31820009, 0x0002102b, 0x00021023, 0x30420007, | ||
1821 | 0x10c00017, 0x34440003, 0x8f820014, 0x24030800, 0x27450180, 0x24420001, | ||
1822 | 0xaf820014, 0x24020004, 0xaf4301b8, 0xa4a40008, 0xa0a2000b, 0x93440120, | ||
1823 | 0x3c031000, 0xa4a6000e, 0xacaa0024, 0xaca80028, 0x008d2021, 0xa4a4000c, | ||
1824 | 0xaf4301b8, 0x97a20020, 0x00003021, 0x3042ffbf, 0x0a001381, 0xa7a20020, | ||
1825 | 0x24060001, 0x97a20020, 0x10400020, 0x27450180, 0x3c038000, 0x8f4201b8, | ||
1826 | 0x00431024, 0x1440fffd, 0x00000000, 0x8f420128, 0xaca20000, 0x8fa30028, | ||
1827 | 0x240240c1, 0xa4a20008, 0xaca30018, 0x93a4001a, 0x24020002, 0xa0a2000b, | ||
1828 | 0xa0a4000a, 0x97a20020, 0xa4a20010, 0x93a30022, 0xa0a30012, 0x93a20023, | ||
1829 | 0xa0a20013, 0x8fa30024, 0xaca30014, 0x8fa20034, 0xaca20024, 0x8fa30038, | ||
1830 | 0xaca30028, 0x8fa2003c, 0x3c031000, 0xaca2002c, 0xaf4301b8, 0x00c01021, | ||
1831 | 0x8fbf0048, 0x03e00008, 0x27bd0050, 0x8f470140, 0x8f460148, 0x3c028000, | ||
1832 | 0x00c24024, 0x00062c02, 0x30a300ff, 0x24020019, 0x106200e7, 0x27440180, | ||
1833 | 0x2862001a, 0x1040001f, 0x24020008, 0x106200be, 0x28620009, 0x1040000d, | ||
1834 | 0x24020001, 0x10620046, 0x28620002, 0x50400005, 0x24020006, 0x1060002e, | ||
1835 | 0x00a01821, 0x0a0014c4, 0x00000000, 0x1062005b, 0x00a01821, 0x0a0014c4, | ||
1836 | 0x00000000, 0x2402000b, 0x10620084, 0x2862000c, 0x10400005, 0x24020009, | ||
1837 | 0x106200bc, 0x00061c02, 0x0a0014c4, 0x00000000, 0x2402000e, 0x106200b7, | ||
1838 | 0x00061c02, 0x0a0014c4, 0x00000000, 0x28620021, 0x10400009, 0x2862001f, | ||
1839 | 0x104000c1, 0x2402001b, 0x106200bf, 0x2402001c, 0x1062009a, 0x00061c02, | ||
1840 | 0x0a0014c4, 0x00000000, 0x240200c2, 0x106200ca, 0x286200c3, 0x10400005, | ||
1841 | 0x24020080, 0x1062005a, 0x00a01821, 0x0a0014c4, 0x00000000, 0x240200c9, | ||
1842 | 0x106200cd, 0x30c5ffff, 0x0a0014c4, 0x00000000, 0x3c058000, 0x8f4201b8, | ||
1843 | 0x00451024, 0x1440fffd, 0x24020001, 0xa4830008, 0x24030002, 0xac870000, | ||
1844 | 0xac800004, 0xa082000a, 0xa083000b, 0xa4860010, 0x8f430144, 0x3c021000, | ||
1845 | 0xac800028, 0xac830024, 0x3c036000, 0xaf4201b8, 0x03e00008, 0xac600808, | ||
1846 | 0x11000009, 0x00a01821, 0x3c020800, 0x24030002, 0xa0436a08, 0x24426a08, | ||
1847 | 0xac470008, 0x8f430144, 0x03e00008, 0xac430004, 0x3c058000, 0x8f4201b8, | ||
1848 | 0x00451024, 0x1440fffd, 0x24020002, 0xac800000, 0xac870004, 0xa4830008, | ||
1849 | 0xa082000a, 0xa082000b, 0xa4860010, 0xac800024, 0x8f420144, 0x3c031000, | ||
1850 | 0xac820028, 0x3c026000, 0xaf4301b8, 0x03e00008, 0xac400808, 0x3c080800, | ||
1851 | 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, 0x00000000, 0xac870000, | ||
1852 | 0x91026a08, 0x00002821, 0x10400002, 0x25076a08, 0x8ce50008, 0xac850004, | ||
1853 | 0xa4830008, 0x91036a08, 0x24020002, 0xa082000b, 0xa4860010, 0x34630001, | ||
1854 | 0xa083000a, 0x8f420144, 0xac820024, 0x91036a08, 0x10600002, 0x00001021, | ||
1855 | 0x8ce20004, 0xac820028, 0x3c021000, 0xaf4201b8, 0x3c026000, 0xa1006a08, | ||
1856 | 0x03e00008, 0xac400808, 0x3c058000, 0x8f4201b8, 0x00451024, 0x1440fffd, | ||
1857 | 0x24020002, 0xa082000b, 0xa4830008, 0xa4860010, 0x8f420144, 0x3c031000, | ||
1858 | 0xa4820012, 0x03e00008, 0xaf4301b8, 0x30c2ffff, 0x14400028, 0x00061c02, | ||
1859 | 0x93620005, 0x30420004, 0x14400020, 0x3c029000, 0x34420001, 0x00e21025, | ||
1860 | 0xaf420020, 0x3c038000, 0x8f420020, 0x00431024, 0x1440fffd, 0x00000000, | ||
1861 | 0x93620005, 0x3c038000, 0x34630001, 0x00e31825, 0x34420004, 0xa3620005, | ||
1862 | 0xaf430020, 0x93620005, 0x30420004, 0x14400003, 0x3c038000, 0x0000000d, | ||
1863 | 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x24020005, 0x3c031000, | ||
1864 | 0xac870000, 0xa082000b, 0xaf4301b8, 0x0a001473, 0x00061c02, 0x0000000d, | ||
1865 | 0x03e00008, 0x00000000, 0x00061c02, 0x3c058000, 0x8f4201b8, 0x00451024, | ||
1866 | 0x1440fffd, 0x24020001, 0xa4830008, 0x24030002, 0xac870000, 0xac800004, | ||
1867 | 0xa082000a, 0xa083000b, 0xa4860010, 0x8f430144, 0x3c021000, 0xac800028, | ||
1868 | 0xac830024, 0x03e00008, 0xaf4201b8, 0x3c058000, 0x8f4201b8, 0x00451024, | ||
1869 | 0x1440fffd, 0x24020002, 0xac800000, 0xac870004, 0xa4830008, 0xa082000a, | ||
1870 | 0xa082000b, 0xa4860010, 0xac800024, 0x8f420144, 0x3c031000, 0xac820028, | ||
1871 | 0x03e00008, 0xaf4301b8, 0x00061c02, 0x3c058000, 0x8f4201b8, 0x00451024, | ||
1872 | 0x1440fffd, 0x24020001, 0xa4830008, 0x24030002, 0xa082000a, 0x3c021000, | ||
1873 | 0xac870000, 0xac800004, 0xa083000b, 0xa4860010, 0xac800024, 0xac800028, | ||
1874 | 0x03e00008, 0xaf4201b8, 0x00a01821, 0x3c058000, 0x8f4201b8, 0x00451024, | ||
1875 | 0x1440fffd, 0x24020002, 0xac870000, 0xac800004, 0xa4830008, 0xa080000a, | ||
1876 | 0x0a00147e, 0xa082000b, 0x8f440144, 0x3c038000, 0x8f4201b8, 0x00431024, | ||
1877 | 0x1440fffd, 0x24020002, 0x240340c9, 0xaf470180, 0xa342018b, 0x3c021000, | ||
1878 | 0xa7430188, 0xaf4401a4, 0xaf4501a8, 0xaf4001ac, 0x03e00008, 0xaf4201b8, | ||
1879 | 0x0000000d, 0x03e00008, 0x00000000, 0x03e00008, 0x00000000, 0x8f420100, | ||
1880 | 0x3042003e, 0x14400011, 0x24020001, 0xaf400048, 0x8f420100, 0x304207c0, | ||
1881 | 0x10400005, 0x00000000, 0xaf40004c, 0xaf400050, 0x03e00008, 0x24020001, | ||
1882 | 0xaf400054, 0xaf400040, 0x8f420100, 0x30423800, 0x54400001, 0xaf400044, | ||
1883 | 0x24020001, 0x03e00008, 0x00000000, 0x3c038000, 0x8f4201b8, 0x00431024, | ||
1884 | 0x1440fffd, 0x24020002, 0x240340c9, 0xaf440180, 0xa342018b, 0x3c021000, | ||
1885 | 0xa7430188, 0xaf4501a4, 0xaf4601a8, 0xaf4701ac, 0x03e00008, 0xaf4201b8, | ||
1886 | 0x3c029000, 0x34420001, 0x00822025, 0xaf440020, 0x3c038000, 0x8f420020, | ||
1887 | 0x00431024, 0x1440fffd, 0x00000000, 0x03e00008, 0x00000000, 0x3c028000, | ||
1888 | 0x34420001, 0x00822025, 0x03e00008, 0xaf440020, 0x308600ff, 0x27450180, | ||
1889 | 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, 0x8f420128, | ||
1890 | 0xaca20000, 0x8f640040, 0x24030008, 0x240240c1, 0xa4a20008, 0x24020002, | ||
1891 | 0xa0a2000b, 0x3c021000, 0xa0a6000a, 0xa4a30010, 0xa0a00012, 0xa0a00013, | ||
1892 | 0xaca00014, 0xaca00024, 0xaca00028, 0xaca0002c, 0xaca40018, 0x03e00008, | ||
1893 | 0xaf4201b8, 0x24020001, 0xacc40000, 0x03e00008, 0xa4e50000, 0x03e00008, | ||
1894 | 0x24020001, 0x24020001, 0xaf400044, 0x03e00008, 0xaf400050, 0x00803021, | ||
1895 | 0x27450180, 0x3c038000, 0x8f4201b8, 0x00431024, 0x1440fffd, 0x00000000, | ||
1896 | 0x8f420128, 0xaca20000, 0x8cc30018, 0x240240c1, 0xa4a20008, 0xaca30018, | ||
1897 | 0x90c4000a, 0x24020002, 0xa0a2000b, 0xa0a4000a, 0x94c20010, 0xa4a20010, | ||
1898 | 0x90c30012, 0xa0a30012, 0x90c20013, 0xa0a20013, 0x8cc30014, 0xaca30014, | ||
1899 | 0x8cc20024, 0xaca20024, 0x8cc30028, 0xaca30028, 0x8cc2002c, 0x3c031000, | ||
1900 | 0xaca2002c, 0x24020001, 0xaf4301b8, 0xaf400044, 0x03e00008, 0xaf400050, | ||
1901 | 0x27bdffe8, 0xafbf0010, 0x0e001032, 0x00000000, 0x00002021, 0x0e000c99, | ||
1902 | 0xaf400180, 0x8fbf0010, 0x03e00008, 0x27bd0018, 0x8f460148, 0x27450180, | ||
1903 | 0x3c038000, 0x00061402, 0x304700ff, 0x8f4201b8, 0x00431024, 0x1440fffd, | ||
1904 | 0x00000000, 0x8f440140, 0x00061202, 0x304200ff, 0x00061c02, 0xaca20004, | ||
1905 | 0x24020002, 0xa4a30008, 0x30c300ff, 0xa0a2000b, 0xaca30024, 0x10e0000a, | ||
1906 | 0xaca40000, 0x28e20004, 0x14400005, 0x24020001, 0x24020005, 0x54e20005, | ||
1907 | 0xa0a0000a, 0x24020001, 0x0a001571, 0xa0a2000a, 0xa0a0000a, 0x3c021000, | ||
1908 | 0x03e00008, 0xaf4201b8, 0x03e00008, 0x00001021, 0x10c00007, 0x00000000, | ||
1909 | 0x8ca20000, 0x24c6ffff, 0x24a50004, 0xac820000, 0x14c0fffb, 0x24840004, | ||
1910 | 0x03e00008, 0x00000000, 0x0a001587, 0x00a01021, 0xac860000, 0x00000000, | ||
1911 | 0x00000000, 0x24840004, 0x00a01021, 0x1440fffa, 0x24a5ffff, 0x03e00008, | ||
1912 | 0x00000000, 0x00000000 }; | ||
1913 | 1938 | ||
1914 | static u32 bnx2_RXP_b06FwData[(0x0/4) + 1] = { 0x0 }; | 1939 | static u32 bnx2_RXP_b06FwData[(0x0/4) + 1] = { 0x0 }; |
1915 | static u32 bnx2_RXP_b06FwRodata[(0x0/4) + 1] = { 0x0 }; | 1940 | static u32 bnx2_RXP_b06FwRodata[(0x28/4) + 1] = { |
1916 | static u32 bnx2_RXP_b06FwBss[(0x1394/4) + 1] = { 0x0 }; | 1941 | 0x0800468c, 0x0800458c, 0x08004630, 0x08004648, 0x08004660, 0x08004680, |
1917 | static u32 bnx2_RXP_b06FwSbss[(0x18/4) + 1] = { 0x0 }; | 1942 | 0x0800468c, 0x0800468c, 0x08004594, 0x00000000, 0x00000000 }; |
1943 | static u32 bnx2_RXP_b06FwBss[(0x13a4/4) + 1] = { 0x0 }; | ||
1944 | static u32 bnx2_RXP_b06FwSbss[(0x1c/4) + 1] = { 0x0 }; | ||
1918 | 1945 | ||
1919 | static u32 bnx2_rv2p_proc1[] = { | 1946 | static u32 bnx2_rv2p_proc1[] = { |
1920 | 0x00000008, 0xac000001, 0x0000000c, 0x2f800001, 0x00000010, 0x213f0004, | 1947 | 0x00000008, 0xac000001, 0x0000000c, 0x2f800001, 0x00000010, 0x213f0004, |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 2582d98ef5c3..e0f51afec778 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -576,7 +576,7 @@ static int bond_update_speed_duplex(struct slave *slave) | |||
576 | slave->duplex = DUPLEX_FULL; | 576 | slave->duplex = DUPLEX_FULL; |
577 | 577 | ||
578 | if (slave_dev->ethtool_ops) { | 578 | if (slave_dev->ethtool_ops) { |
579 | u32 res; | 579 | int res; |
580 | 580 | ||
581 | if (!slave_dev->ethtool_ops->get_settings) { | 581 | if (!slave_dev->ethtool_ops->get_settings) { |
582 | return -1; | 582 | return -1; |
@@ -1145,7 +1145,8 @@ int bond_sethwaddr(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1145 | } | 1145 | } |
1146 | 1146 | ||
1147 | #define BOND_INTERSECT_FEATURES \ | 1147 | #define BOND_INTERSECT_FEATURES \ |
1148 | (NETIF_F_SG|NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM) | 1148 | (NETIF_F_SG|NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM|\ |
1149 | NETIF_F_TSO|NETIF_F_UFO) | ||
1149 | 1150 | ||
1150 | /* | 1151 | /* |
1151 | * Compute the common dev->feature set available to all slaves. Some | 1152 | * Compute the common dev->feature set available to all slaves. Some |
@@ -1168,6 +1169,16 @@ static int bond_compute_features(struct bonding *bond) | |||
1168 | NETIF_F_HW_CSUM))) | 1169 | NETIF_F_HW_CSUM))) |
1169 | features &= ~NETIF_F_SG; | 1170 | features &= ~NETIF_F_SG; |
1170 | 1171 | ||
1172 | /* | ||
1173 | * features will include NETIF_F_TSO (NETIF_F_UFO) iff all | ||
1174 | * slave devices support NETIF_F_TSO (NETIF_F_UFO), which | ||
1175 | * implies that all slaves also support scatter-gather | ||
1176 | * (NETIF_F_SG), which implies that features also includes | ||
1177 | * NETIF_F_SG. So no need to check whether we have an | ||
1178 | * illegal combination of NETIF_F_{TSO,UFO} and | ||
1179 | * !NETIF_F_SG | ||
1180 | */ | ||
1181 | |||
1171 | features |= (bond_dev->features & ~BOND_INTERSECT_FEATURES); | 1182 | features |= (bond_dev->features & ~BOND_INTERSECT_FEATURES); |
1172 | bond_dev->features = features; | 1183 | bond_dev->features = features; |
1173 | 1184 | ||
@@ -4080,6 +4091,8 @@ static void bond_ethtool_get_drvinfo(struct net_device *bond_dev, | |||
4080 | 4091 | ||
4081 | static struct ethtool_ops bond_ethtool_ops = { | 4092 | static struct ethtool_ops bond_ethtool_ops = { |
4082 | .get_tx_csum = ethtool_op_get_tx_csum, | 4093 | .get_tx_csum = ethtool_op_get_tx_csum, |
4094 | .get_tso = ethtool_op_get_tso, | ||
4095 | .get_ufo = ethtool_op_get_ufo, | ||
4083 | .get_sg = ethtool_op_get_sg, | 4096 | .get_sg = ethtool_op_get_sg, |
4084 | .get_drvinfo = bond_ethtool_get_drvinfo, | 4097 | .get_drvinfo = bond_ethtool_get_drvinfo, |
4085 | }; | 4098 | }; |
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index 32d13da43a0b..041bcc583557 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c | |||
@@ -260,7 +260,7 @@ static ssize_t bonding_store_slaves(struct class_device *cd, const char *buffer, | |||
260 | char *ifname; | 260 | char *ifname; |
261 | int i, res, found, ret = count; | 261 | int i, res, found, ret = count; |
262 | struct slave *slave; | 262 | struct slave *slave; |
263 | struct net_device *dev = 0; | 263 | struct net_device *dev = NULL; |
264 | struct bonding *bond = to_bond(cd); | 264 | struct bonding *bond = to_bond(cd); |
265 | 265 | ||
266 | /* Quick sanity check -- is the bond interface up? */ | 266 | /* Quick sanity check -- is the bond interface up? */ |
@@ -995,7 +995,7 @@ static ssize_t bonding_store_primary(struct class_device *cd, const char *buf, s | |||
995 | printk(KERN_INFO DRV_NAME | 995 | printk(KERN_INFO DRV_NAME |
996 | ": %s: Setting primary slave to None.\n", | 996 | ": %s: Setting primary slave to None.\n", |
997 | bond->dev->name); | 997 | bond->dev->name); |
998 | bond->primary_slave = 0; | 998 | bond->primary_slave = NULL; |
999 | bond_select_active_slave(bond); | 999 | bond_select_active_slave(bond); |
1000 | } else { | 1000 | } else { |
1001 | printk(KERN_INFO DRV_NAME | 1001 | printk(KERN_INFO DRV_NAME |
@@ -1123,7 +1123,7 @@ static ssize_t bonding_store_active_slave(struct class_device *cd, const char *b | |||
1123 | printk(KERN_INFO DRV_NAME | 1123 | printk(KERN_INFO DRV_NAME |
1124 | ": %s: Setting active slave to None.\n", | 1124 | ": %s: Setting active slave to None.\n", |
1125 | bond->dev->name); | 1125 | bond->dev->name); |
1126 | bond->primary_slave = 0; | 1126 | bond->primary_slave = NULL; |
1127 | bond_select_active_slave(bond); | 1127 | bond_select_active_slave(bond); |
1128 | } else { | 1128 | } else { |
1129 | printk(KERN_INFO DRV_NAME | 1129 | printk(KERN_INFO DRV_NAME |
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index bf1fd2b98bf8..24253c807e55 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
@@ -2752,8 +2752,6 @@ static int e100_resume(struct pci_dev *pdev) | |||
2752 | retval = pci_enable_wake(pdev, 0, 0); | 2752 | retval = pci_enable_wake(pdev, 0, 0); |
2753 | if (retval) | 2753 | if (retval) |
2754 | DPRINTK(PROBE,ERR, "Error clearing wake events\n"); | 2754 | DPRINTK(PROBE,ERR, "Error clearing wake events\n"); |
2755 | if(e100_hw_init(nic)) | ||
2756 | DPRINTK(HW, ERR, "e100_hw_init failed\n"); | ||
2757 | 2755 | ||
2758 | netif_device_attach(netdev); | 2756 | netif_device_attach(netdev); |
2759 | if(netif_running(netdev)) | 2757 | if(netif_running(netdev)) |
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 0c18dbd67d3b..0e8e3fcde9ff 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
@@ -199,8 +199,7 @@ static int gfar_probe(struct platform_device *pdev) | |||
199 | 199 | ||
200 | /* get a pointer to the register memory */ | 200 | /* get a pointer to the register memory */ |
201 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 201 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
202 | priv->regs = (struct gfar *) | 202 | priv->regs = ioremap(r->start, sizeof (struct gfar)); |
203 | ioremap(r->start, sizeof (struct gfar)); | ||
204 | 203 | ||
205 | if (NULL == priv->regs) { | 204 | if (NULL == priv->regs) { |
206 | err = -ENOMEM; | 205 | err = -ENOMEM; |
@@ -369,7 +368,7 @@ static int gfar_probe(struct platform_device *pdev) | |||
369 | return 0; | 368 | return 0; |
370 | 369 | ||
371 | register_fail: | 370 | register_fail: |
372 | iounmap((void *) priv->regs); | 371 | iounmap(priv->regs); |
373 | regs_fail: | 372 | regs_fail: |
374 | free_netdev(dev); | 373 | free_netdev(dev); |
375 | return err; | 374 | return err; |
@@ -382,7 +381,7 @@ static int gfar_remove(struct platform_device *pdev) | |||
382 | 381 | ||
383 | platform_set_drvdata(pdev, NULL); | 382 | platform_set_drvdata(pdev, NULL); |
384 | 383 | ||
385 | iounmap((void *) priv->regs); | 384 | iounmap(priv->regs); |
386 | free_netdev(dev); | 385 | free_netdev(dev); |
387 | 386 | ||
388 | return 0; | 387 | return 0; |
@@ -454,8 +453,7 @@ static void init_registers(struct net_device *dev) | |||
454 | 453 | ||
455 | /* Zero out the rmon mib registers if it has them */ | 454 | /* Zero out the rmon mib registers if it has them */ |
456 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { | 455 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { |
457 | memset((void *) &(priv->regs->rmon), 0, | 456 | memset_io(&(priv->regs->rmon), 0, sizeof (struct rmon_mib)); |
458 | sizeof (struct rmon_mib)); | ||
459 | 457 | ||
460 | /* Mask off the CAM interrupts */ | 458 | /* Mask off the CAM interrupts */ |
461 | gfar_write(&priv->regs->rmon.cam1, 0xffffffff); | 459 | gfar_write(&priv->regs->rmon.cam1, 0xffffffff); |
@@ -477,7 +475,7 @@ static void init_registers(struct net_device *dev) | |||
477 | void gfar_halt(struct net_device *dev) | 475 | void gfar_halt(struct net_device *dev) |
478 | { | 476 | { |
479 | struct gfar_private *priv = netdev_priv(dev); | 477 | struct gfar_private *priv = netdev_priv(dev); |
480 | struct gfar *regs = priv->regs; | 478 | struct gfar __iomem *regs = priv->regs; |
481 | u32 tempval; | 479 | u32 tempval; |
482 | 480 | ||
483 | /* Mask all interrupts */ | 481 | /* Mask all interrupts */ |
@@ -507,7 +505,7 @@ void gfar_halt(struct net_device *dev) | |||
507 | void stop_gfar(struct net_device *dev) | 505 | void stop_gfar(struct net_device *dev) |
508 | { | 506 | { |
509 | struct gfar_private *priv = netdev_priv(dev); | 507 | struct gfar_private *priv = netdev_priv(dev); |
510 | struct gfar *regs = priv->regs; | 508 | struct gfar __iomem *regs = priv->regs; |
511 | unsigned long flags; | 509 | unsigned long flags; |
512 | 510 | ||
513 | phy_stop(priv->phydev); | 511 | phy_stop(priv->phydev); |
@@ -590,7 +588,7 @@ static void free_skb_resources(struct gfar_private *priv) | |||
590 | void gfar_start(struct net_device *dev) | 588 | void gfar_start(struct net_device *dev) |
591 | { | 589 | { |
592 | struct gfar_private *priv = netdev_priv(dev); | 590 | struct gfar_private *priv = netdev_priv(dev); |
593 | struct gfar *regs = priv->regs; | 591 | struct gfar __iomem *regs = priv->regs; |
594 | u32 tempval; | 592 | u32 tempval; |
595 | 593 | ||
596 | /* Enable Rx and Tx in MACCFG1 */ | 594 | /* Enable Rx and Tx in MACCFG1 */ |
@@ -624,7 +622,7 @@ int startup_gfar(struct net_device *dev) | |||
624 | unsigned long vaddr; | 622 | unsigned long vaddr; |
625 | int i; | 623 | int i; |
626 | struct gfar_private *priv = netdev_priv(dev); | 624 | struct gfar_private *priv = netdev_priv(dev); |
627 | struct gfar *regs = priv->regs; | 625 | struct gfar __iomem *regs = priv->regs; |
628 | int err = 0; | 626 | int err = 0; |
629 | u32 rctrl = 0; | 627 | u32 rctrl = 0; |
630 | u32 attrs = 0; | 628 | u32 attrs = 0; |
@@ -1622,7 +1620,7 @@ static irqreturn_t gfar_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
1622 | static void adjust_link(struct net_device *dev) | 1620 | static void adjust_link(struct net_device *dev) |
1623 | { | 1621 | { |
1624 | struct gfar_private *priv = netdev_priv(dev); | 1622 | struct gfar_private *priv = netdev_priv(dev); |
1625 | struct gfar *regs = priv->regs; | 1623 | struct gfar __iomem *regs = priv->regs; |
1626 | unsigned long flags; | 1624 | unsigned long flags; |
1627 | struct phy_device *phydev = priv->phydev; | 1625 | struct phy_device *phydev = priv->phydev; |
1628 | int new_state = 0; | 1626 | int new_state = 0; |
@@ -1703,7 +1701,7 @@ static void gfar_set_multi(struct net_device *dev) | |||
1703 | { | 1701 | { |
1704 | struct dev_mc_list *mc_ptr; | 1702 | struct dev_mc_list *mc_ptr; |
1705 | struct gfar_private *priv = netdev_priv(dev); | 1703 | struct gfar_private *priv = netdev_priv(dev); |
1706 | struct gfar *regs = priv->regs; | 1704 | struct gfar __iomem *regs = priv->regs; |
1707 | u32 tempval; | 1705 | u32 tempval; |
1708 | 1706 | ||
1709 | if(dev->flags & IFF_PROMISC) { | 1707 | if(dev->flags & IFF_PROMISC) { |
@@ -1842,7 +1840,7 @@ static void gfar_set_mac_for_addr(struct net_device *dev, int num, u8 *addr) | |||
1842 | int idx; | 1840 | int idx; |
1843 | char tmpbuf[MAC_ADDR_LEN]; | 1841 | char tmpbuf[MAC_ADDR_LEN]; |
1844 | u32 tempval; | 1842 | u32 tempval; |
1845 | u32 *macptr = &priv->regs->macstnaddr1; | 1843 | u32 __iomem *macptr = &priv->regs->macstnaddr1; |
1846 | 1844 | ||
1847 | macptr += num*2; | 1845 | macptr += num*2; |
1848 | 1846 | ||
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h index cb9d66ac3ab9..d37d5401be6e 100644 --- a/drivers/net/gianfar.h +++ b/drivers/net/gianfar.h | |||
@@ -682,8 +682,8 @@ struct gfar_private { | |||
682 | struct rxbd8 *cur_rx; /* Next free rx ring entry */ | 682 | struct rxbd8 *cur_rx; /* Next free rx ring entry */ |
683 | struct txbd8 *cur_tx; /* Next free ring entry */ | 683 | struct txbd8 *cur_tx; /* Next free ring entry */ |
684 | struct txbd8 *dirty_tx; /* The Ring entry to be freed. */ | 684 | struct txbd8 *dirty_tx; /* The Ring entry to be freed. */ |
685 | struct gfar *regs; /* Pointer to the GFAR memory mapped Registers */ | 685 | struct gfar __iomem *regs; /* Pointer to the GFAR memory mapped Registers */ |
686 | u32 *hash_regs[16]; | 686 | u32 __iomem *hash_regs[16]; |
687 | int hash_width; | 687 | int hash_width; |
688 | struct net_device_stats stats; /* linux network statistics */ | 688 | struct net_device_stats stats; /* linux network statistics */ |
689 | struct gfar_extra_stats extra_stats; | 689 | struct gfar_extra_stats extra_stats; |
@@ -718,14 +718,14 @@ struct gfar_private { | |||
718 | uint32_t msg_enable; | 718 | uint32_t msg_enable; |
719 | }; | 719 | }; |
720 | 720 | ||
721 | static inline u32 gfar_read(volatile unsigned *addr) | 721 | static inline u32 gfar_read(volatile unsigned __iomem *addr) |
722 | { | 722 | { |
723 | u32 val; | 723 | u32 val; |
724 | val = in_be32(addr); | 724 | val = in_be32(addr); |
725 | return val; | 725 | return val; |
726 | } | 726 | } |
727 | 727 | ||
728 | static inline void gfar_write(volatile unsigned *addr, u32 val) | 728 | static inline void gfar_write(volatile unsigned __iomem *addr, u32 val) |
729 | { | 729 | { |
730 | out_be32(addr, val); | 730 | out_be32(addr, val); |
731 | } | 731 | } |
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c index 765e810620fe..5de7b2e259dc 100644 --- a/drivers/net/gianfar_ethtool.c +++ b/drivers/net/gianfar_ethtool.c | |||
@@ -144,11 +144,11 @@ static void gfar_fill_stats(struct net_device *dev, struct ethtool_stats *dummy, | |||
144 | u64 *extra = (u64 *) & priv->extra_stats; | 144 | u64 *extra = (u64 *) & priv->extra_stats; |
145 | 145 | ||
146 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { | 146 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { |
147 | u32 *rmon = (u32 *) & priv->regs->rmon; | 147 | u32 __iomem *rmon = (u32 __iomem *) & priv->regs->rmon; |
148 | struct gfar_stats *stats = (struct gfar_stats *) buf; | 148 | struct gfar_stats *stats = (struct gfar_stats *) buf; |
149 | 149 | ||
150 | for (i = 0; i < GFAR_RMON_LEN; i++) | 150 | for (i = 0; i < GFAR_RMON_LEN; i++) |
151 | stats->rmon[i] = (u64) (rmon[i]); | 151 | stats->rmon[i] = (u64) gfar_read(&rmon[i]); |
152 | 152 | ||
153 | for (i = 0; i < GFAR_EXTRA_STATS_LEN; i++) | 153 | for (i = 0; i < GFAR_EXTRA_STATS_LEN; i++) |
154 | stats->extra[i] = extra[i]; | 154 | stats->extra[i] = extra[i]; |
@@ -221,11 +221,11 @@ static void gfar_get_regs(struct net_device *dev, struct ethtool_regs *regs, voi | |||
221 | { | 221 | { |
222 | int i; | 222 | int i; |
223 | struct gfar_private *priv = netdev_priv(dev); | 223 | struct gfar_private *priv = netdev_priv(dev); |
224 | u32 *theregs = (u32 *) priv->regs; | 224 | u32 __iomem *theregs = (u32 __iomem *) priv->regs; |
225 | u32 *buf = (u32 *) regbuf; | 225 | u32 *buf = (u32 *) regbuf; |
226 | 226 | ||
227 | for (i = 0; i < sizeof (struct gfar) / sizeof (u32); i++) | 227 | for (i = 0; i < sizeof (struct gfar) / sizeof (u32); i++) |
228 | buf[i] = theregs[i]; | 228 | buf[i] = gfar_read(&theregs[i]); |
229 | } | 229 | } |
230 | 230 | ||
231 | /* Convert microseconds to ethernet clock ticks, which changes | 231 | /* Convert microseconds to ethernet clock ticks, which changes |
diff --git a/drivers/net/gianfar_mii.c b/drivers/net/gianfar_mii.c index 74e52fcbf806..c6b725529af5 100644 --- a/drivers/net/gianfar_mii.c +++ b/drivers/net/gianfar_mii.c | |||
@@ -50,7 +50,7 @@ | |||
50 | * All PHY configuration is done through the TSEC1 MIIM regs */ | 50 | * All PHY configuration is done through the TSEC1 MIIM regs */ |
51 | int gfar_mdio_write(struct mii_bus *bus, int mii_id, int regnum, u16 value) | 51 | int gfar_mdio_write(struct mii_bus *bus, int mii_id, int regnum, u16 value) |
52 | { | 52 | { |
53 | struct gfar_mii *regs = bus->priv; | 53 | struct gfar_mii __iomem *regs = (void __iomem *)bus->priv; |
54 | 54 | ||
55 | /* Set the PHY address and the register address we want to write */ | 55 | /* Set the PHY address and the register address we want to write */ |
56 | gfar_write(®s->miimadd, (mii_id << 8) | regnum); | 56 | gfar_write(®s->miimadd, (mii_id << 8) | regnum); |
@@ -70,7 +70,7 @@ int gfar_mdio_write(struct mii_bus *bus, int mii_id, int regnum, u16 value) | |||
70 | * configuration has to be done through the TSEC1 MIIM regs */ | 70 | * configuration has to be done through the TSEC1 MIIM regs */ |
71 | int gfar_mdio_read(struct mii_bus *bus, int mii_id, int regnum) | 71 | int gfar_mdio_read(struct mii_bus *bus, int mii_id, int regnum) |
72 | { | 72 | { |
73 | struct gfar_mii *regs = bus->priv; | 73 | struct gfar_mii __iomem *regs = (void __iomem *)bus->priv; |
74 | u16 value; | 74 | u16 value; |
75 | 75 | ||
76 | /* Set the PHY address and the register address we want to read */ | 76 | /* Set the PHY address and the register address we want to read */ |
@@ -94,7 +94,7 @@ int gfar_mdio_read(struct mii_bus *bus, int mii_id, int regnum) | |||
94 | /* Reset the MIIM registers, and wait for the bus to free */ | 94 | /* Reset the MIIM registers, and wait for the bus to free */ |
95 | int gfar_mdio_reset(struct mii_bus *bus) | 95 | int gfar_mdio_reset(struct mii_bus *bus) |
96 | { | 96 | { |
97 | struct gfar_mii *regs = bus->priv; | 97 | struct gfar_mii __iomem *regs = (void __iomem *)bus->priv; |
98 | unsigned int timeout = PHY_INIT_TIMEOUT; | 98 | unsigned int timeout = PHY_INIT_TIMEOUT; |
99 | 99 | ||
100 | spin_lock_bh(&bus->mdio_lock); | 100 | spin_lock_bh(&bus->mdio_lock); |
@@ -126,7 +126,7 @@ int gfar_mdio_probe(struct device *dev) | |||
126 | { | 126 | { |
127 | struct platform_device *pdev = to_platform_device(dev); | 127 | struct platform_device *pdev = to_platform_device(dev); |
128 | struct gianfar_mdio_data *pdata; | 128 | struct gianfar_mdio_data *pdata; |
129 | struct gfar_mii *regs; | 129 | struct gfar_mii __iomem *regs; |
130 | struct mii_bus *new_bus; | 130 | struct mii_bus *new_bus; |
131 | struct resource *r; | 131 | struct resource *r; |
132 | int err = 0; | 132 | int err = 0; |
@@ -155,15 +155,14 @@ int gfar_mdio_probe(struct device *dev) | |||
155 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 155 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
156 | 156 | ||
157 | /* Set the PHY base address */ | 157 | /* Set the PHY base address */ |
158 | regs = (struct gfar_mii *) ioremap(r->start, | 158 | regs = ioremap(r->start, sizeof (struct gfar_mii)); |
159 | sizeof (struct gfar_mii)); | ||
160 | 159 | ||
161 | if (NULL == regs) { | 160 | if (NULL == regs) { |
162 | err = -ENOMEM; | 161 | err = -ENOMEM; |
163 | goto reg_map_fail; | 162 | goto reg_map_fail; |
164 | } | 163 | } |
165 | 164 | ||
166 | new_bus->priv = regs; | 165 | new_bus->priv = (void __force *)regs; |
167 | 166 | ||
168 | new_bus->irq = pdata->irq; | 167 | new_bus->irq = pdata->irq; |
169 | 168 | ||
@@ -181,7 +180,7 @@ int gfar_mdio_probe(struct device *dev) | |||
181 | return 0; | 180 | return 0; |
182 | 181 | ||
183 | bus_register_fail: | 182 | bus_register_fail: |
184 | iounmap((void *) regs); | 183 | iounmap(regs); |
185 | reg_map_fail: | 184 | reg_map_fail: |
186 | kfree(new_bus); | 185 | kfree(new_bus); |
187 | 186 | ||
@@ -197,7 +196,7 @@ int gfar_mdio_remove(struct device *dev) | |||
197 | 196 | ||
198 | dev_set_drvdata(dev, NULL); | 197 | dev_set_drvdata(dev, NULL); |
199 | 198 | ||
200 | iounmap((void *) (&bus->priv)); | 199 | iounmap((void __iomem *)bus->priv); |
201 | bus->priv = NULL; | 200 | bus->priv = NULL; |
202 | kfree(bus); | 201 | kfree(bus); |
203 | 202 | ||
diff --git a/drivers/net/hamradio/baycom_par.c b/drivers/net/hamradio/baycom_par.c index 3b1bef1ee215..77411a00d1ee 100644 --- a/drivers/net/hamradio/baycom_par.c +++ b/drivers/net/hamradio/baycom_par.c | |||
@@ -86,7 +86,6 @@ | |||
86 | #include <linux/bitops.h> | 86 | #include <linux/bitops.h> |
87 | #include <linux/jiffies.h> | 87 | #include <linux/jiffies.h> |
88 | 88 | ||
89 | #include <asm/bug.h> | ||
90 | #include <asm/system.h> | 89 | #include <asm/system.h> |
91 | #include <asm/uaccess.h> | 90 | #include <asm/uaccess.h> |
92 | 91 | ||
diff --git a/drivers/net/lp486e.c b/drivers/net/lp486e.c index 6139f06d7d2b..94d5ea1ce8bd 100644 --- a/drivers/net/lp486e.c +++ b/drivers/net/lp486e.c | |||
@@ -56,8 +56,6 @@ PORT SIZE ACTION MEANING | |||
56 | All other communication is through memory! | 56 | All other communication is through memory! |
57 | */ | 57 | */ |
58 | 58 | ||
59 | #define SLOW_DOWN_IO udelay(5) | ||
60 | |||
61 | #include <linux/module.h> | 59 | #include <linux/module.h> |
62 | #include <linux/init.h> | 60 | #include <linux/init.h> |
63 | #include <linux/delay.h> | 61 | #include <linux/delay.h> |
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index 40ae36b20c9d..c0998ef938e0 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c | |||
@@ -32,6 +32,8 @@ | |||
32 | */ | 32 | */ |
33 | #include <linux/init.h> | 33 | #include <linux/init.h> |
34 | #include <linux/dma-mapping.h> | 34 | #include <linux/dma-mapping.h> |
35 | #include <linux/in.h> | ||
36 | #include <linux/ip.h> | ||
35 | #include <linux/tcp.h> | 37 | #include <linux/tcp.h> |
36 | #include <linux/udp.h> | 38 | #include <linux/udp.h> |
37 | #include <linux/etherdevice.h> | 39 | #include <linux/etherdevice.h> |
@@ -444,6 +446,7 @@ static int mv643xx_eth_receive_queue(struct net_device *dev) | |||
444 | netif_rx(skb); | 446 | netif_rx(skb); |
445 | #endif | 447 | #endif |
446 | } | 448 | } |
449 | dev->last_rx = jiffies; | ||
447 | } | 450 | } |
448 | 451 | ||
449 | return received_packets; | 452 | return received_packets; |
@@ -461,7 +464,7 @@ static int mv643xx_eth_receive_queue(struct net_device *dev) | |||
461 | */ | 464 | */ |
462 | 465 | ||
463 | static irqreturn_t mv643xx_eth_int_handler(int irq, void *dev_id, | 466 | static irqreturn_t mv643xx_eth_int_handler(int irq, void *dev_id, |
464 | struct pt_regs *regs) | 467 | struct pt_regs *regs) |
465 | { | 468 | { |
466 | struct net_device *dev = (struct net_device *)dev_id; | 469 | struct net_device *dev = (struct net_device *)dev_id; |
467 | struct mv643xx_private *mp = netdev_priv(dev); | 470 | struct mv643xx_private *mp = netdev_priv(dev); |
@@ -1047,16 +1050,15 @@ static int mv643xx_poll(struct net_device *dev, int *budget) | |||
1047 | 1050 | ||
1048 | static inline unsigned int has_tiny_unaligned_frags(struct sk_buff *skb) | 1051 | static inline unsigned int has_tiny_unaligned_frags(struct sk_buff *skb) |
1049 | { | 1052 | { |
1050 | unsigned int frag; | 1053 | unsigned int frag; |
1051 | skb_frag_t *fragp; | 1054 | skb_frag_t *fragp; |
1052 | |||
1053 | for (frag = 0; frag < skb_shinfo(skb)->nr_frags; frag++) { | ||
1054 | fragp = &skb_shinfo(skb)->frags[frag]; | ||
1055 | if (fragp->size <= 8 && fragp->page_offset & 0x7) | ||
1056 | return 1; | ||
1057 | 1055 | ||
1058 | } | 1056 | for (frag = 0; frag < skb_shinfo(skb)->nr_frags; frag++) { |
1059 | return 0; | 1057 | fragp = &skb_shinfo(skb)->frags[frag]; |
1058 | if (fragp->size <= 8 && fragp->page_offset & 0x7) | ||
1059 | return 1; | ||
1060 | } | ||
1061 | return 0; | ||
1060 | } | 1062 | } |
1061 | 1063 | ||
1062 | 1064 | ||
@@ -2137,26 +2139,26 @@ static void eth_port_set_multicast_list(struct net_device *dev) | |||
2137 | */ | 2139 | */ |
2138 | if ((dev->flags & IFF_PROMISC) || (dev->flags & IFF_ALLMULTI)) { | 2140 | if ((dev->flags & IFF_PROMISC) || (dev->flags & IFF_ALLMULTI)) { |
2139 | for (table_index = 0; table_index <= 0xFC; table_index += 4) { | 2141 | for (table_index = 0; table_index <= 0xFC; table_index += 4) { |
2140 | /* Set all entries in DA filter special multicast | 2142 | /* Set all entries in DA filter special multicast |
2141 | * table (Ex_dFSMT) | 2143 | * table (Ex_dFSMT) |
2142 | * Set for ETH_Q0 for now | 2144 | * Set for ETH_Q0 for now |
2143 | * Bits | 2145 | * Bits |
2144 | * 0 Accept=1, Drop=0 | 2146 | * 0 Accept=1, Drop=0 |
2145 | * 3-1 Queue ETH_Q0=0 | 2147 | * 3-1 Queue ETH_Q0=0 |
2146 | * 7-4 Reserved = 0; | 2148 | * 7-4 Reserved = 0; |
2147 | */ | 2149 | */ |
2148 | mv_write(MV643XX_ETH_DA_FILTER_SPECIAL_MULTICAST_TABLE_BASE(eth_port_num) + table_index, 0x01010101); | 2150 | mv_write(MV643XX_ETH_DA_FILTER_SPECIAL_MULTICAST_TABLE_BASE(eth_port_num) + table_index, 0x01010101); |
2149 | 2151 | ||
2150 | /* Set all entries in DA filter other multicast | 2152 | /* Set all entries in DA filter other multicast |
2151 | * table (Ex_dFOMT) | 2153 | * table (Ex_dFOMT) |
2152 | * Set for ETH_Q0 for now | 2154 | * Set for ETH_Q0 for now |
2153 | * Bits | 2155 | * Bits |
2154 | * 0 Accept=1, Drop=0 | 2156 | * 0 Accept=1, Drop=0 |
2155 | * 3-1 Queue ETH_Q0=0 | 2157 | * 3-1 Queue ETH_Q0=0 |
2156 | * 7-4 Reserved = 0; | 2158 | * 7-4 Reserved = 0; |
2157 | */ | 2159 | */ |
2158 | mv_write(MV643XX_ETH_DA_FILTER_OTHER_MULTICAST_TABLE_BASE(eth_port_num) + table_index, 0x01010101); | 2160 | mv_write(MV643XX_ETH_DA_FILTER_OTHER_MULTICAST_TABLE_BASE(eth_port_num) + table_index, 0x01010101); |
2159 | } | 2161 | } |
2160 | return; | 2162 | return; |
2161 | } | 2163 | } |
2162 | 2164 | ||
@@ -2617,7 +2619,6 @@ static ETH_FUNC_RET_STATUS eth_port_send(struct mv643xx_private *mp, | |||
2617 | struct eth_tx_desc *current_descriptor; | 2619 | struct eth_tx_desc *current_descriptor; |
2618 | struct eth_tx_desc *first_descriptor; | 2620 | struct eth_tx_desc *first_descriptor; |
2619 | u32 command; | 2621 | u32 command; |
2620 | unsigned long flags; | ||
2621 | 2622 | ||
2622 | /* Do not process Tx ring in case of Tx ring resource error */ | 2623 | /* Do not process Tx ring in case of Tx ring resource error */ |
2623 | if (mp->tx_resource_err) | 2624 | if (mp->tx_resource_err) |
@@ -2634,8 +2635,6 @@ static ETH_FUNC_RET_STATUS eth_port_send(struct mv643xx_private *mp, | |||
2634 | return ETH_ERROR; | 2635 | return ETH_ERROR; |
2635 | } | 2636 | } |
2636 | 2637 | ||
2637 | spin_lock_irqsave(&mp->lock, flags); | ||
2638 | |||
2639 | mp->tx_ring_skbs++; | 2638 | mp->tx_ring_skbs++; |
2640 | BUG_ON(mp->tx_ring_skbs > mp->tx_ring_size); | 2639 | BUG_ON(mp->tx_ring_skbs > mp->tx_ring_size); |
2641 | 2640 | ||
@@ -2685,15 +2684,11 @@ static ETH_FUNC_RET_STATUS eth_port_send(struct mv643xx_private *mp, | |||
2685 | mp->tx_resource_err = 1; | 2684 | mp->tx_resource_err = 1; |
2686 | mp->tx_curr_desc_q = tx_first_desc; | 2685 | mp->tx_curr_desc_q = tx_first_desc; |
2687 | 2686 | ||
2688 | spin_unlock_irqrestore(&mp->lock, flags); | ||
2689 | |||
2690 | return ETH_QUEUE_LAST_RESOURCE; | 2687 | return ETH_QUEUE_LAST_RESOURCE; |
2691 | } | 2688 | } |
2692 | 2689 | ||
2693 | mp->tx_curr_desc_q = tx_next_desc; | 2690 | mp->tx_curr_desc_q = tx_next_desc; |
2694 | 2691 | ||
2695 | spin_unlock_irqrestore(&mp->lock, flags); | ||
2696 | |||
2697 | return ETH_OK; | 2692 | return ETH_OK; |
2698 | } | 2693 | } |
2699 | #else | 2694 | #else |
@@ -2704,14 +2699,11 @@ static ETH_FUNC_RET_STATUS eth_port_send(struct mv643xx_private *mp, | |||
2704 | int tx_desc_used; | 2699 | int tx_desc_used; |
2705 | struct eth_tx_desc *current_descriptor; | 2700 | struct eth_tx_desc *current_descriptor; |
2706 | unsigned int command_status; | 2701 | unsigned int command_status; |
2707 | unsigned long flags; | ||
2708 | 2702 | ||
2709 | /* Do not process Tx ring in case of Tx ring resource error */ | 2703 | /* Do not process Tx ring in case of Tx ring resource error */ |
2710 | if (mp->tx_resource_err) | 2704 | if (mp->tx_resource_err) |
2711 | return ETH_QUEUE_FULL; | 2705 | return ETH_QUEUE_FULL; |
2712 | 2706 | ||
2713 | spin_lock_irqsave(&mp->lock, flags); | ||
2714 | |||
2715 | mp->tx_ring_skbs++; | 2707 | mp->tx_ring_skbs++; |
2716 | BUG_ON(mp->tx_ring_skbs > mp->tx_ring_size); | 2708 | BUG_ON(mp->tx_ring_skbs > mp->tx_ring_size); |
2717 | 2709 | ||
@@ -2742,12 +2734,9 @@ static ETH_FUNC_RET_STATUS eth_port_send(struct mv643xx_private *mp, | |||
2742 | /* Check for ring index overlap in the Tx desc ring */ | 2734 | /* Check for ring index overlap in the Tx desc ring */ |
2743 | if (tx_desc_curr == tx_desc_used) { | 2735 | if (tx_desc_curr == tx_desc_used) { |
2744 | mp->tx_resource_err = 1; | 2736 | mp->tx_resource_err = 1; |
2745 | |||
2746 | spin_unlock_irqrestore(&mp->lock, flags); | ||
2747 | return ETH_QUEUE_LAST_RESOURCE; | 2737 | return ETH_QUEUE_LAST_RESOURCE; |
2748 | } | 2738 | } |
2749 | 2739 | ||
2750 | spin_unlock_irqrestore(&mp->lock, flags); | ||
2751 | return ETH_OK; | 2740 | return ETH_OK; |
2752 | } | 2741 | } |
2753 | #endif | 2742 | #endif |
@@ -2898,8 +2887,10 @@ static ETH_FUNC_RET_STATUS eth_port_receive(struct mv643xx_private *mp, | |||
2898 | p_pkt_info->return_info = mp->rx_skb[rx_curr_desc]; | 2887 | p_pkt_info->return_info = mp->rx_skb[rx_curr_desc]; |
2899 | p_pkt_info->l4i_chk = p_rx_desc->buf_size; | 2888 | p_pkt_info->l4i_chk = p_rx_desc->buf_size; |
2900 | 2889 | ||
2901 | /* Clean the return info field to indicate that the packet has been */ | 2890 | /* |
2902 | /* moved to the upper layers */ | 2891 | * Clean the return info field to indicate that the |
2892 | * packet has been moved to the upper layers | ||
2893 | */ | ||
2903 | mp->rx_skb[rx_curr_desc] = NULL; | 2894 | mp->rx_skb[rx_curr_desc] = NULL; |
2904 | 2895 | ||
2905 | /* Update current index in data structure */ | 2896 | /* Update current index in data structure */ |
@@ -2980,7 +2971,7 @@ struct mv643xx_stats { | |||
2980 | }; | 2971 | }; |
2981 | 2972 | ||
2982 | #define MV643XX_STAT(m) sizeof(((struct mv643xx_private *)0)->m), \ | 2973 | #define MV643XX_STAT(m) sizeof(((struct mv643xx_private *)0)->m), \ |
2983 | offsetof(struct mv643xx_private, m) | 2974 | offsetof(struct mv643xx_private, m) |
2984 | 2975 | ||
2985 | static const struct mv643xx_stats mv643xx_gstrings_stats[] = { | 2976 | static const struct mv643xx_stats mv643xx_gstrings_stats[] = { |
2986 | { "rx_packets", MV643XX_STAT(stats.rx_packets) }, | 2977 | { "rx_packets", MV643XX_STAT(stats.rx_packets) }, |
@@ -3131,9 +3122,8 @@ mv643xx_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) | |||
3131 | return 0; | 3122 | return 0; |
3132 | } | 3123 | } |
3133 | 3124 | ||
3134 | static void | 3125 | static void mv643xx_get_drvinfo(struct net_device *netdev, |
3135 | mv643xx_get_drvinfo(struct net_device *netdev, | 3126 | struct ethtool_drvinfo *drvinfo) |
3136 | struct ethtool_drvinfo *drvinfo) | ||
3137 | { | 3127 | { |
3138 | strncpy(drvinfo->driver, mv643xx_driver_name, 32); | 3128 | strncpy(drvinfo->driver, mv643xx_driver_name, 32); |
3139 | strncpy(drvinfo->version, mv643xx_driver_version, 32); | 3129 | strncpy(drvinfo->version, mv643xx_driver_version, 32); |
@@ -3142,39 +3132,37 @@ mv643xx_get_drvinfo(struct net_device *netdev, | |||
3142 | drvinfo->n_stats = MV643XX_STATS_LEN; | 3132 | drvinfo->n_stats = MV643XX_STATS_LEN; |
3143 | } | 3133 | } |
3144 | 3134 | ||
3145 | static int | 3135 | static int mv643xx_get_stats_count(struct net_device *netdev) |
3146 | mv643xx_get_stats_count(struct net_device *netdev) | ||
3147 | { | 3136 | { |
3148 | return MV643XX_STATS_LEN; | 3137 | return MV643XX_STATS_LEN; |
3149 | } | 3138 | } |
3150 | 3139 | ||
3151 | static void | 3140 | static void mv643xx_get_ethtool_stats(struct net_device *netdev, |
3152 | mv643xx_get_ethtool_stats(struct net_device *netdev, | 3141 | struct ethtool_stats *stats, uint64_t *data) |
3153 | struct ethtool_stats *stats, uint64_t *data) | ||
3154 | { | 3142 | { |
3155 | struct mv643xx_private *mp = netdev->priv; | 3143 | struct mv643xx_private *mp = netdev->priv; |
3156 | int i; | 3144 | int i; |
3157 | 3145 | ||
3158 | eth_update_mib_counters(mp); | 3146 | eth_update_mib_counters(mp); |
3159 | 3147 | ||
3160 | for(i = 0; i < MV643XX_STATS_LEN; i++) { | 3148 | for (i = 0; i < MV643XX_STATS_LEN; i++) { |
3161 | char *p = (char *)mp+mv643xx_gstrings_stats[i].stat_offset; | 3149 | char *p = (char *)mp+mv643xx_gstrings_stats[i].stat_offset; |
3162 | data[i] = (mv643xx_gstrings_stats[i].sizeof_stat == | 3150 | data[i] = (mv643xx_gstrings_stats[i].sizeof_stat == |
3163 | sizeof(uint64_t)) ? *(uint64_t *)p : *(uint32_t *)p; | 3151 | sizeof(uint64_t)) ? *(uint64_t *)p : *(uint32_t *)p; |
3164 | } | 3152 | } |
3165 | } | 3153 | } |
3166 | 3154 | ||
3167 | static void | 3155 | static void mv643xx_get_strings(struct net_device *netdev, uint32_t stringset, |
3168 | mv643xx_get_strings(struct net_device *netdev, uint32_t stringset, uint8_t *data) | 3156 | uint8_t *data) |
3169 | { | 3157 | { |
3170 | int i; | 3158 | int i; |
3171 | 3159 | ||
3172 | switch(stringset) { | 3160 | switch(stringset) { |
3173 | case ETH_SS_STATS: | 3161 | case ETH_SS_STATS: |
3174 | for (i=0; i < MV643XX_STATS_LEN; i++) { | 3162 | for (i=0; i < MV643XX_STATS_LEN; i++) { |
3175 | memcpy(data + i * ETH_GSTRING_LEN, | 3163 | memcpy(data + i * ETH_GSTRING_LEN, |
3176 | mv643xx_gstrings_stats[i].stat_string, | 3164 | mv643xx_gstrings_stats[i].stat_string, |
3177 | ETH_GSTRING_LEN); | 3165 | ETH_GSTRING_LEN); |
3178 | } | 3166 | } |
3179 | break; | 3167 | break; |
3180 | } | 3168 | } |
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c index 1c6d328165bb..0245e40b51a1 100644 --- a/drivers/net/ppp_generic.c +++ b/drivers/net/ppp_generic.c | |||
@@ -1610,6 +1610,8 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb) | |||
1610 | } | 1610 | } |
1611 | else if (!pskb_may_pull(skb, skb->len)) | 1611 | else if (!pskb_may_pull(skb, skb->len)) |
1612 | goto err; | 1612 | goto err; |
1613 | else | ||
1614 | skb->ip_summed = CHECKSUM_NONE; | ||
1613 | 1615 | ||
1614 | len = slhc_uncompress(ppp->vj, skb->data + 2, skb->len - 2); | 1616 | len = slhc_uncompress(ppp->vj, skb->data + 2, skb->len - 2); |
1615 | if (len <= 0) { | 1617 | if (len <= 0) { |
@@ -1690,6 +1692,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb) | |||
1690 | kfree_skb(skb); | 1692 | kfree_skb(skb); |
1691 | } else { | 1693 | } else { |
1692 | skb_pull(skb, 2); /* chop off protocol */ | 1694 | skb_pull(skb, 2); /* chop off protocol */ |
1695 | skb_postpull_rcsum(skb, skb->data - 2, 2); | ||
1693 | skb->dev = ppp->dev; | 1696 | skb->dev = ppp->dev; |
1694 | skb->protocol = htons(npindex_to_ethertype[npi]); | 1697 | skb->protocol = htons(npindex_to_ethertype[npi]); |
1695 | skb->mac.raw = skb->data; | 1698 | skb->mac.raw = skb->data; |
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 2e1bed153c39..6e1018448eea 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
@@ -484,13 +484,12 @@ static void mdio_write(void __iomem *ioaddr, int RegAddr, int value) | |||
484 | int i; | 484 | int i; |
485 | 485 | ||
486 | RTL_W32(PHYAR, 0x80000000 | (RegAddr & 0xFF) << 16 | value); | 486 | RTL_W32(PHYAR, 0x80000000 | (RegAddr & 0xFF) << 16 | value); |
487 | udelay(1000); | ||
488 | 487 | ||
489 | for (i = 2000; i > 0; i--) { | 488 | for (i = 20; i > 0; i--) { |
490 | /* Check if the RTL8169 has completed writing to the specified MII register */ | 489 | /* Check if the RTL8169 has completed writing to the specified MII register */ |
491 | if (!(RTL_R32(PHYAR) & 0x80000000)) | 490 | if (!(RTL_R32(PHYAR) & 0x80000000)) |
492 | break; | 491 | break; |
493 | udelay(100); | 492 | udelay(25); |
494 | } | 493 | } |
495 | } | 494 | } |
496 | 495 | ||
@@ -499,15 +498,14 @@ static int mdio_read(void __iomem *ioaddr, int RegAddr) | |||
499 | int i, value = -1; | 498 | int i, value = -1; |
500 | 499 | ||
501 | RTL_W32(PHYAR, 0x0 | (RegAddr & 0xFF) << 16); | 500 | RTL_W32(PHYAR, 0x0 | (RegAddr & 0xFF) << 16); |
502 | udelay(1000); | ||
503 | 501 | ||
504 | for (i = 2000; i > 0; i--) { | 502 | for (i = 20; i > 0; i--) { |
505 | /* Check if the RTL8169 has completed retrieving data from the specified MII register */ | 503 | /* Check if the RTL8169 has completed retrieving data from the specified MII register */ |
506 | if (RTL_R32(PHYAR) & 0x80000000) { | 504 | if (RTL_R32(PHYAR) & 0x80000000) { |
507 | value = (int) (RTL_R32(PHYAR) & 0xFFFF); | 505 | value = (int) (RTL_R32(PHYAR) & 0xFFFF); |
508 | break; | 506 | break; |
509 | } | 507 | } |
510 | udelay(100); | 508 | udelay(25); |
511 | } | 509 | } |
512 | return value; | 510 | return value; |
513 | } | 511 | } |
@@ -677,6 +675,9 @@ static int rtl8169_set_speed_xmii(struct net_device *dev, | |||
677 | 675 | ||
678 | if (duplex == DUPLEX_HALF) | 676 | if (duplex == DUPLEX_HALF) |
679 | auto_nego &= ~(PHY_Cap_10_Full | PHY_Cap_100_Full); | 677 | auto_nego &= ~(PHY_Cap_10_Full | PHY_Cap_100_Full); |
678 | |||
679 | if (duplex == DUPLEX_FULL) | ||
680 | auto_nego &= ~(PHY_Cap_10_Half | PHY_Cap_100_Half); | ||
680 | } | 681 | } |
681 | 682 | ||
682 | tp->phy_auto_nego_reg = auto_nego; | 683 | tp->phy_auto_nego_reg = auto_nego; |
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 89c46787676c..49b597cbc19a 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -3586,7 +3586,7 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3586 | txdp->Buffer_Pointer = (u64) pci_map_page | 3586 | txdp->Buffer_Pointer = (u64) pci_map_page |
3587 | (sp->pdev, frag->page, frag->page_offset, | 3587 | (sp->pdev, frag->page, frag->page_offset, |
3588 | frag->size, PCI_DMA_TODEVICE); | 3588 | frag->size, PCI_DMA_TODEVICE); |
3589 | txdp->Control_1 |= TXD_BUFFER0_SIZE(frag->size); | 3589 | txdp->Control_1 = TXD_BUFFER0_SIZE(frag->size); |
3590 | if (skb_shinfo(skb)->ufo_size) | 3590 | if (skb_shinfo(skb)->ufo_size) |
3591 | txdp->Control_1 |= TXD_UFO_EN; | 3591 | txdp->Control_1 |= TXD_UFO_EN; |
3592 | } | 3592 | } |
diff --git a/drivers/net/sis900.h b/drivers/net/sis900.h index 4233ea55670f..50323941e3c0 100644 --- a/drivers/net/sis900.h +++ b/drivers/net/sis900.h | |||
@@ -33,7 +33,6 @@ enum sis900_registers { | |||
33 | rxcfg=0x34, //Receive Configuration Register | 33 | rxcfg=0x34, //Receive Configuration Register |
34 | flctrl=0x38, //Flow Control Register | 34 | flctrl=0x38, //Flow Control Register |
35 | rxlen=0x3c, //Receive Packet Length Register | 35 | rxlen=0x3c, //Receive Packet Length Register |
36 | cfgpmcsr=0x44, //Configuration Power Management Control/Status Register | ||
37 | rfcr=0x48, //Receive Filter Control Register | 36 | rfcr=0x48, //Receive Filter Control Register |
38 | rfdr=0x4C, //Receive Filter Data Register | 37 | rfdr=0x4C, //Receive Filter Data Register |
39 | pmctrl=0xB0, //Power Management Control Register | 38 | pmctrl=0xB0, //Power Management Control Register |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index f8b973a04b65..cae2edf23004 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -23,12 +23,6 @@ | |||
23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
24 | */ | 24 | */ |
25 | 25 | ||
26 | /* | ||
27 | * TOTEST | ||
28 | * - speed setting | ||
29 | * - suspend/resume | ||
30 | */ | ||
31 | |||
32 | #include <linux/config.h> | 26 | #include <linux/config.h> |
33 | #include <linux/crc32.h> | 27 | #include <linux/crc32.h> |
34 | #include <linux/kernel.h> | 28 | #include <linux/kernel.h> |
@@ -57,7 +51,7 @@ | |||
57 | #include "sky2.h" | 51 | #include "sky2.h" |
58 | 52 | ||
59 | #define DRV_NAME "sky2" | 53 | #define DRV_NAME "sky2" |
60 | #define DRV_VERSION "0.13" | 54 | #define DRV_VERSION "0.15" |
61 | #define PFX DRV_NAME " " | 55 | #define PFX DRV_NAME " " |
62 | 56 | ||
63 | /* | 57 | /* |
@@ -102,6 +96,10 @@ static int copybreak __read_mostly = 256; | |||
102 | module_param(copybreak, int, 0); | 96 | module_param(copybreak, int, 0); |
103 | MODULE_PARM_DESC(copybreak, "Receive copy threshold"); | 97 | MODULE_PARM_DESC(copybreak, "Receive copy threshold"); |
104 | 98 | ||
99 | static int disable_msi = 0; | ||
100 | module_param(disable_msi, int, 0); | ||
101 | MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)"); | ||
102 | |||
105 | static const struct pci_device_id sky2_id_table[] = { | 103 | static const struct pci_device_id sky2_id_table[] = { |
106 | { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9000) }, | 104 | { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9000) }, |
107 | { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9E00) }, | 105 | { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9E00) }, |
@@ -198,7 +196,7 @@ static int sky2_set_power_state(struct sky2_hw *hw, pci_power_t state) | |||
198 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); | 196 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); |
199 | 197 | ||
200 | pci_read_config_word(hw->pdev, hw->pm_cap + PCI_PM_PMC, &power_control); | 198 | pci_read_config_word(hw->pdev, hw->pm_cap + PCI_PM_PMC, &power_control); |
201 | vaux = (sky2_read8(hw, B0_CTST) & Y2_VAUX_AVAIL) && | 199 | vaux = (sky2_read16(hw, B0_CTST) & Y2_VAUX_AVAIL) && |
202 | (power_control & PCI_PM_CAP_PME_D3cold); | 200 | (power_control & PCI_PM_CAP_PME_D3cold); |
203 | 201 | ||
204 | pci_read_config_word(hw->pdev, hw->pm_cap + PCI_PM_CTRL, &power_control); | 202 | pci_read_config_word(hw->pdev, hw->pm_cap + PCI_PM_CTRL, &power_control); |
@@ -1834,6 +1832,8 @@ static int sky2_poll(struct net_device *dev0, int *budget) | |||
1834 | u16 hwidx; | 1832 | u16 hwidx; |
1835 | u16 tx_done[2] = { TX_NO_STATUS, TX_NO_STATUS }; | 1833 | u16 tx_done[2] = { TX_NO_STATUS, TX_NO_STATUS }; |
1836 | 1834 | ||
1835 | sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ); | ||
1836 | |||
1837 | hwidx = sky2_read16(hw, STAT_PUT_IDX); | 1837 | hwidx = sky2_read16(hw, STAT_PUT_IDX); |
1838 | BUG_ON(hwidx >= STATUS_RING_SIZE); | 1838 | BUG_ON(hwidx >= STATUS_RING_SIZE); |
1839 | rmb(); | 1839 | rmb(); |
@@ -1913,12 +1913,10 @@ static int sky2_poll(struct net_device *dev0, int *budget) | |||
1913 | } | 1913 | } |
1914 | 1914 | ||
1915 | exit_loop: | 1915 | exit_loop: |
1916 | sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ); | ||
1917 | |||
1918 | sky2_tx_check(hw, 0, tx_done[0]); | 1916 | sky2_tx_check(hw, 0, tx_done[0]); |
1919 | sky2_tx_check(hw, 1, tx_done[1]); | 1917 | sky2_tx_check(hw, 1, tx_done[1]); |
1920 | 1918 | ||
1921 | if (sky2_read16(hw, STAT_PUT_IDX) == hw->st_idx) { | 1919 | if (likely(work_done < to_do)) { |
1922 | /* need to restart TX timer */ | 1920 | /* need to restart TX timer */ |
1923 | if (is_ec_a1(hw)) { | 1921 | if (is_ec_a1(hw)) { |
1924 | sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP); | 1922 | sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP); |
@@ -2141,14 +2139,12 @@ static inline u32 sky2_clk2us(const struct sky2_hw *hw, u32 clk) | |||
2141 | 2139 | ||
2142 | static int sky2_reset(struct sky2_hw *hw) | 2140 | static int sky2_reset(struct sky2_hw *hw) |
2143 | { | 2141 | { |
2144 | u32 ctst; | ||
2145 | u16 status; | 2142 | u16 status; |
2146 | u8 t8, pmd_type; | 2143 | u8 t8, pmd_type; |
2147 | int i; | 2144 | int i, err; |
2148 | |||
2149 | ctst = sky2_read32(hw, B0_CTST); | ||
2150 | 2145 | ||
2151 | sky2_write8(hw, B0_CTST, CS_RST_CLR); | 2146 | sky2_write8(hw, B0_CTST, CS_RST_CLR); |
2147 | |||
2152 | hw->chip_id = sky2_read8(hw, B2_CHIP_ID); | 2148 | hw->chip_id = sky2_read8(hw, B2_CHIP_ID); |
2153 | if (hw->chip_id < CHIP_ID_YUKON_XL || hw->chip_id > CHIP_ID_YUKON_FE) { | 2149 | if (hw->chip_id < CHIP_ID_YUKON_XL || hw->chip_id > CHIP_ID_YUKON_FE) { |
2154 | printk(KERN_ERR PFX "%s: unsupported chip type 0x%x\n", | 2150 | printk(KERN_ERR PFX "%s: unsupported chip type 0x%x\n", |
@@ -2156,12 +2152,6 @@ static int sky2_reset(struct sky2_hw *hw) | |||
2156 | return -EOPNOTSUPP; | 2152 | return -EOPNOTSUPP; |
2157 | } | 2153 | } |
2158 | 2154 | ||
2159 | /* ring for status responses */ | ||
2160 | hw->st_le = pci_alloc_consistent(hw->pdev, STATUS_LE_BYTES, | ||
2161 | &hw->st_dma); | ||
2162 | if (!hw->st_le) | ||
2163 | return -ENOMEM; | ||
2164 | |||
2165 | /* disable ASF */ | 2155 | /* disable ASF */ |
2166 | if (hw->chip_id <= CHIP_ID_YUKON_EC) { | 2156 | if (hw->chip_id <= CHIP_ID_YUKON_EC) { |
2167 | sky2_write8(hw, B28_Y2_ASF_STAT_CMD, Y2_ASF_RESET); | 2157 | sky2_write8(hw, B28_Y2_ASF_STAT_CMD, Y2_ASF_RESET); |
@@ -2173,19 +2163,24 @@ static int sky2_reset(struct sky2_hw *hw) | |||
2173 | sky2_write8(hw, B0_CTST, CS_RST_CLR); | 2163 | sky2_write8(hw, B0_CTST, CS_RST_CLR); |
2174 | 2164 | ||
2175 | /* clear PCI errors, if any */ | 2165 | /* clear PCI errors, if any */ |
2176 | pci_read_config_word(hw->pdev, PCI_STATUS, &status); | 2166 | err = pci_read_config_word(hw->pdev, PCI_STATUS, &status); |
2167 | if (err) | ||
2168 | goto pci_err; | ||
2169 | |||
2177 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); | 2170 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); |
2178 | pci_write_config_word(hw->pdev, PCI_STATUS, | 2171 | err = pci_write_config_word(hw->pdev, PCI_STATUS, |
2179 | status | PCI_STATUS_ERROR_BITS); | 2172 | status | PCI_STATUS_ERROR_BITS); |
2173 | if (err) | ||
2174 | goto pci_err; | ||
2180 | 2175 | ||
2181 | sky2_write8(hw, B0_CTST, CS_MRST_CLR); | 2176 | sky2_write8(hw, B0_CTST, CS_MRST_CLR); |
2182 | 2177 | ||
2183 | /* clear any PEX errors */ | 2178 | /* clear any PEX errors */ |
2184 | if (is_pciex(hw)) { | 2179 | if (pci_find_capability(hw->pdev, PCI_CAP_ID_EXP)) { |
2185 | u16 lstat; | 2180 | err = pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT, |
2186 | pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT, | 2181 | 0xffffffffUL); |
2187 | 0xffffffffUL); | 2182 | if (err) |
2188 | pci_read_config_word(hw->pdev, PEX_LNK_STAT, &lstat); | 2183 | goto pci_err; |
2189 | } | 2184 | } |
2190 | 2185 | ||
2191 | pmd_type = sky2_read8(hw, B2_PMD_TYP); | 2186 | pmd_type = sky2_read8(hw, B2_PMD_TYP); |
@@ -2297,6 +2292,14 @@ static int sky2_reset(struct sky2_hw *hw) | |||
2297 | sky2_write8(hw, STAT_ISR_TIMER_CTRL, TIM_START); | 2292 | sky2_write8(hw, STAT_ISR_TIMER_CTRL, TIM_START); |
2298 | 2293 | ||
2299 | return 0; | 2294 | return 0; |
2295 | |||
2296 | pci_err: | ||
2297 | /* This is to catch a BIOS bug workaround where | ||
2298 | * mmconfig table doesn't have other buses. | ||
2299 | */ | ||
2300 | printk(KERN_ERR PFX "%s: can't access PCI config space\n", | ||
2301 | pci_name(hw->pdev)); | ||
2302 | return err; | ||
2300 | } | 2303 | } |
2301 | 2304 | ||
2302 | static u32 sky2_supported_modes(const struct sky2_hw *hw) | 2305 | static u32 sky2_supported_modes(const struct sky2_hw *hw) |
@@ -2551,19 +2554,24 @@ static struct net_device_stats *sky2_get_stats(struct net_device *dev) | |||
2551 | static int sky2_set_mac_address(struct net_device *dev, void *p) | 2554 | static int sky2_set_mac_address(struct net_device *dev, void *p) |
2552 | { | 2555 | { |
2553 | struct sky2_port *sky2 = netdev_priv(dev); | 2556 | struct sky2_port *sky2 = netdev_priv(dev); |
2554 | struct sockaddr *addr = p; | 2557 | struct sky2_hw *hw = sky2->hw; |
2558 | unsigned port = sky2->port; | ||
2559 | const struct sockaddr *addr = p; | ||
2555 | 2560 | ||
2556 | if (!is_valid_ether_addr(addr->sa_data)) | 2561 | if (!is_valid_ether_addr(addr->sa_data)) |
2557 | return -EADDRNOTAVAIL; | 2562 | return -EADDRNOTAVAIL; |
2558 | 2563 | ||
2559 | memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); | 2564 | memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); |
2560 | memcpy_toio(sky2->hw->regs + B2_MAC_1 + sky2->port * 8, | 2565 | memcpy_toio(hw->regs + B2_MAC_1 + port * 8, |
2561 | dev->dev_addr, ETH_ALEN); | 2566 | dev->dev_addr, ETH_ALEN); |
2562 | memcpy_toio(sky2->hw->regs + B2_MAC_2 + sky2->port * 8, | 2567 | memcpy_toio(hw->regs + B2_MAC_2 + port * 8, |
2563 | dev->dev_addr, ETH_ALEN); | 2568 | dev->dev_addr, ETH_ALEN); |
2564 | 2569 | ||
2565 | if (netif_running(dev)) | 2570 | /* virtual address for data */ |
2566 | sky2_phy_reinit(sky2); | 2571 | gma_set_addr(hw, port, GM_SRC_ADDR_2L, dev->dev_addr); |
2572 | |||
2573 | /* physical address: used for pause frames */ | ||
2574 | gma_set_addr(hw, port, GM_SRC_ADDR_1L, dev->dev_addr); | ||
2567 | 2575 | ||
2568 | return 0; | 2576 | return 0; |
2569 | } | 2577 | } |
@@ -2843,7 +2851,7 @@ static int sky2_set_coalesce(struct net_device *dev, | |||
2843 | if (ecmd->rx_coalesce_usecs_irq == 0) | 2851 | if (ecmd->rx_coalesce_usecs_irq == 0) |
2844 | sky2_write8(hw, STAT_ISR_TIMER_CTRL, TIM_STOP); | 2852 | sky2_write8(hw, STAT_ISR_TIMER_CTRL, TIM_STOP); |
2845 | else { | 2853 | else { |
2846 | sky2_write32(hw, STAT_TX_TIMER_INI, | 2854 | sky2_write32(hw, STAT_ISR_TIMER_INI, |
2847 | sky2_us2clk(hw, ecmd->rx_coalesce_usecs_irq)); | 2855 | sky2_us2clk(hw, ecmd->rx_coalesce_usecs_irq)); |
2848 | sky2_write8(hw, STAT_ISR_TIMER_CTRL, TIM_START); | 2856 | sky2_write8(hw, STAT_ISR_TIMER_CTRL, TIM_START); |
2849 | } | 2857 | } |
@@ -3055,6 +3063,61 @@ static void __devinit sky2_show_addr(struct net_device *dev) | |||
3055 | dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); | 3063 | dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); |
3056 | } | 3064 | } |
3057 | 3065 | ||
3066 | /* Handle software interrupt used during MSI test */ | ||
3067 | static irqreturn_t __devinit sky2_test_intr(int irq, void *dev_id, | ||
3068 | struct pt_regs *regs) | ||
3069 | { | ||
3070 | struct sky2_hw *hw = dev_id; | ||
3071 | u32 status = sky2_read32(hw, B0_Y2_SP_ISRC2); | ||
3072 | |||
3073 | if (status == 0) | ||
3074 | return IRQ_NONE; | ||
3075 | |||
3076 | if (status & Y2_IS_IRQ_SW) { | ||
3077 | sky2_write8(hw, B0_CTST, CS_CL_SW_IRQ); | ||
3078 | hw->msi = 1; | ||
3079 | } | ||
3080 | sky2_write32(hw, B0_Y2_SP_ICR, 2); | ||
3081 | |||
3082 | sky2_read32(hw, B0_IMSK); | ||
3083 | return IRQ_HANDLED; | ||
3084 | } | ||
3085 | |||
3086 | /* Test interrupt path by forcing a a software IRQ */ | ||
3087 | static int __devinit sky2_test_msi(struct sky2_hw *hw) | ||
3088 | { | ||
3089 | struct pci_dev *pdev = hw->pdev; | ||
3090 | int i, err; | ||
3091 | |||
3092 | sky2_write32(hw, B0_IMSK, Y2_IS_IRQ_SW); | ||
3093 | |||
3094 | err = request_irq(pdev->irq, sky2_test_intr, SA_SHIRQ, DRV_NAME, hw); | ||
3095 | if (err) { | ||
3096 | printk(KERN_ERR PFX "%s: cannot assign irq %d\n", | ||
3097 | pci_name(pdev), pdev->irq); | ||
3098 | return err; | ||
3099 | } | ||
3100 | |||
3101 | sky2_write8(hw, B0_CTST, CS_ST_SW_IRQ); | ||
3102 | wmb(); | ||
3103 | |||
3104 | for (i = 0; i < 10; i++) { | ||
3105 | barrier(); | ||
3106 | if (hw->msi) | ||
3107 | goto found; | ||
3108 | mdelay(1); | ||
3109 | } | ||
3110 | |||
3111 | err = -EOPNOTSUPP; | ||
3112 | sky2_write8(hw, B0_CTST, CS_CL_SW_IRQ); | ||
3113 | found: | ||
3114 | sky2_write32(hw, B0_IMSK, 0); | ||
3115 | |||
3116 | free_irq(pdev->irq, hw); | ||
3117 | |||
3118 | return err; | ||
3119 | } | ||
3120 | |||
3058 | static int __devinit sky2_probe(struct pci_dev *pdev, | 3121 | static int __devinit sky2_probe(struct pci_dev *pdev, |
3059 | const struct pci_device_id *ent) | 3122 | const struct pci_device_id *ent) |
3060 | { | 3123 | { |
@@ -3135,6 +3198,12 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
3135 | } | 3198 | } |
3136 | hw->pm_cap = pm_cap; | 3199 | hw->pm_cap = pm_cap; |
3137 | 3200 | ||
3201 | /* ring for status responses */ | ||
3202 | hw->st_le = pci_alloc_consistent(hw->pdev, STATUS_LE_BYTES, | ||
3203 | &hw->st_dma); | ||
3204 | if (!hw->st_le) | ||
3205 | goto err_out_iounmap; | ||
3206 | |||
3138 | err = sky2_reset(hw); | 3207 | err = sky2_reset(hw); |
3139 | if (err) | 3208 | if (err) |
3140 | goto err_out_iounmap; | 3209 | goto err_out_iounmap; |
@@ -3169,7 +3238,22 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
3169 | } | 3238 | } |
3170 | } | 3239 | } |
3171 | 3240 | ||
3172 | err = request_irq(pdev->irq, sky2_intr, SA_SHIRQ, DRV_NAME, hw); | 3241 | if (!disable_msi && pci_enable_msi(pdev) == 0) { |
3242 | err = sky2_test_msi(hw); | ||
3243 | if (err == -EOPNOTSUPP) { | ||
3244 | /* MSI test failed, go back to INTx mode */ | ||
3245 | printk(KERN_WARNING PFX "%s: No interrupt was generated using MSI, " | ||
3246 | "switching to INTx mode. Please report this failure to " | ||
3247 | "the PCI maintainer and include system chipset information.\n", | ||
3248 | pci_name(pdev)); | ||
3249 | pci_disable_msi(pdev); | ||
3250 | } | ||
3251 | else if (err) | ||
3252 | goto err_out_unregister; | ||
3253 | } | ||
3254 | |||
3255 | err = request_irq(pdev->irq, sky2_intr, SA_SHIRQ | SA_SAMPLE_RANDOM, | ||
3256 | DRV_NAME, hw); | ||
3173 | if (err) { | 3257 | if (err) { |
3174 | printk(KERN_ERR PFX "%s: cannot assign irq %d\n", | 3258 | printk(KERN_ERR PFX "%s: cannot assign irq %d\n", |
3175 | pci_name(pdev), pdev->irq); | 3259 | pci_name(pdev), pdev->irq); |
@@ -3184,6 +3268,8 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
3184 | return 0; | 3268 | return 0; |
3185 | 3269 | ||
3186 | err_out_unregister: | 3270 | err_out_unregister: |
3271 | if (hw->msi) | ||
3272 | pci_disable_msi(pdev); | ||
3187 | if (dev1) { | 3273 | if (dev1) { |
3188 | unregister_netdev(dev1); | 3274 | unregister_netdev(dev1); |
3189 | free_netdev(dev1); | 3275 | free_netdev(dev1); |
@@ -3226,6 +3312,8 @@ static void __devexit sky2_remove(struct pci_dev *pdev) | |||
3226 | sky2_read8(hw, B0_CTST); | 3312 | sky2_read8(hw, B0_CTST); |
3227 | 3313 | ||
3228 | free_irq(pdev->irq, hw); | 3314 | free_irq(pdev->irq, hw); |
3315 | if (hw->msi) | ||
3316 | pci_disable_msi(pdev); | ||
3229 | pci_free_consistent(pdev, STATUS_LE_BYTES, hw->st_le, hw->st_dma); | 3317 | pci_free_consistent(pdev, STATUS_LE_BYTES, hw->st_le, hw->st_dma); |
3230 | pci_release_regions(pdev); | 3318 | pci_release_regions(pdev); |
3231 | pci_disable_device(pdev); | 3319 | pci_disable_device(pdev); |
@@ -3263,25 +3351,33 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state) | |||
3263 | static int sky2_resume(struct pci_dev *pdev) | 3351 | static int sky2_resume(struct pci_dev *pdev) |
3264 | { | 3352 | { |
3265 | struct sky2_hw *hw = pci_get_drvdata(pdev); | 3353 | struct sky2_hw *hw = pci_get_drvdata(pdev); |
3266 | int i; | 3354 | int i, err; |
3267 | 3355 | ||
3268 | pci_restore_state(pdev); | 3356 | pci_restore_state(pdev); |
3269 | pci_enable_wake(pdev, PCI_D0, 0); | 3357 | pci_enable_wake(pdev, PCI_D0, 0); |
3270 | sky2_set_power_state(hw, PCI_D0); | 3358 | err = sky2_set_power_state(hw, PCI_D0); |
3359 | if (err) | ||
3360 | goto out; | ||
3271 | 3361 | ||
3272 | sky2_reset(hw); | 3362 | err = sky2_reset(hw); |
3363 | if (err) | ||
3364 | goto out; | ||
3273 | 3365 | ||
3274 | for (i = 0; i < 2; i++) { | 3366 | for (i = 0; i < 2; i++) { |
3275 | struct net_device *dev = hw->dev[i]; | 3367 | struct net_device *dev = hw->dev[i]; |
3276 | if (dev) { | 3368 | if (dev && netif_running(dev)) { |
3277 | if (netif_running(dev)) { | 3369 | netif_device_attach(dev); |
3278 | netif_device_attach(dev); | 3370 | err = sky2_up(dev); |
3279 | if (sky2_up(dev)) | 3371 | if (err) { |
3280 | dev_close(dev); | 3372 | printk(KERN_ERR PFX "%s: could not up: %d\n", |
3373 | dev->name, err); | ||
3374 | dev_close(dev); | ||
3375 | break; | ||
3281 | } | 3376 | } |
3282 | } | 3377 | } |
3283 | } | 3378 | } |
3284 | return 0; | 3379 | out: |
3380 | return err; | ||
3285 | } | 3381 | } |
3286 | #endif | 3382 | #endif |
3287 | 3383 | ||
diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h index 95518921001c..fd12c289a238 100644 --- a/drivers/net/sky2.h +++ b/drivers/net/sky2.h | |||
@@ -1841,6 +1841,7 @@ struct sky2_hw { | |||
1841 | struct net_device *dev[2]; | 1841 | struct net_device *dev[2]; |
1842 | 1842 | ||
1843 | int pm_cap; | 1843 | int pm_cap; |
1844 | int msi; | ||
1844 | u8 chip_id; | 1845 | u8 chip_id; |
1845 | u8 chip_rev; | 1846 | u8 chip_rev; |
1846 | u8 copper; | 1847 | u8 copper; |
@@ -1867,14 +1868,6 @@ static inline u8 sky2_read8(const struct sky2_hw *hw, unsigned reg) | |||
1867 | return readb(hw->regs + reg); | 1868 | return readb(hw->regs + reg); |
1868 | } | 1869 | } |
1869 | 1870 | ||
1870 | /* This should probably go away, bus based tweeks suck */ | ||
1871 | static inline int is_pciex(const struct sky2_hw *hw) | ||
1872 | { | ||
1873 | u32 status; | ||
1874 | pci_read_config_dword(hw->pdev, PCI_DEV_STATUS, &status); | ||
1875 | return (status & PCI_OS_PCI_X) == 0; | ||
1876 | } | ||
1877 | |||
1878 | static inline void sky2_write32(const struct sky2_hw *hw, unsigned reg, u32 val) | 1871 | static inline void sky2_write32(const struct sky2_hw *hw, unsigned reg, u32 val) |
1879 | { | 1872 | { |
1880 | writel(val, hw->regs + reg); | 1873 | writel(val, hw->regs + reg); |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index f2d1dafde087..e7dc653d5bd6 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -69,8 +69,8 @@ | |||
69 | 69 | ||
70 | #define DRV_MODULE_NAME "tg3" | 70 | #define DRV_MODULE_NAME "tg3" |
71 | #define PFX DRV_MODULE_NAME ": " | 71 | #define PFX DRV_MODULE_NAME ": " |
72 | #define DRV_MODULE_VERSION "3.48" | 72 | #define DRV_MODULE_VERSION "3.49" |
73 | #define DRV_MODULE_RELDATE "Jan 16, 2006" | 73 | #define DRV_MODULE_RELDATE "Feb 2, 2006" |
74 | 74 | ||
75 | #define TG3_DEF_MAC_MODE 0 | 75 | #define TG3_DEF_MAC_MODE 0 |
76 | #define TG3_DEF_RX_MODE 0 | 76 | #define TG3_DEF_RX_MODE 0 |
@@ -3482,6 +3482,17 @@ static void tg3_reset_task(void *_data) | |||
3482 | struct tg3 *tp = _data; | 3482 | struct tg3 *tp = _data; |
3483 | unsigned int restart_timer; | 3483 | unsigned int restart_timer; |
3484 | 3484 | ||
3485 | tg3_full_lock(tp, 0); | ||
3486 | tp->tg3_flags |= TG3_FLAG_IN_RESET_TASK; | ||
3487 | |||
3488 | if (!netif_running(tp->dev)) { | ||
3489 | tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK; | ||
3490 | tg3_full_unlock(tp); | ||
3491 | return; | ||
3492 | } | ||
3493 | |||
3494 | tg3_full_unlock(tp); | ||
3495 | |||
3485 | tg3_netif_stop(tp); | 3496 | tg3_netif_stop(tp); |
3486 | 3497 | ||
3487 | tg3_full_lock(tp, 1); | 3498 | tg3_full_lock(tp, 1); |
@@ -3494,10 +3505,12 @@ static void tg3_reset_task(void *_data) | |||
3494 | 3505 | ||
3495 | tg3_netif_start(tp); | 3506 | tg3_netif_start(tp); |
3496 | 3507 | ||
3497 | tg3_full_unlock(tp); | ||
3498 | |||
3499 | if (restart_timer) | 3508 | if (restart_timer) |
3500 | mod_timer(&tp->timer, jiffies + 1); | 3509 | mod_timer(&tp->timer, jiffies + 1); |
3510 | |||
3511 | tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK; | ||
3512 | |||
3513 | tg3_full_unlock(tp); | ||
3501 | } | 3514 | } |
3502 | 3515 | ||
3503 | static void tg3_tx_timeout(struct net_device *dev) | 3516 | static void tg3_tx_timeout(struct net_device *dev) |
@@ -6786,6 +6799,13 @@ static int tg3_close(struct net_device *dev) | |||
6786 | { | 6799 | { |
6787 | struct tg3 *tp = netdev_priv(dev); | 6800 | struct tg3 *tp = netdev_priv(dev); |
6788 | 6801 | ||
6802 | /* Calling flush_scheduled_work() may deadlock because | ||
6803 | * linkwatch_event() may be on the workqueue and it will try to get | ||
6804 | * the rtnl_lock which we are holding. | ||
6805 | */ | ||
6806 | while (tp->tg3_flags & TG3_FLAG_IN_RESET_TASK) | ||
6807 | msleep(1); | ||
6808 | |||
6789 | netif_stop_queue(dev); | 6809 | netif_stop_queue(dev); |
6790 | 6810 | ||
6791 | del_timer_sync(&tp->timer); | 6811 | del_timer_sync(&tp->timer); |
@@ -10880,6 +10900,7 @@ static void __devexit tg3_remove_one(struct pci_dev *pdev) | |||
10880 | if (dev) { | 10900 | if (dev) { |
10881 | struct tg3 *tp = netdev_priv(dev); | 10901 | struct tg3 *tp = netdev_priv(dev); |
10882 | 10902 | ||
10903 | flush_scheduled_work(); | ||
10883 | unregister_netdev(dev); | 10904 | unregister_netdev(dev); |
10884 | if (tp->regs) { | 10905 | if (tp->regs) { |
10885 | iounmap(tp->regs); | 10906 | iounmap(tp->regs); |
@@ -10901,6 +10922,7 @@ static int tg3_suspend(struct pci_dev *pdev, pm_message_t state) | |||
10901 | if (!netif_running(dev)) | 10922 | if (!netif_running(dev)) |
10902 | return 0; | 10923 | return 0; |
10903 | 10924 | ||
10925 | flush_scheduled_work(); | ||
10904 | tg3_netif_stop(tp); | 10926 | tg3_netif_stop(tp); |
10905 | 10927 | ||
10906 | del_timer_sync(&tp->timer); | 10928 | del_timer_sync(&tp->timer); |
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index e8243305f0e8..7f4b7f6ac40d 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
@@ -2162,6 +2162,7 @@ struct tg3 { | |||
2162 | #define TG3_FLAG_JUMBO_RING_ENABLE 0x00800000 | 2162 | #define TG3_FLAG_JUMBO_RING_ENABLE 0x00800000 |
2163 | #define TG3_FLAG_10_100_ONLY 0x01000000 | 2163 | #define TG3_FLAG_10_100_ONLY 0x01000000 |
2164 | #define TG3_FLAG_PAUSE_AUTONEG 0x02000000 | 2164 | #define TG3_FLAG_PAUSE_AUTONEG 0x02000000 |
2165 | #define TG3_FLAG_IN_RESET_TASK 0x04000000 | ||
2165 | #define TG3_FLAG_BROKEN_CHECKSUMS 0x10000000 | 2166 | #define TG3_FLAG_BROKEN_CHECKSUMS 0x10000000 |
2166 | #define TG3_FLAG_GOT_SERDES_FLOWCTL 0x20000000 | 2167 | #define TG3_FLAG_GOT_SERDES_FLOWCTL 0x20000000 |
2167 | #define TG3_FLAG_SPLIT_MODE 0x40000000 | 2168 | #define TG3_FLAG_SPLIT_MODE 0x40000000 |
diff --git a/drivers/net/tulip/uli526x.c b/drivers/net/tulip/uli526x.c index 983981666800..238e9c72cb3a 100644 --- a/drivers/net/tulip/uli526x.c +++ b/drivers/net/tulip/uli526x.c | |||
@@ -214,7 +214,7 @@ static u32 uli526x_cr6_user_set; | |||
214 | /* For module input parameter */ | 214 | /* For module input parameter */ |
215 | static int debug; | 215 | static int debug; |
216 | static u32 cr6set; | 216 | static u32 cr6set; |
217 | static unsigned char mode = 8; | 217 | static int mode = 8; |
218 | 218 | ||
219 | /* function declaration ------------------------------------- */ | 219 | /* function declaration ------------------------------------- */ |
220 | static int uli526x_open(struct net_device *); | 220 | static int uli526x_open(struct net_device *); |
diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c index 2f61a47b4716..1ff5de076d21 100644 --- a/drivers/net/wan/dscc4.c +++ b/drivers/net/wan/dscc4.c | |||
@@ -1943,7 +1943,7 @@ static int dscc4_init_ring(struct net_device *dev) | |||
1943 | (++i%TX_RING_SIZE)*sizeof(*tx_fd)); | 1943 | (++i%TX_RING_SIZE)*sizeof(*tx_fd)); |
1944 | } while (i < TX_RING_SIZE); | 1944 | } while (i < TX_RING_SIZE); |
1945 | 1945 | ||
1946 | if (dscc4_init_dummy_skb(dpriv) < 0) | 1946 | if (!dscc4_init_dummy_skb(dpriv)) |
1947 | goto err_free_dma_tx; | 1947 | goto err_free_dma_tx; |
1948 | 1948 | ||
1949 | memset(dpriv->rx_skbuff, 0, sizeof(struct sk_buff *)*RX_RING_SIZE); | 1949 | memset(dpriv->rx_skbuff, 0, sizeof(struct sk_buff *)*RX_RING_SIZE); |
diff --git a/drivers/net/wan/pci200syn.c b/drivers/net/wan/pci200syn.c index 8dea07b47999..eba8e5cfacc2 100644 --- a/drivers/net/wan/pci200syn.c +++ b/drivers/net/wan/pci200syn.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <linux/netdevice.h> | 29 | #include <linux/netdevice.h> |
30 | #include <linux/hdlc.h> | 30 | #include <linux/hdlc.h> |
31 | #include <linux/pci.h> | 31 | #include <linux/pci.h> |
32 | #include <asm/delay.h> | 32 | #include <linux/delay.h> |
33 | #include <asm/io.h> | 33 | #include <asm/io.h> |
34 | 34 | ||
35 | #include "hd64572.h" | 35 | #include "hd64572.h" |
diff --git a/drivers/net/wan/wanxl.c b/drivers/net/wan/wanxl.c index 9c1e10602f2b..9d3b51c3ef54 100644 --- a/drivers/net/wan/wanxl.c +++ b/drivers/net/wan/wanxl.c | |||
@@ -27,8 +27,8 @@ | |||
27 | #include <linux/hdlc.h> | 27 | #include <linux/hdlc.h> |
28 | #include <linux/pci.h> | 28 | #include <linux/pci.h> |
29 | #include <linux/dma-mapping.h> | 29 | #include <linux/dma-mapping.h> |
30 | #include <linux/delay.h> | ||
30 | #include <asm/io.h> | 31 | #include <asm/io.h> |
31 | #include <asm/delay.h> | ||
32 | 32 | ||
33 | #include "wanxl.h" | 33 | #include "wanxl.h" |
34 | 34 | ||
diff --git a/drivers/net/wireless/hostap/Kconfig b/drivers/net/wireless/hostap/Kconfig index c8f6286dd35f..308f773ad566 100644 --- a/drivers/net/wireless/hostap/Kconfig +++ b/drivers/net/wireless/hostap/Kconfig | |||
@@ -75,7 +75,7 @@ config HOSTAP_PCI | |||
75 | 75 | ||
76 | config HOSTAP_CS | 76 | config HOSTAP_CS |
77 | tristate "Host AP driver for Prism2/2.5/3 PC Cards" | 77 | tristate "Host AP driver for Prism2/2.5/3 PC Cards" |
78 | depends on PCMCIA!=n && HOSTAP | 78 | depends on PCMCIA && HOSTAP |
79 | ---help--- | 79 | ---help--- |
80 | Host AP driver's version for Prism2/2.5/3 PC Cards. | 80 | Host AP driver's version for Prism2/2.5/3 PC Cards. |
81 | 81 | ||
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c index 8bf02763b5c7..6290c9f7e939 100644 --- a/drivers/net/wireless/ipw2100.c +++ b/drivers/net/wireless/ipw2100.c | |||
@@ -2201,6 +2201,17 @@ static int ipw2100_alloc_skb(struct ipw2100_priv *priv, | |||
2201 | #define SEARCH_SNAPSHOT 1 | 2201 | #define SEARCH_SNAPSHOT 1 |
2202 | 2202 | ||
2203 | #define SNAPSHOT_ADDR(ofs) (priv->snapshot[((ofs) >> 12) & 0xff] + ((ofs) & 0xfff)) | 2203 | #define SNAPSHOT_ADDR(ofs) (priv->snapshot[((ofs) >> 12) & 0xff] + ((ofs) & 0xfff)) |
2204 | static void ipw2100_snapshot_free(struct ipw2100_priv *priv) | ||
2205 | { | ||
2206 | int i; | ||
2207 | if (!priv->snapshot[0]) | ||
2208 | return; | ||
2209 | for (i = 0; i < 0x30; i++) | ||
2210 | kfree(priv->snapshot[i]); | ||
2211 | priv->snapshot[0] = NULL; | ||
2212 | } | ||
2213 | |||
2214 | #ifdef CONFIG_IPW2100_DEBUG_C3 | ||
2204 | static int ipw2100_snapshot_alloc(struct ipw2100_priv *priv) | 2215 | static int ipw2100_snapshot_alloc(struct ipw2100_priv *priv) |
2205 | { | 2216 | { |
2206 | int i; | 2217 | int i; |
@@ -2221,16 +2232,6 @@ static int ipw2100_snapshot_alloc(struct ipw2100_priv *priv) | |||
2221 | return 1; | 2232 | return 1; |
2222 | } | 2233 | } |
2223 | 2234 | ||
2224 | static void ipw2100_snapshot_free(struct ipw2100_priv *priv) | ||
2225 | { | ||
2226 | int i; | ||
2227 | if (!priv->snapshot[0]) | ||
2228 | return; | ||
2229 | for (i = 0; i < 0x30; i++) | ||
2230 | kfree(priv->snapshot[i]); | ||
2231 | priv->snapshot[0] = NULL; | ||
2232 | } | ||
2233 | |||
2234 | static u32 ipw2100_match_buf(struct ipw2100_priv *priv, u8 * in_buf, | 2235 | static u32 ipw2100_match_buf(struct ipw2100_priv *priv, u8 * in_buf, |
2235 | size_t len, int mode) | 2236 | size_t len, int mode) |
2236 | { | 2237 | { |
@@ -2269,6 +2270,7 @@ static u32 ipw2100_match_buf(struct ipw2100_priv *priv, u8 * in_buf, | |||
2269 | 2270 | ||
2270 | return ret; | 2271 | return ret; |
2271 | } | 2272 | } |
2273 | #endif | ||
2272 | 2274 | ||
2273 | /* | 2275 | /* |
2274 | * | 2276 | * |
@@ -7112,11 +7114,17 @@ static int ipw2100_wx_set_txpow(struct net_device *dev, | |||
7112 | { | 7114 | { |
7113 | struct ipw2100_priv *priv = ieee80211_priv(dev); | 7115 | struct ipw2100_priv *priv = ieee80211_priv(dev); |
7114 | int err = 0, value; | 7116 | int err = 0, value; |
7117 | |||
7118 | if (ipw_radio_kill_sw(priv, wrqu->txpower.disabled)) | ||
7119 | return -EINPROGRESS; | ||
7115 | 7120 | ||
7116 | if (priv->ieee->iw_mode != IW_MODE_ADHOC) | 7121 | if (priv->ieee->iw_mode != IW_MODE_ADHOC) |
7122 | return 0; | ||
7123 | |||
7124 | if ((wrqu->txpower.flags & IW_TXPOW_TYPE) != IW_TXPOW_DBM) | ||
7117 | return -EINVAL; | 7125 | return -EINVAL; |
7118 | 7126 | ||
7119 | if (wrqu->txpower.disabled == 1 || wrqu->txpower.fixed == 0) | 7127 | if (wrqu->txpower.fixed == 0) |
7120 | value = IPW_TX_POWER_DEFAULT; | 7128 | value = IPW_TX_POWER_DEFAULT; |
7121 | else { | 7129 | else { |
7122 | if (wrqu->txpower.value < IPW_TX_POWER_MIN_DBM || | 7130 | if (wrqu->txpower.value < IPW_TX_POWER_MIN_DBM || |
@@ -7151,24 +7159,19 @@ static int ipw2100_wx_get_txpow(struct net_device *dev, | |||
7151 | 7159 | ||
7152 | struct ipw2100_priv *priv = ieee80211_priv(dev); | 7160 | struct ipw2100_priv *priv = ieee80211_priv(dev); |
7153 | 7161 | ||
7154 | if (priv->ieee->iw_mode != IW_MODE_ADHOC) { | 7162 | wrqu->txpower.disabled = (priv->status & STATUS_RF_KILL_MASK) ? 1 : 0; |
7155 | wrqu->power.disabled = 1; | ||
7156 | return 0; | ||
7157 | } | ||
7158 | 7163 | ||
7159 | if (priv->tx_power == IPW_TX_POWER_DEFAULT) { | 7164 | if (priv->tx_power == IPW_TX_POWER_DEFAULT) { |
7160 | wrqu->power.fixed = 0; | 7165 | wrqu->txpower.fixed = 0; |
7161 | wrqu->power.value = IPW_TX_POWER_MAX_DBM; | 7166 | wrqu->txpower.value = IPW_TX_POWER_MAX_DBM; |
7162 | wrqu->power.disabled = 1; | ||
7163 | } else { | 7167 | } else { |
7164 | wrqu->power.disabled = 0; | 7168 | wrqu->txpower.fixed = 1; |
7165 | wrqu->power.fixed = 1; | 7169 | wrqu->txpower.value = priv->tx_power; |
7166 | wrqu->power.value = priv->tx_power; | ||
7167 | } | 7170 | } |
7168 | 7171 | ||
7169 | wrqu->power.flags = IW_TXPOW_DBM; | 7172 | wrqu->txpower.flags = IW_TXPOW_DBM; |
7170 | 7173 | ||
7171 | IPW_DEBUG_WX("GET TX Power -> %d \n", wrqu->power.value); | 7174 | IPW_DEBUG_WX("GET TX Power -> %d \n", wrqu->txpower.value); |
7172 | 7175 | ||
7173 | return 0; | 7176 | return 0; |
7174 | } | 7177 | } |
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index 4c28e332ecc3..14beab4bc91c 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
@@ -2456,7 +2456,7 @@ static void ipw_eeprom_init_sram(struct ipw_priv *priv) | |||
2456 | copy. Otherwise let the firmware know to perform the operation | 2456 | copy. Otherwise let the firmware know to perform the operation |
2457 | on it's own | 2457 | on it's own |
2458 | */ | 2458 | */ |
2459 | if ((priv->eeprom + EEPROM_VERSION) != 0) { | 2459 | if (priv->eeprom[EEPROM_VERSION] != 0) { |
2460 | IPW_DEBUG_INFO("Writing EEPROM data into SRAM\n"); | 2460 | IPW_DEBUG_INFO("Writing EEPROM data into SRAM\n"); |
2461 | 2461 | ||
2462 | /* write the eeprom data to sram */ | 2462 | /* write the eeprom data to sram */ |
@@ -8012,6 +8012,10 @@ static int ipw_sw_reset(struct ipw_priv *priv, int init) | |||
8012 | else | 8012 | else |
8013 | IPW_DEBUG_INFO("Auto adhoc creation disabled.\n"); | 8013 | IPW_DEBUG_INFO("Auto adhoc creation disabled.\n"); |
8014 | 8014 | ||
8015 | priv->config &= ~CFG_STATIC_ESSID; | ||
8016 | priv->essid_len = 0; | ||
8017 | memset(priv->essid, 0, IW_ESSID_MAX_SIZE); | ||
8018 | |||
8015 | if (disable) { | 8019 | if (disable) { |
8016 | priv->status |= STATUS_RF_KILL_SW; | 8020 | priv->status |= STATUS_RF_KILL_SW; |
8017 | IPW_DEBUG_INFO("Radio disabled.\n"); | 8021 | IPW_DEBUG_INFO("Radio disabled.\n"); |
@@ -11035,7 +11039,6 @@ static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
11035 | net_dev->set_multicast_list = ipw_net_set_multicast_list; | 11039 | net_dev->set_multicast_list = ipw_net_set_multicast_list; |
11036 | net_dev->set_mac_address = ipw_net_set_mac_address; | 11040 | net_dev->set_mac_address = ipw_net_set_mac_address; |
11037 | priv->wireless_data.spy_data = &priv->ieee->spy_data; | 11041 | priv->wireless_data.spy_data = &priv->ieee->spy_data; |
11038 | priv->wireless_data.ieee80211 = priv->ieee; | ||
11039 | net_dev->wireless_data = &priv->wireless_data; | 11042 | net_dev->wireless_data = &priv->wireless_data; |
11040 | net_dev->wireless_handlers = &ipw_wx_handler_def; | 11043 | net_dev->wireless_handlers = &ipw_wx_handler_def; |
11041 | net_dev->ethtool_ops = &ipw_ethtool_ops; | 11044 | net_dev->ethtool_ops = &ipw_ethtool_ops; |
@@ -11121,8 +11124,8 @@ static void ipw_pci_remove(struct pci_dev *pdev) | |||
11121 | /* Free MAC hash list for ADHOC */ | 11124 | /* Free MAC hash list for ADHOC */ |
11122 | for (i = 0; i < IPW_IBSS_MAC_HASH_SIZE; i++) { | 11125 | for (i = 0; i < IPW_IBSS_MAC_HASH_SIZE; i++) { |
11123 | list_for_each_safe(p, q, &priv->ibss_mac_hash[i]) { | 11126 | list_for_each_safe(p, q, &priv->ibss_mac_hash[i]) { |
11124 | kfree(list_entry(p, struct ipw_ibss_seq, list)); | ||
11125 | list_del(p); | 11127 | list_del(p); |
11128 | kfree(list_entry(p, struct ipw_ibss_seq, list)); | ||
11126 | } | 11129 | } |
11127 | } | 11130 | } |
11128 | 11131 | ||
diff --git a/drivers/net/wireless/orinoco_cs.c b/drivers/net/wireless/orinoco_cs.c index b664708481cc..3c128b692bce 100644 --- a/drivers/net/wireless/orinoco_cs.c +++ b/drivers/net/wireless/orinoco_cs.c | |||
@@ -261,13 +261,13 @@ orinoco_cs_config(dev_link_t *link) | |||
261 | /* Note that the CIS values need to be rescaled */ | 261 | /* Note that the CIS values need to be rescaled */ |
262 | if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) { | 262 | if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) { |
263 | if (conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000) { | 263 | if (conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000) { |
264 | DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, CIS = %d)\n", conf.Vcc, cfg->vcc.param[CISTPL_POWER_VNOM] / 10000); | 264 | DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, cfg CIS = %d)\n", conf.Vcc, cfg->vcc.param[CISTPL_POWER_VNOM] / 10000); |
265 | if (!ignore_cis_vcc) | 265 | if (!ignore_cis_vcc) |
266 | goto next_entry; | 266 | goto next_entry; |
267 | } | 267 | } |
268 | } else if (dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) { | 268 | } else if (dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) { |
269 | if (conf.Vcc != dflt.vcc.param[CISTPL_POWER_VNOM] / 10000) { | 269 | if (conf.Vcc != dflt.vcc.param[CISTPL_POWER_VNOM] / 10000) { |
270 | DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, CIS = %d)\n", conf.Vcc, dflt.vcc.param[CISTPL_POWER_VNOM] / 10000); | 270 | DEBUG(2, "orinoco_cs_config: Vcc mismatch (conf.Vcc = %d, dflt CIS = %d)\n", conf.Vcc, dflt.vcc.param[CISTPL_POWER_VNOM] / 10000); |
271 | if(!ignore_cis_vcc) | 271 | if(!ignore_cis_vcc) |
272 | goto next_entry; | 272 | goto next_entry; |
273 | } | 273 | } |
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c index c5cd61c7f927..e5bb9f5ae429 100644 --- a/drivers/net/wireless/prism54/isl_ioctl.c +++ b/drivers/net/wireless/prism54/isl_ioctl.c | |||
@@ -748,7 +748,7 @@ prism54_get_essid(struct net_device *ndev, struct iw_request_info *info, | |||
748 | if (essid->length) { | 748 | if (essid->length) { |
749 | dwrq->flags = 1; /* set ESSID to ON for Wireless Extensions */ | 749 | dwrq->flags = 1; /* set ESSID to ON for Wireless Extensions */ |
750 | /* if it is to big, trunk it */ | 750 | /* if it is to big, trunk it */ |
751 | dwrq->length = min(IW_ESSID_MAX_SIZE, essid->length); | 751 | dwrq->length = min((u8)IW_ESSID_MAX_SIZE, essid->length); |
752 | } else { | 752 | } else { |
753 | dwrq->flags = 0; | 753 | dwrq->flags = 0; |
754 | dwrq->length = 0; | 754 | dwrq->length = 0; |