diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-07-30 18:14:50 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-07-30 18:14:50 -0400 |
commit | de745fb27983770ebfdeaa70f8a36f791fb33786 (patch) | |
tree | 701555a1a7a2a5ff9a6c67896cf1ea089597750e /drivers/net | |
parent | 08cd84c81f27d5bd22ba958b7cae6d566c509280 (diff) | |
parent | a670fcb43f01a67ef56176afc76e5d43d128b25c (diff) |
/spare/repo/netdev-2.6 branch 'ieee80211'
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/3c505.c | 2 | ||||
-rw-r--r-- | drivers/net/8139too.c | 6 | ||||
-rw-r--r-- | drivers/net/Kconfig | 54 | ||||
-rwxr-xr-x | drivers/net/amd8111e.c | 2 | ||||
-rw-r--r-- | drivers/net/cs89x0.c | 1 | ||||
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 29 | ||||
-rw-r--r-- | drivers/net/eql.c | 16 | ||||
-rw-r--r-- | drivers/net/ne.c | 4 | ||||
-rw-r--r-- | drivers/net/pcmcia/nmclan_cs.c | 2 | ||||
-rw-r--r-- | drivers/net/pcmcia/pcnet_cs.c | 7 | ||||
-rw-r--r-- | drivers/net/pcmcia/smc91c92_cs.c | 11 | ||||
-rw-r--r-- | drivers/net/pcmcia/xirc2ps_cs.c | 2 | ||||
-rw-r--r-- | drivers/net/plip.c | 29 | ||||
-rw-r--r-- | drivers/net/tg3.c | 417 | ||||
-rw-r--r-- | drivers/net/tg3.h | 15 | ||||
-rw-r--r-- | drivers/net/via-velocity.h | 4 | ||||
-rw-r--r-- | drivers/net/wan/sdla_fr.c | 7 | ||||
-rw-r--r-- | drivers/net/wan/sdla_ft1.c | 3 | ||||
-rw-r--r-- | drivers/net/wan/sdla_ppp.c | 3 | ||||
-rw-r--r-- | drivers/net/wan/sdla_x25.c | 3 | ||||
-rw-r--r-- | drivers/net/wan/wanpipe_multppp.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/airo.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/orinoco_cs.c | 2 |
23 files changed, 473 insertions, 157 deletions
diff --git a/drivers/net/3c505.c b/drivers/net/3c505.c index ad17f17e8e7a..111601ca4ca3 100644 --- a/drivers/net/3c505.c +++ b/drivers/net/3c505.c | |||
@@ -272,7 +272,7 @@ static inline void set_hsf(struct net_device *dev, int hsf) | |||
272 | 272 | ||
273 | static int start_receive(struct net_device *, pcb_struct *); | 273 | static int start_receive(struct net_device *, pcb_struct *); |
274 | 274 | ||
275 | inline static void adapter_reset(struct net_device *dev) | 275 | static inline void adapter_reset(struct net_device *dev) |
276 | { | 276 | { |
277 | unsigned long timeout; | 277 | unsigned long timeout; |
278 | elp_device *adapter = dev->priv; | 278 | elp_device *adapter = dev->priv; |
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index 5a4a08a7c951..4c2cf7bbd252 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c | |||
@@ -126,14 +126,14 @@ | |||
126 | #define USE_IO_OPS 1 | 126 | #define USE_IO_OPS 1 |
127 | #endif | 127 | #endif |
128 | 128 | ||
129 | /* define to 1 to enable copious debugging info */ | 129 | /* define to 1, 2 or 3 to enable copious debugging info */ |
130 | #undef RTL8139_DEBUG | 130 | #define RTL8139_DEBUG 0 |
131 | 131 | ||
132 | /* define to 1 to disable lightweight runtime debugging checks */ | 132 | /* define to 1 to disable lightweight runtime debugging checks */ |
133 | #undef RTL8139_NDEBUG | 133 | #undef RTL8139_NDEBUG |
134 | 134 | ||
135 | 135 | ||
136 | #ifdef RTL8139_DEBUG | 136 | #if RTL8139_DEBUG |
137 | /* note: prints function name for you */ | 137 | /* note: prints function name for you */ |
138 | # define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args) | 138 | # define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args) |
139 | #else | 139 | #else |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 9a07ff7a7777..8a835eb58808 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -23,9 +23,12 @@ config NETDEVICES | |||
23 | 23 | ||
24 | If unsure, say Y. | 24 | If unsure, say Y. |
25 | 25 | ||
26 | # All the following symbols are dependent on NETDEVICES - do not repeat | ||
27 | # that for each of the symbols. | ||
28 | if NETDEVICES | ||
29 | |||
26 | config DUMMY | 30 | config DUMMY |
27 | tristate "Dummy net driver support" | 31 | tristate "Dummy net driver support" |
28 | depends on NETDEVICES | ||
29 | ---help--- | 32 | ---help--- |
30 | This is essentially a bit-bucket device (i.e. traffic you send to | 33 | This is essentially a bit-bucket device (i.e. traffic you send to |
31 | this device is consigned into oblivion) with a configurable IP | 34 | this device is consigned into oblivion) with a configurable IP |
@@ -45,7 +48,6 @@ config DUMMY | |||
45 | 48 | ||
46 | config BONDING | 49 | config BONDING |
47 | tristate "Bonding driver support" | 50 | tristate "Bonding driver support" |
48 | depends on NETDEVICES | ||
49 | depends on INET | 51 | depends on INET |
50 | ---help--- | 52 | ---help--- |
51 | Say 'Y' or 'M' if you wish to be able to 'bond' multiple Ethernet | 53 | Say 'Y' or 'M' if you wish to be able to 'bond' multiple Ethernet |
@@ -63,7 +65,6 @@ config BONDING | |||
63 | 65 | ||
64 | config EQUALIZER | 66 | config EQUALIZER |
65 | tristate "EQL (serial line load balancing) support" | 67 | tristate "EQL (serial line load balancing) support" |
66 | depends on NETDEVICES | ||
67 | ---help--- | 68 | ---help--- |
68 | If you have two serial connections to some other computer (this | 69 | If you have two serial connections to some other computer (this |
69 | usually requires two modems and two telephone lines) and you use | 70 | usually requires two modems and two telephone lines) and you use |
@@ -83,7 +84,6 @@ config EQUALIZER | |||
83 | 84 | ||
84 | config TUN | 85 | config TUN |
85 | tristate "Universal TUN/TAP device driver support" | 86 | tristate "Universal TUN/TAP device driver support" |
86 | depends on NETDEVICES | ||
87 | select CRC32 | 87 | select CRC32 |
88 | ---help--- | 88 | ---help--- |
89 | TUN/TAP provides packet reception and transmission for user space | 89 | TUN/TAP provides packet reception and transmission for user space |
@@ -107,7 +107,7 @@ config TUN | |||
107 | 107 | ||
108 | config NET_SB1000 | 108 | config NET_SB1000 |
109 | tristate "General Instruments Surfboard 1000" | 109 | tristate "General Instruments Surfboard 1000" |
110 | depends on NETDEVICES && PNP | 110 | depends on PNP |
111 | ---help--- | 111 | ---help--- |
112 | This is a driver for the General Instrument (also known as | 112 | This is a driver for the General Instrument (also known as |
113 | NextLevel) SURFboard 1000 internal | 113 | NextLevel) SURFboard 1000 internal |
@@ -129,16 +129,14 @@ config NET_SB1000 | |||
129 | 129 | ||
130 | If you don't have this card, of course say N. | 130 | If you don't have this card, of course say N. |
131 | 131 | ||
132 | if NETDEVICES | ||
133 | source "drivers/net/arcnet/Kconfig" | 132 | source "drivers/net/arcnet/Kconfig" |
134 | endif | ||
135 | 133 | ||
136 | # | 134 | # |
137 | # Ethernet | 135 | # Ethernet |
138 | # | 136 | # |
139 | 137 | ||
140 | menu "Ethernet (10 or 100Mbit)" | 138 | menu "Ethernet (10 or 100Mbit)" |
141 | depends on NETDEVICES && !UML | 139 | depends on !UML |
142 | 140 | ||
143 | config NET_ETHERNET | 141 | config NET_ETHERNET |
144 | bool "Ethernet (10 or 100Mbit)" | 142 | bool "Ethernet (10 or 100Mbit)" |
@@ -1137,7 +1135,7 @@ config IBMLANA | |||
1137 | 1135 | ||
1138 | config IBMVETH | 1136 | config IBMVETH |
1139 | tristate "IBM LAN Virtual Ethernet support" | 1137 | tristate "IBM LAN Virtual Ethernet support" |
1140 | depends on NETDEVICES && NET_ETHERNET && PPC_PSERIES | 1138 | depends on NET_ETHERNET && PPC_PSERIES |
1141 | ---help--- | 1139 | ---help--- |
1142 | This driver supports virtual ethernet adapters on newer IBM iSeries | 1140 | This driver supports virtual ethernet adapters on newer IBM iSeries |
1143 | and pSeries systems. | 1141 | and pSeries systems. |
@@ -1760,7 +1758,7 @@ endmenu | |||
1760 | # | 1758 | # |
1761 | 1759 | ||
1762 | menu "Ethernet (1000 Mbit)" | 1760 | menu "Ethernet (1000 Mbit)" |
1763 | depends on NETDEVICES && !UML | 1761 | depends on !UML |
1764 | 1762 | ||
1765 | config ACENIC | 1763 | config ACENIC |
1766 | tristate "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support" | 1764 | tristate "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support" |
@@ -2091,7 +2089,7 @@ endmenu | |||
2091 | # | 2089 | # |
2092 | 2090 | ||
2093 | menu "Ethernet (10000 Mbit)" | 2091 | menu "Ethernet (10000 Mbit)" |
2094 | depends on NETDEVICES && !UML | 2092 | depends on !UML |
2095 | 2093 | ||
2096 | config IXGB | 2094 | config IXGB |
2097 | tristate "Intel(R) PRO/10GbE support" | 2095 | tristate "Intel(R) PRO/10GbE support" |
@@ -2186,11 +2184,11 @@ source "drivers/s390/net/Kconfig" | |||
2186 | 2184 | ||
2187 | config ISERIES_VETH | 2185 | config ISERIES_VETH |
2188 | tristate "iSeries Virtual Ethernet driver support" | 2186 | tristate "iSeries Virtual Ethernet driver support" |
2189 | depends on NETDEVICES && PPC_ISERIES | 2187 | depends on PPC_ISERIES |
2190 | 2188 | ||
2191 | config FDDI | 2189 | config FDDI |
2192 | bool "FDDI driver support" | 2190 | bool "FDDI driver support" |
2193 | depends on NETDEVICES && (PCI || EISA) | 2191 | depends on (PCI || EISA) |
2194 | help | 2192 | help |
2195 | Fiber Distributed Data Interface is a high speed local area network | 2193 | Fiber Distributed Data Interface is a high speed local area network |
2196 | design; essentially a replacement for high speed Ethernet. FDDI can | 2194 | design; essentially a replacement for high speed Ethernet. FDDI can |
@@ -2239,7 +2237,7 @@ config SKFP | |||
2239 | 2237 | ||
2240 | config HIPPI | 2238 | config HIPPI |
2241 | bool "HIPPI driver support (EXPERIMENTAL)" | 2239 | bool "HIPPI driver support (EXPERIMENTAL)" |
2242 | depends on NETDEVICES && EXPERIMENTAL && INET && PCI | 2240 | depends on EXPERIMENTAL && INET && PCI |
2243 | help | 2241 | help |
2244 | HIgh Performance Parallel Interface (HIPPI) is a 800Mbit/sec and | 2242 | HIgh Performance Parallel Interface (HIPPI) is a 800Mbit/sec and |
2245 | 1600Mbit/sec dual-simplex switched or point-to-point network. HIPPI | 2243 | 1600Mbit/sec dual-simplex switched or point-to-point network. HIPPI |
@@ -2271,7 +2269,7 @@ config ROADRUNNER_LARGE_RINGS | |||
2271 | 2269 | ||
2272 | config PLIP | 2270 | config PLIP |
2273 | tristate "PLIP (parallel port) support" | 2271 | tristate "PLIP (parallel port) support" |
2274 | depends on NETDEVICES && PARPORT | 2272 | depends on PARPORT |
2275 | ---help--- | 2273 | ---help--- |
2276 | PLIP (Parallel Line Internet Protocol) is used to create a | 2274 | PLIP (Parallel Line Internet Protocol) is used to create a |
2277 | reasonably fast mini network consisting of two (or, rarely, more) | 2275 | reasonably fast mini network consisting of two (or, rarely, more) |
@@ -2307,7 +2305,6 @@ config PLIP | |||
2307 | 2305 | ||
2308 | config PPP | 2306 | config PPP |
2309 | tristate "PPP (point-to-point protocol) support" | 2307 | tristate "PPP (point-to-point protocol) support" |
2310 | depends on NETDEVICES | ||
2311 | ---help--- | 2308 | ---help--- |
2312 | PPP (Point to Point Protocol) is a newer and better SLIP. It serves | 2309 | PPP (Point to Point Protocol) is a newer and better SLIP. It serves |
2313 | the same purpose: sending Internet traffic over telephone (and other | 2310 | the same purpose: sending Internet traffic over telephone (and other |
@@ -2443,7 +2440,6 @@ config PPPOATM | |||
2443 | 2440 | ||
2444 | config SLIP | 2441 | config SLIP |
2445 | tristate "SLIP (serial line) support" | 2442 | tristate "SLIP (serial line) support" |
2446 | depends on NETDEVICES | ||
2447 | ---help--- | 2443 | ---help--- |
2448 | Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to | 2444 | Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to |
2449 | connect to your Internet service provider or to connect to some | 2445 | connect to your Internet service provider or to connect to some |
@@ -2510,7 +2506,7 @@ config SLIP_MODE_SLIP6 | |||
2510 | 2506 | ||
2511 | config NET_FC | 2507 | config NET_FC |
2512 | bool "Fibre Channel driver support" | 2508 | bool "Fibre Channel driver support" |
2513 | depends on NETDEVICES && SCSI && PCI | 2509 | depends on SCSI && PCI |
2514 | help | 2510 | help |
2515 | Fibre Channel is a high speed serial protocol mainly used to connect | 2511 | Fibre Channel is a high speed serial protocol mainly used to connect |
2516 | large storage devices to the computer; it is compatible with and | 2512 | large storage devices to the computer; it is compatible with and |
@@ -2523,7 +2519,7 @@ config NET_FC | |||
2523 | 2519 | ||
2524 | config SHAPER | 2520 | config SHAPER |
2525 | tristate "Traffic Shaper (EXPERIMENTAL)" | 2521 | tristate "Traffic Shaper (EXPERIMENTAL)" |
2526 | depends on NETDEVICES && EXPERIMENTAL | 2522 | depends on EXPERIMENTAL |
2527 | ---help--- | 2523 | ---help--- |
2528 | The traffic shaper is a virtual network device that allows you to | 2524 | The traffic shaper is a virtual network device that allows you to |
2529 | limit the rate of outgoing data flow over some other network device. | 2525 | limit the rate of outgoing data flow over some other network device. |
@@ -2544,9 +2540,27 @@ config SHAPER | |||
2544 | 2540 | ||
2545 | config NETCONSOLE | 2541 | config NETCONSOLE |
2546 | tristate "Network console logging support (EXPERIMENTAL)" | 2542 | tristate "Network console logging support (EXPERIMENTAL)" |
2547 | depends on NETDEVICES && EXPERIMENTAL | 2543 | depends on EXPERIMENTAL |
2548 | ---help--- | 2544 | ---help--- |
2549 | If you want to log kernel messages over the network, enable this. | 2545 | If you want to log kernel messages over the network, enable this. |
2550 | See <file:Documentation/networking/netconsole.txt> for details. | 2546 | See <file:Documentation/networking/netconsole.txt> for details. |
2551 | 2547 | ||
2548 | endif #NETDEVICES | ||
2549 | |||
2550 | config NETPOLL | ||
2551 | def_bool NETCONSOLE | ||
2552 | |||
2553 | config NETPOLL_RX | ||
2554 | bool "Netpoll support for trapping incoming packets" | ||
2555 | default n | ||
2556 | depends on NETPOLL | ||
2557 | |||
2558 | config NETPOLL_TRAP | ||
2559 | bool "Netpoll traffic trapping" | ||
2560 | default n | ||
2561 | depends on NETPOLL | ||
2562 | |||
2563 | config NET_POLL_CONTROLLER | ||
2564 | def_bool NETPOLL | ||
2565 | |||
2552 | endmenu | 2566 | endmenu |
diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c index 8618012df06a..d9ba8be72af8 100755 --- a/drivers/net/amd8111e.c +++ b/drivers/net/amd8111e.c | |||
@@ -1290,7 +1290,7 @@ static irqreturn_t amd8111e_interrupt(int irq, void *dev_id, struct pt_regs *reg | |||
1290 | writel(intr0, mmio + INT0); | 1290 | writel(intr0, mmio + INT0); |
1291 | 1291 | ||
1292 | /* Check if Receive Interrupt has occurred. */ | 1292 | /* Check if Receive Interrupt has occurred. */ |
1293 | #if CONFIG_AMD8111E_NAPI | 1293 | #ifdef CONFIG_AMD8111E_NAPI |
1294 | if(intr0 & RINT0){ | 1294 | if(intr0 & RINT0){ |
1295 | if(netif_rx_schedule_prep(dev)){ | 1295 | if(netif_rx_schedule_prep(dev)){ |
1296 | /* Disable receive interupts */ | 1296 | /* Disable receive interupts */ |
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c index b96d6fb1929e..2c6dc24c3728 100644 --- a/drivers/net/cs89x0.c +++ b/drivers/net/cs89x0.c | |||
@@ -1450,6 +1450,7 @@ static int net_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
1450 | /* Write the contents of the packet */ | 1450 | /* Write the contents of the packet */ |
1451 | outsw(dev->base_addr + TX_FRAME_PORT,skb->data,(skb->len+1) >>1); | 1451 | outsw(dev->base_addr + TX_FRAME_PORT,skb->data,(skb->len+1) >>1); |
1452 | spin_unlock_irq(&lp->lock); | 1452 | spin_unlock_irq(&lp->lock); |
1453 | lp->stats.tx_bytes += skb->len; | ||
1453 | dev->trans_start = jiffies; | 1454 | dev->trans_start = jiffies; |
1454 | dev_kfree_skb (skb); | 1455 | dev_kfree_skb (skb); |
1455 | 1456 | ||
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index cb7f051a60ad..5e5d2c3c7ce4 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -162,7 +162,6 @@ static void e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid); | |||
162 | static void e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid); | 162 | static void e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid); |
163 | static void e1000_restore_vlan(struct e1000_adapter *adapter); | 163 | static void e1000_restore_vlan(struct e1000_adapter *adapter); |
164 | 164 | ||
165 | static int e1000_notify_reboot(struct notifier_block *, unsigned long event, void *ptr); | ||
166 | static int e1000_suspend(struct pci_dev *pdev, uint32_t state); | 165 | static int e1000_suspend(struct pci_dev *pdev, uint32_t state); |
167 | #ifdef CONFIG_PM | 166 | #ifdef CONFIG_PM |
168 | static int e1000_resume(struct pci_dev *pdev); | 167 | static int e1000_resume(struct pci_dev *pdev); |
@@ -173,12 +172,6 @@ static int e1000_resume(struct pci_dev *pdev); | |||
173 | static void e1000_netpoll (struct net_device *netdev); | 172 | static void e1000_netpoll (struct net_device *netdev); |
174 | #endif | 173 | #endif |
175 | 174 | ||
176 | struct notifier_block e1000_notifier_reboot = { | ||
177 | .notifier_call = e1000_notify_reboot, | ||
178 | .next = NULL, | ||
179 | .priority = 0 | ||
180 | }; | ||
181 | |||
182 | /* Exported from other modules */ | 175 | /* Exported from other modules */ |
183 | 176 | ||
184 | extern void e1000_check_options(struct e1000_adapter *adapter); | 177 | extern void e1000_check_options(struct e1000_adapter *adapter); |
@@ -221,9 +214,7 @@ e1000_init_module(void) | |||
221 | printk(KERN_INFO "%s\n", e1000_copyright); | 214 | printk(KERN_INFO "%s\n", e1000_copyright); |
222 | 215 | ||
223 | ret = pci_module_init(&e1000_driver); | 216 | ret = pci_module_init(&e1000_driver); |
224 | if(ret >= 0) { | 217 | |
225 | register_reboot_notifier(&e1000_notifier_reboot); | ||
226 | } | ||
227 | return ret; | 218 | return ret; |
228 | } | 219 | } |
229 | 220 | ||
@@ -239,7 +230,6 @@ module_init(e1000_init_module); | |||
239 | static void __exit | 230 | static void __exit |
240 | e1000_exit_module(void) | 231 | e1000_exit_module(void) |
241 | { | 232 | { |
242 | unregister_reboot_notifier(&e1000_notifier_reboot); | ||
243 | pci_unregister_driver(&e1000_driver); | 233 | pci_unregister_driver(&e1000_driver); |
244 | } | 234 | } |
245 | 235 | ||
@@ -3652,23 +3642,6 @@ e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx) | |||
3652 | } | 3642 | } |
3653 | 3643 | ||
3654 | static int | 3644 | static int |
3655 | e1000_notify_reboot(struct notifier_block *nb, unsigned long event, void *p) | ||
3656 | { | ||
3657 | struct pci_dev *pdev = NULL; | ||
3658 | |||
3659 | switch(event) { | ||
3660 | case SYS_DOWN: | ||
3661 | case SYS_HALT: | ||
3662 | case SYS_POWER_OFF: | ||
3663 | while((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev))) { | ||
3664 | if(pci_dev_driver(pdev) == &e1000_driver) | ||
3665 | e1000_suspend(pdev, 3); | ||
3666 | } | ||
3667 | } | ||
3668 | return NOTIFY_DONE; | ||
3669 | } | ||
3670 | |||
3671 | static int | ||
3672 | e1000_suspend(struct pci_dev *pdev, uint32_t state) | 3645 | e1000_suspend(struct pci_dev *pdev, uint32_t state) |
3673 | { | 3646 | { |
3674 | struct net_device *netdev = pci_get_drvdata(pdev); | 3647 | struct net_device *netdev = pci_get_drvdata(pdev); |
diff --git a/drivers/net/eql.c b/drivers/net/eql.c index dd6865820372..aa1569182fd6 100644 --- a/drivers/net/eql.c +++ b/drivers/net/eql.c | |||
@@ -132,7 +132,7 @@ static struct net_device_stats *eql_get_stats(struct net_device *dev); | |||
132 | #define eql_is_slave(dev) ((dev->flags & IFF_SLAVE) == IFF_SLAVE) | 132 | #define eql_is_slave(dev) ((dev->flags & IFF_SLAVE) == IFF_SLAVE) |
133 | #define eql_is_master(dev) ((dev->flags & IFF_MASTER) == IFF_MASTER) | 133 | #define eql_is_master(dev) ((dev->flags & IFF_MASTER) == IFF_MASTER) |
134 | 134 | ||
135 | static void eql_kill_one_slave(slave_t *slave); | 135 | static void eql_kill_one_slave(slave_queue_t *queue, slave_t *slave); |
136 | 136 | ||
137 | static void eql_timer(unsigned long param) | 137 | static void eql_timer(unsigned long param) |
138 | { | 138 | { |
@@ -149,7 +149,7 @@ static void eql_timer(unsigned long param) | |||
149 | if (slave->bytes_queued < 0) | 149 | if (slave->bytes_queued < 0) |
150 | slave->bytes_queued = 0; | 150 | slave->bytes_queued = 0; |
151 | } else { | 151 | } else { |
152 | eql_kill_one_slave(slave); | 152 | eql_kill_one_slave(&eql->queue, slave); |
153 | } | 153 | } |
154 | 154 | ||
155 | } | 155 | } |
@@ -214,9 +214,10 @@ static int eql_open(struct net_device *dev) | |||
214 | return 0; | 214 | return 0; |
215 | } | 215 | } |
216 | 216 | ||
217 | static void eql_kill_one_slave(slave_t *slave) | 217 | static void eql_kill_one_slave(slave_queue_t *queue, slave_t *slave) |
218 | { | 218 | { |
219 | list_del(&slave->list); | 219 | list_del(&slave->list); |
220 | queue->num_slaves--; | ||
220 | slave->dev->flags &= ~IFF_SLAVE; | 221 | slave->dev->flags &= ~IFF_SLAVE; |
221 | dev_put(slave->dev); | 222 | dev_put(slave->dev); |
222 | kfree(slave); | 223 | kfree(slave); |
@@ -232,8 +233,7 @@ static void eql_kill_slave_queue(slave_queue_t *queue) | |||
232 | list_for_each_safe(this, tmp, head) { | 233 | list_for_each_safe(this, tmp, head) { |
233 | slave_t *s = list_entry(this, slave_t, list); | 234 | slave_t *s = list_entry(this, slave_t, list); |
234 | 235 | ||
235 | eql_kill_one_slave(s); | 236 | eql_kill_one_slave(queue, s); |
236 | queue->num_slaves--; | ||
237 | } | 237 | } |
238 | 238 | ||
239 | spin_unlock_bh(&queue->lock); | 239 | spin_unlock_bh(&queue->lock); |
@@ -318,7 +318,7 @@ static slave_t *__eql_schedule_slaves(slave_queue_t *queue) | |||
318 | } | 318 | } |
319 | } else { | 319 | } else { |
320 | /* We found a dead slave, kill it. */ | 320 | /* We found a dead slave, kill it. */ |
321 | eql_kill_one_slave(slave); | 321 | eql_kill_one_slave(queue, slave); |
322 | } | 322 | } |
323 | } | 323 | } |
324 | return best_slave; | 324 | return best_slave; |
@@ -393,7 +393,7 @@ static int __eql_insert_slave(slave_queue_t *queue, slave_t *slave) | |||
393 | 393 | ||
394 | duplicate_slave = __eql_find_slave_dev(queue, slave->dev); | 394 | duplicate_slave = __eql_find_slave_dev(queue, slave->dev); |
395 | if (duplicate_slave != 0) | 395 | if (duplicate_slave != 0) |
396 | eql_kill_one_slave(duplicate_slave); | 396 | eql_kill_one_slave(queue, duplicate_slave); |
397 | 397 | ||
398 | list_add(&slave->list, &queue->all_slaves); | 398 | list_add(&slave->list, &queue->all_slaves); |
399 | queue->num_slaves++; | 399 | queue->num_slaves++; |
@@ -471,7 +471,7 @@ static int eql_emancipate(struct net_device *master_dev, slaving_request_t __use | |||
471 | slave_dev); | 471 | slave_dev); |
472 | 472 | ||
473 | if (slave) { | 473 | if (slave) { |
474 | eql_kill_one_slave(slave); | 474 | eql_kill_one_slave(&eql->queue, slave); |
475 | ret = 0; | 475 | ret = 0; |
476 | } | 476 | } |
477 | } | 477 | } |
diff --git a/drivers/net/ne.c b/drivers/net/ne.c index 6c57096aa2e1..d209a1556b2e 100644 --- a/drivers/net/ne.c +++ b/drivers/net/ne.c | |||
@@ -129,9 +129,9 @@ bad_clone_list[] __initdata = { | |||
129 | #define NESM_START_PG 0x40 /* First page of TX buffer */ | 129 | #define NESM_START_PG 0x40 /* First page of TX buffer */ |
130 | #define NESM_STOP_PG 0x80 /* Last page +1 of RX ring */ | 130 | #define NESM_STOP_PG 0x80 /* Last page +1 of RX ring */ |
131 | 131 | ||
132 | #ifdef CONFIG_PLAT_MAPPI | 132 | #if defined(CONFIG_PLAT_MAPPI) |
133 | # define DCR_VAL 0x4b | 133 | # define DCR_VAL 0x4b |
134 | #elif CONFIG_PLAT_OAKS32R | 134 | #elif defined(CONFIG_PLAT_OAKS32R) |
135 | # define DCR_VAL 0x48 | 135 | # define DCR_VAL 0x48 |
136 | #else | 136 | #else |
137 | # define DCR_VAL 0x49 | 137 | # define DCR_VAL 0x49 |
diff --git a/drivers/net/pcmcia/nmclan_cs.c b/drivers/net/pcmcia/nmclan_cs.c index dbb941004ae9..980d7e5d66cb 100644 --- a/drivers/net/pcmcia/nmclan_cs.c +++ b/drivers/net/pcmcia/nmclan_cs.c | |||
@@ -1671,7 +1671,7 @@ static void set_multicast_list(struct net_device *dev) | |||
1671 | 1671 | ||
1672 | static struct pcmcia_device_id nmclan_ids[] = { | 1672 | static struct pcmcia_device_id nmclan_ids[] = { |
1673 | PCMCIA_DEVICE_PROD_ID12("New Media Corporation", "Ethernet", 0x085a850b, 0x00b2e941), | 1673 | PCMCIA_DEVICE_PROD_ID12("New Media Corporation", "Ethernet", 0x085a850b, 0x00b2e941), |
1674 | PCMCIA_DEVICE_PROD_ID12("Portable Add-ons", "Ethernet", 0x0ebf1d60, 0x00b2e941), | 1674 | PCMCIA_DEVICE_PROD_ID12("Portable Add-ons", "Ethernet+", 0xebf1d60, 0xad673aaf), |
1675 | PCMCIA_DEVICE_NULL, | 1675 | PCMCIA_DEVICE_NULL, |
1676 | }; | 1676 | }; |
1677 | MODULE_DEVICE_TABLE(pcmcia, nmclan_ids); | 1677 | MODULE_DEVICE_TABLE(pcmcia, nmclan_ids); |
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c index e1664aef3dfd..9f22d138e3ad 100644 --- a/drivers/net/pcmcia/pcnet_cs.c +++ b/drivers/net/pcmcia/pcnet_cs.c | |||
@@ -1639,7 +1639,7 @@ static struct pcmcia_device_id pcnet_ids[] = { | |||
1639 | PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0143, 0xc0ab), | 1639 | PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x0143, 0xc0ab), |
1640 | PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x021b, 0x0101), | 1640 | PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x021b, 0x0101), |
1641 | PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x08a1, 0xc0ab), | 1641 | PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x08a1, 0xc0ab), |
1642 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "AnyCom", "Fast Ethernet ", 0x578ba6e7, 0x02d92d1e), | 1642 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "AnyCom", "Fast Ethernet + 56K COMBO", 0x578ba6e7, 0xb0ac62c4), |
1643 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff), | 1643 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff), |
1644 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Grey Cell", "GCS3000", 0x2a151fac, 0x48b932ae), | 1644 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Grey Cell", "GCS3000", 0x2a151fac, 0x48b932ae), |
1645 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Linksys", "EtherFast 10&100 + 56K PC Card (PCMLM56)", 0x0733cc81, 0xb3765033), | 1645 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Linksys", "EtherFast 10&100 + 56K PC Card (PCMLM56)", 0x0733cc81, 0xb3765033), |
@@ -1683,7 +1683,6 @@ static struct pcmcia_device_id pcnet_ids[] = { | |||
1683 | PCMCIA_DEVICE_PROD_ID12("ACCTON", "EN2212", 0xdfc6b5b2, 0xcb112a11), | 1683 | PCMCIA_DEVICE_PROD_ID12("ACCTON", "EN2212", 0xdfc6b5b2, 0xcb112a11), |
1684 | PCMCIA_DEVICE_PROD_ID12("ACCTON", "EN2216-PCMCIA-ETHERNET", 0xdfc6b5b2, 0x5542bfff), | 1684 | PCMCIA_DEVICE_PROD_ID12("ACCTON", "EN2216-PCMCIA-ETHERNET", 0xdfc6b5b2, 0x5542bfff), |
1685 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA100-PCM-T V2 100/10M LAN PC Card", 0xbb7fbdd7, 0xcd91cc68), | 1685 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA100-PCM-T V2 100/10M LAN PC Card", 0xbb7fbdd7, 0xcd91cc68), |
1686 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA-PCM", 0xbb7fbdd7, 0x5ba10d49), | ||
1687 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis K.K.", "LA100-PCM V2", 0x36634a66, 0xc6d05997), | 1686 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis K.K.", "LA100-PCM V2", 0x36634a66, 0xc6d05997), |
1688 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA-PCM_V2", 0xbb7fBdd7, 0x28e299f8), | 1687 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis, K.K.", "CentreCOM LA-PCM_V2", 0xbb7fBdd7, 0x28e299f8), |
1689 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis K.K.", "LA-PCM V3", 0x36634a66, 0x62241d96), | 1688 | PCMCIA_DEVICE_PROD_ID12("Allied Telesis K.K.", "LA-PCM V3", 0x36634a66, 0x62241d96), |
@@ -1719,6 +1718,7 @@ static struct pcmcia_device_id pcnet_ids[] = { | |||
1719 | PCMCIA_DEVICE_PROD_ID12("DIGITAL", "DEPCM-XX", 0x69616cb3, 0xe600e76e), | 1718 | PCMCIA_DEVICE_PROD_ID12("DIGITAL", "DEPCM-XX", 0x69616cb3, 0xe600e76e), |
1720 | PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-650", 0x1a424a1c, 0xf28c8398), | 1719 | PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-650", 0x1a424a1c, 0xf28c8398), |
1721 | PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-660", 0x1a424a1c, 0xd9a1d05b), | 1720 | PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-660", 0x1a424a1c, 0xd9a1d05b), |
1721 | PCMCIA_DEVICE_PROD_ID12("D-Link", "DE-660+", 0x1a424a1c, 0x50dcd0ec), | ||
1722 | PCMCIA_DEVICE_PROD_ID12("D-Link", "DFE-650", 0x1a424a1c, 0x0f0073f9), | 1722 | PCMCIA_DEVICE_PROD_ID12("D-Link", "DFE-650", 0x1a424a1c, 0x0f0073f9), |
1723 | PCMCIA_DEVICE_PROD_ID12("Dual Speed", "10/100 PC Card", 0x725b842d, 0xf1efee84), | 1723 | PCMCIA_DEVICE_PROD_ID12("Dual Speed", "10/100 PC Card", 0x725b842d, 0xf1efee84), |
1724 | PCMCIA_DEVICE_PROD_ID12("Dual Speed", "10/100 Port Attached PC Card", 0x725b842d, 0x2db1f8e9), | 1724 | PCMCIA_DEVICE_PROD_ID12("Dual Speed", "10/100 Port Attached PC Card", 0x725b842d, 0x2db1f8e9), |
@@ -1737,6 +1737,7 @@ static struct pcmcia_device_id pcnet_ids[] = { | |||
1737 | PCMCIA_DEVICE_PROD_ID12("GVC", "NIC-2000p", 0x76e171bd, 0x6eb1c947), | 1737 | PCMCIA_DEVICE_PROD_ID12("GVC", "NIC-2000p", 0x76e171bd, 0x6eb1c947), |
1738 | PCMCIA_DEVICE_PROD_ID12("IBM Corp.", "Ethernet", 0xe3736c88, 0x00b2e941), | 1738 | PCMCIA_DEVICE_PROD_ID12("IBM Corp.", "Ethernet", 0xe3736c88, 0x00b2e941), |
1739 | PCMCIA_DEVICE_PROD_ID12("IC-CARD", "IC-CARD", 0x60cb09a6, 0x60cb09a6), | 1739 | PCMCIA_DEVICE_PROD_ID12("IC-CARD", "IC-CARD", 0x60cb09a6, 0x60cb09a6), |
1740 | PCMCIA_DEVICE_PROD_ID12("IC-CARD+", "IC-CARD+", 0x93693494, 0x93693494), | ||
1740 | PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCETTX", 0x547e66dc, 0x6fc5459b), | 1741 | PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCETTX", 0x547e66dc, 0x6fc5459b), |
1741 | PCMCIA_DEVICE_PROD_ID12("iPort", "10/100 Ethernet Card", 0x56c538d2, 0x11b0ffc0), | 1742 | PCMCIA_DEVICE_PROD_ID12("iPort", "10/100 Ethernet Card", 0x56c538d2, 0x11b0ffc0), |
1742 | PCMCIA_DEVICE_PROD_ID12("KANSAI ELECTRIC CO.,LTD", "KLA-PCM/T", 0xb18dc3b4, 0xcc51a956), | 1743 | PCMCIA_DEVICE_PROD_ID12("KANSAI ELECTRIC CO.,LTD", "KLA-PCM/T", 0xb18dc3b4, 0xcc51a956), |
@@ -1753,7 +1754,7 @@ static struct pcmcia_device_id pcnet_ids[] = { | |||
1753 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 Integrated PC Card (PCM100)", 0x0733cc81, 0x453c3f9d), | 1754 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 Integrated PC Card (PCM100)", 0x0733cc81, 0x453c3f9d), |
1754 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100)", 0x0733cc81, 0x66c5a389), | 1755 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100)", 0x0733cc81, 0x66c5a389), |
1755 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V2)", 0x0733cc81, 0x3a3b28e9), | 1756 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V2)", 0x0733cc81, 0x3a3b28e9), |
1756 | PCMCIA_DEVICE_PROD_ID12("Linksys", "HomeLink Phoneline ", 0x0733cc81, 0x5e07cfa0), | 1757 | PCMCIA_DEVICE_PROD_ID12("Linksys", "HomeLink Phoneline + 10/100 Network PC Card (PCM100H1)", 0x733cc81, 0x7a3e5c3a), |
1757 | PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN100TX", 0x88fcdeda, 0x6d772737), | 1758 | PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN100TX", 0x88fcdeda, 0x6d772737), |
1758 | PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN20T", 0x88fcdeda, 0x81090922), | 1759 | PCMCIA_DEVICE_PROD_ID12("Logitec", "LPM-LN20T", 0x88fcdeda, 0x81090922), |
1759 | PCMCIA_DEVICE_PROD_ID12("LONGSHINE", "PCMCIA Ethernet Card", 0xf866b0b0, 0x6f6652e0), | 1760 | PCMCIA_DEVICE_PROD_ID12("LONGSHINE", "PCMCIA Ethernet Card", 0xf866b0b0, 0x6f6652e0), |
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c index fbc2f58ff688..d652e1eddb45 100644 --- a/drivers/net/pcmcia/smc91c92_cs.c +++ b/drivers/net/pcmcia/smc91c92_cs.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/ioport.h> | 41 | #include <linux/ioport.h> |
42 | #include <linux/ethtool.h> | 42 | #include <linux/ethtool.h> |
43 | #include <linux/mii.h> | 43 | #include <linux/mii.h> |
44 | #include <linux/jiffies.h> | ||
44 | 45 | ||
45 | #include <pcmcia/cs_types.h> | 46 | #include <pcmcia/cs_types.h> |
46 | #include <pcmcia/cs.h> | 47 | #include <pcmcia/cs.h> |
@@ -2092,7 +2093,7 @@ static void media_check(u_long arg) | |||
2092 | } | 2093 | } |
2093 | 2094 | ||
2094 | /* Ignore collisions unless we've had no rx's recently */ | 2095 | /* Ignore collisions unless we've had no rx's recently */ |
2095 | if (jiffies - dev->last_rx > HZ) { | 2096 | if (time_after(jiffies, dev->last_rx + HZ)) { |
2096 | if (smc->tx_err || (smc->media_status & EPH_16COL)) | 2097 | if (smc->tx_err || (smc->media_status & EPH_16COL)) |
2097 | media |= EPH_16COL; | 2098 | media |= EPH_16COL; |
2098 | } | 2099 | } |
@@ -2331,8 +2332,8 @@ static struct pcmcia_device_id smc91c92_ids[] = { | |||
2331 | PCMCIA_PFC_DEVICE_PROD_ID123(0, "MEGAHERTZ", "XJEM1144/CCEM1144", "PCMCIA MODEM", 0xf510db04, 0x52d21e1e, 0xbd6c43ef), | 2332 | PCMCIA_PFC_DEVICE_PROD_ID123(0, "MEGAHERTZ", "XJEM1144/CCEM1144", "PCMCIA MODEM", 0xf510db04, 0x52d21e1e, 0xbd6c43ef), |
2332 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Gateway 2000", "XJEM3336", 0xdd9989be, 0x662c394c), | 2333 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Gateway 2000", "XJEM3336", 0xdd9989be, 0x662c394c), |
2333 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "MEGAHERTZ", "XJEM1144/CCEM1144", 0xf510db04, 0x52d21e1e), | 2334 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "MEGAHERTZ", "XJEM1144/CCEM1144", 0xf510db04, 0x52d21e1e), |
2334 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Ositech", "Trumpcard", 0x0c2f80cd, 0x0573c29f), | 2335 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Ositech", "Trumpcard:Jack of Diamonds Modem+Ethernet", 0xc2f80cd, 0x656947b9), |
2335 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Ositech", "Trumpcard", 0x0c2f80cd, 0x0573c29f), | 2336 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Ositech", "Trumpcard:Jack of Hearts Modem+Ethernet", 0xc2f80cd, 0xdc9ba5ed), |
2336 | PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x016c, 0x0020), | 2337 | PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x016c, 0x0020), |
2337 | PCMCIA_DEVICE_MANF_CARD(0x016c, 0x0023), | 2338 | PCMCIA_DEVICE_MANF_CARD(0x016c, 0x0023), |
2338 | PCMCIA_DEVICE_PROD_ID123("BASICS by New Media Corporation", "Ethernet", "SMC91C94", 0x23c78a9d, 0x00b2e941, 0xcef397fb), | 2339 | PCMCIA_DEVICE_PROD_ID123("BASICS by New Media Corporation", "Ethernet", "SMC91C94", 0x23c78a9d, 0x00b2e941, 0xcef397fb), |
@@ -2342,8 +2343,8 @@ static struct pcmcia_device_id smc91c92_ids[] = { | |||
2342 | PCMCIA_DEVICE_PROD_ID12("Farallon", "Farallon Enet", 0x58d93fc4, 0x244734e9), | 2343 | PCMCIA_DEVICE_PROD_ID12("Farallon", "Farallon Enet", 0x58d93fc4, 0x244734e9), |
2343 | PCMCIA_DEVICE_PROD_ID12("Megahertz", "CC10BT/2", 0x33234748, 0x3c95b953), | 2344 | PCMCIA_DEVICE_PROD_ID12("Megahertz", "CC10BT/2", 0x33234748, 0x3c95b953), |
2344 | PCMCIA_DEVICE_PROD_ID12("MELCO/SMC", "LPC-TX", 0xa2cd8e6d, 0x42da662a), | 2345 | PCMCIA_DEVICE_PROD_ID12("MELCO/SMC", "LPC-TX", 0xa2cd8e6d, 0x42da662a), |
2345 | PCMCIA_DEVICE_PROD_ID12("Ositech", "Trumpcard", 0x0c2f80cd, 0x0573c29f), | 2346 | PCMCIA_DEVICE_PROD_ID12("Ositech", "Trumpcard:Four of Diamonds Ethernet", 0xc2f80cd, 0xb3466314), |
2346 | PCMCIA_DEVICE_PROD_ID12("Ositech", "Trumpcard", 0x0c2f80cd, 0x0573c29f), | 2347 | PCMCIA_DEVICE_PROD_ID12("Ositech", "Trumpcard:Seven of Diamonds Ethernet", 0xc2f80cd, 0x194b650a), |
2347 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Fast Ethernet PCCard", 0x281f1c5d, 0xdcea68bc), | 2348 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "Fast Ethernet PCCard", 0x281f1c5d, 0xdcea68bc), |
2348 | PCMCIA_DEVICE_PROD_ID12("Psion", "10Mb Ethernet", 0x4ef00b21, 0x844be9e9), | 2349 | PCMCIA_DEVICE_PROD_ID12("Psion", "10Mb Ethernet", 0x4ef00b21, 0x844be9e9), |
2349 | PCMCIA_DEVICE_PROD_ID12("SMC", "EtherEZ Ethernet 8020", 0xc4f8b18b, 0x4a0eeb2d), | 2350 | PCMCIA_DEVICE_PROD_ID12("SMC", "EtherEZ Ethernet 8020", 0xc4f8b18b, 0x4a0eeb2d), |
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c index 9f33bad174e9..ce143f08638a 100644 --- a/drivers/net/pcmcia/xirc2ps_cs.c +++ b/drivers/net/pcmcia/xirc2ps_cs.c | |||
@@ -1985,7 +1985,7 @@ static struct pcmcia_device_id xirc2ps_ids[] = { | |||
1985 | PCMCIA_PFC_DEVICE_PROD_ID13(0, "Xircom", "CEM56", 0x2e3ee845, 0xa650c32a), | 1985 | PCMCIA_PFC_DEVICE_PROD_ID13(0, "Xircom", "CEM56", 0x2e3ee845, 0xa650c32a), |
1986 | PCMCIA_PFC_DEVICE_PROD_ID13(0, "Xircom", "REM10", 0x2e3ee845, 0x76df1d29), | 1986 | PCMCIA_PFC_DEVICE_PROD_ID13(0, "Xircom", "REM10", 0x2e3ee845, 0x76df1d29), |
1987 | PCMCIA_PFC_DEVICE_PROD_ID13(0, "Xircom", "XEM5600", 0x2e3ee845, 0xf1403719), | 1987 | PCMCIA_PFC_DEVICE_PROD_ID13(0, "Xircom", "XEM5600", 0x2e3ee845, 0xf1403719), |
1988 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Xircom", "CreditCard Ethernet", 0x2e3ee845, 0xc0e778c2), | 1988 | PCMCIA_PFC_DEVICE_PROD_ID12(0, "Xircom", "CreditCard Ethernet+Modem II", 0x2e3ee845, 0xeca401bf), |
1989 | PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x010a), | 1989 | PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x010a), |
1990 | PCMCIA_DEVICE_PROD_ID13("Toshiba Information Systems", "TPCENET", 0x1b3b94fe, 0xf381c1a2), | 1990 | PCMCIA_DEVICE_PROD_ID13("Toshiba Information Systems", "TPCENET", 0x1b3b94fe, 0xf381c1a2), |
1991 | PCMCIA_DEVICE_PROD_ID13("Xircom", "CE3-10/100", 0x2e3ee845, 0x0ec0ac37), | 1991 | PCMCIA_DEVICE_PROD_ID13("Xircom", "CE3-10/100", 0x2e3ee845, 0x0ec0ac37), |
diff --git a/drivers/net/plip.c b/drivers/net/plip.c index 21537ee3a6a7..1bd22cd40c75 100644 --- a/drivers/net/plip.c +++ b/drivers/net/plip.c | |||
@@ -160,7 +160,7 @@ static struct net_device_stats *plip_get_stats(struct net_device *dev); | |||
160 | static int plip_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); | 160 | static int plip_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); |
161 | static int plip_preempt(void *handle); | 161 | static int plip_preempt(void *handle); |
162 | static void plip_wakeup(void *handle); | 162 | static void plip_wakeup(void *handle); |
163 | 163 | ||
164 | enum plip_connection_state { | 164 | enum plip_connection_state { |
165 | PLIP_CN_NONE=0, | 165 | PLIP_CN_NONE=0, |
166 | PLIP_CN_RECEIVE, | 166 | PLIP_CN_RECEIVE, |
@@ -231,8 +231,8 @@ struct net_local { | |||
231 | atomic_t kill_timer; | 231 | atomic_t kill_timer; |
232 | struct semaphore killed_timer_sem; | 232 | struct semaphore killed_timer_sem; |
233 | }; | 233 | }; |
234 | 234 | ||
235 | inline static void enable_parport_interrupts (struct net_device *dev) | 235 | static inline void enable_parport_interrupts (struct net_device *dev) |
236 | { | 236 | { |
237 | if (dev->irq != -1) | 237 | if (dev->irq != -1) |
238 | { | 238 | { |
@@ -242,7 +242,7 @@ inline static void enable_parport_interrupts (struct net_device *dev) | |||
242 | } | 242 | } |
243 | } | 243 | } |
244 | 244 | ||
245 | inline static void disable_parport_interrupts (struct net_device *dev) | 245 | static inline void disable_parport_interrupts (struct net_device *dev) |
246 | { | 246 | { |
247 | if (dev->irq != -1) | 247 | if (dev->irq != -1) |
248 | { | 248 | { |
@@ -252,7 +252,7 @@ inline static void disable_parport_interrupts (struct net_device *dev) | |||
252 | } | 252 | } |
253 | } | 253 | } |
254 | 254 | ||
255 | inline static void write_data (struct net_device *dev, unsigned char data) | 255 | static inline void write_data (struct net_device *dev, unsigned char data) |
256 | { | 256 | { |
257 | struct parport *port = | 257 | struct parport *port = |
258 | ((struct net_local *)dev->priv)->pardev->port; | 258 | ((struct net_local *)dev->priv)->pardev->port; |
@@ -260,14 +260,14 @@ inline static void write_data (struct net_device *dev, unsigned char data) | |||
260 | port->ops->write_data (port, data); | 260 | port->ops->write_data (port, data); |
261 | } | 261 | } |
262 | 262 | ||
263 | inline static unsigned char read_status (struct net_device *dev) | 263 | static inline unsigned char read_status (struct net_device *dev) |
264 | { | 264 | { |
265 | struct parport *port = | 265 | struct parport *port = |
266 | ((struct net_local *)dev->priv)->pardev->port; | 266 | ((struct net_local *)dev->priv)->pardev->port; |
267 | 267 | ||
268 | return port->ops->read_status (port); | 268 | return port->ops->read_status (port); |
269 | } | 269 | } |
270 | 270 | ||
271 | /* Entry point of PLIP driver. | 271 | /* Entry point of PLIP driver. |
272 | Probe the hardware, and register/initialize the driver. | 272 | Probe the hardware, and register/initialize the driver. |
273 | 273 | ||
@@ -316,7 +316,7 @@ plip_init_netdev(struct net_device *dev) | |||
316 | 316 | ||
317 | spin_lock_init(&nl->lock); | 317 | spin_lock_init(&nl->lock); |
318 | } | 318 | } |
319 | 319 | ||
320 | /* Bottom half handler for the delayed request. | 320 | /* Bottom half handler for the delayed request. |
321 | This routine is kicked by do_timer(). | 321 | This routine is kicked by do_timer(). |
322 | Request `plip_bh' to be invoked. */ | 322 | Request `plip_bh' to be invoked. */ |
@@ -471,7 +471,7 @@ plip_bh_timeout_error(struct net_device *dev, struct net_local *nl, | |||
471 | 471 | ||
472 | return TIMEOUT; | 472 | return TIMEOUT; |
473 | } | 473 | } |
474 | 474 | ||
475 | static int | 475 | static int |
476 | plip_none(struct net_device *dev, struct net_local *nl, | 476 | plip_none(struct net_device *dev, struct net_local *nl, |
477 | struct plip_local *snd, struct plip_local *rcv) | 477 | struct plip_local *snd, struct plip_local *rcv) |
@@ -481,7 +481,7 @@ plip_none(struct net_device *dev, struct net_local *nl, | |||
481 | 481 | ||
482 | /* PLIP_RECEIVE --- receive a byte(two nibbles) | 482 | /* PLIP_RECEIVE --- receive a byte(two nibbles) |
483 | Returns OK on success, TIMEOUT on timeout */ | 483 | Returns OK on success, TIMEOUT on timeout */ |
484 | inline static int | 484 | static inline int |
485 | plip_receive(unsigned short nibble_timeout, struct net_device *dev, | 485 | plip_receive(unsigned short nibble_timeout, struct net_device *dev, |
486 | enum plip_nibble_state *ns_p, unsigned char *data_p) | 486 | enum plip_nibble_state *ns_p, unsigned char *data_p) |
487 | { | 487 | { |
@@ -582,7 +582,6 @@ static __be16 plip_type_trans(struct sk_buff *skb, struct net_device *dev) | |||
582 | return htons(ETH_P_802_2); | 582 | return htons(ETH_P_802_2); |
583 | } | 583 | } |
584 | 584 | ||
585 | |||
586 | /* PLIP_RECEIVE_PACKET --- receive a packet */ | 585 | /* PLIP_RECEIVE_PACKET --- receive a packet */ |
587 | static int | 586 | static int |
588 | plip_receive_packet(struct net_device *dev, struct net_local *nl, | 587 | plip_receive_packet(struct net_device *dev, struct net_local *nl, |
@@ -702,7 +701,7 @@ plip_receive_packet(struct net_device *dev, struct net_local *nl, | |||
702 | 701 | ||
703 | /* PLIP_SEND --- send a byte (two nibbles) | 702 | /* PLIP_SEND --- send a byte (two nibbles) |
704 | Returns OK on success, TIMEOUT when timeout */ | 703 | Returns OK on success, TIMEOUT when timeout */ |
705 | inline static int | 704 | static inline int |
706 | plip_send(unsigned short nibble_timeout, struct net_device *dev, | 705 | plip_send(unsigned short nibble_timeout, struct net_device *dev, |
707 | enum plip_nibble_state *ns_p, unsigned char data) | 706 | enum plip_nibble_state *ns_p, unsigned char data) |
708 | { | 707 | { |
@@ -902,7 +901,7 @@ plip_error(struct net_device *dev, struct net_local *nl, | |||
902 | 901 | ||
903 | return OK; | 902 | return OK; |
904 | } | 903 | } |
905 | 904 | ||
906 | /* Handle the parallel port interrupts. */ | 905 | /* Handle the parallel port interrupts. */ |
907 | static void | 906 | static void |
908 | plip_interrupt(int irq, void *dev_id, struct pt_regs * regs) | 907 | plip_interrupt(int irq, void *dev_id, struct pt_regs * regs) |
@@ -957,7 +956,7 @@ plip_interrupt(int irq, void *dev_id, struct pt_regs * regs) | |||
957 | 956 | ||
958 | spin_unlock_irq(&nl->lock); | 957 | spin_unlock_irq(&nl->lock); |
959 | } | 958 | } |
960 | 959 | ||
961 | static int | 960 | static int |
962 | plip_tx_packet(struct sk_buff *skb, struct net_device *dev) | 961 | plip_tx_packet(struct sk_buff *skb, struct net_device *dev) |
963 | { | 962 | { |
@@ -1238,7 +1237,7 @@ plip_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
1238 | } | 1237 | } |
1239 | return 0; | 1238 | return 0; |
1240 | } | 1239 | } |
1241 | 1240 | ||
1242 | static int parport[PLIP_MAX] = { [0 ... PLIP_MAX-1] = -1 }; | 1241 | static int parport[PLIP_MAX] = { [0 ... PLIP_MAX-1] = -1 }; |
1243 | static int timid; | 1242 | static int timid; |
1244 | 1243 | ||
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 54640686e983..201a550f0bcc 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -66,8 +66,8 @@ | |||
66 | 66 | ||
67 | #define DRV_MODULE_NAME "tg3" | 67 | #define DRV_MODULE_NAME "tg3" |
68 | #define PFX DRV_MODULE_NAME ": " | 68 | #define PFX DRV_MODULE_NAME ": " |
69 | #define DRV_MODULE_VERSION "3.33" | 69 | #define DRV_MODULE_VERSION "3.34" |
70 | #define DRV_MODULE_RELDATE "July 5, 2005" | 70 | #define DRV_MODULE_RELDATE "July 25, 2005" |
71 | 71 | ||
72 | #define TG3_DEF_MAC_MODE 0 | 72 | #define TG3_DEF_MAC_MODE 0 |
73 | #define TG3_DEF_RX_MODE 0 | 73 | #define TG3_DEF_RX_MODE 0 |
@@ -90,7 +90,7 @@ | |||
90 | /* hardware minimum and maximum for a single frame's data payload */ | 90 | /* hardware minimum and maximum for a single frame's data payload */ |
91 | #define TG3_MIN_MTU 60 | 91 | #define TG3_MIN_MTU 60 |
92 | #define TG3_MAX_MTU(tp) \ | 92 | #define TG3_MAX_MTU(tp) \ |
93 | (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ? 9000 : 1500) | 93 | ((tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) ? 9000 : 1500) |
94 | 94 | ||
95 | /* These numbers seem to be hard coded in the NIC firmware somehow. | 95 | /* These numbers seem to be hard coded in the NIC firmware somehow. |
96 | * You can't change the ring sizes, but you can change where you place | 96 | * You can't change the ring sizes, but you can change where you place |
@@ -221,6 +221,10 @@ static struct pci_device_id tg3_pci_tbl[] = { | |||
221 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 221 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
222 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F, | 222 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F, |
223 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 223 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
224 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780, | ||
225 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | ||
226 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S, | ||
227 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | ||
224 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781, | 228 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781, |
225 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 229 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
226 | { PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX, | 230 | { PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX, |
@@ -508,6 +512,9 @@ static void tg3_switch_clocks(struct tg3 *tp) | |||
508 | u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); | 512 | u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); |
509 | u32 orig_clock_ctrl; | 513 | u32 orig_clock_ctrl; |
510 | 514 | ||
515 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | ||
516 | return; | ||
517 | |||
511 | orig_clock_ctrl = clock_ctrl; | 518 | orig_clock_ctrl = clock_ctrl; |
512 | clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | | 519 | clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | |
513 | CLOCK_CTRL_CLKRUN_OENABLE | | 520 | CLOCK_CTRL_CLKRUN_OENABLE | |
@@ -907,7 +914,7 @@ out: | |||
907 | if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) { | 914 | if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) { |
908 | /* Cannot do read-modify-write on 5401 */ | 915 | /* Cannot do read-modify-write on 5401 */ |
909 | tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20); | 916 | tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20); |
910 | } else if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) { | 917 | } else if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) { |
911 | u32 phy_reg; | 918 | u32 phy_reg; |
912 | 919 | ||
913 | /* Set bit 14 with read-modify-write to preserve other bits */ | 920 | /* Set bit 14 with read-modify-write to preserve other bits */ |
@@ -919,7 +926,7 @@ out: | |||
919 | /* Set phy register 0x10 bit 0 to high fifo elasticity to support | 926 | /* Set phy register 0x10 bit 0 to high fifo elasticity to support |
920 | * jumbo frames transmission. | 927 | * jumbo frames transmission. |
921 | */ | 928 | */ |
922 | if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) { | 929 | if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) { |
923 | u32 phy_reg; | 930 | u32 phy_reg; |
924 | 931 | ||
925 | if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &phy_reg)) | 932 | if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &phy_reg)) |
@@ -1093,7 +1100,7 @@ static int tg3_set_power_state(struct tg3 *tp, int state) | |||
1093 | tp->link_config.orig_autoneg = tp->link_config.autoneg; | 1100 | tp->link_config.orig_autoneg = tp->link_config.autoneg; |
1094 | } | 1101 | } |
1095 | 1102 | ||
1096 | if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) { | 1103 | if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) { |
1097 | tp->link_config.speed = SPEED_10; | 1104 | tp->link_config.speed = SPEED_10; |
1098 | tp->link_config.duplex = DUPLEX_HALF; | 1105 | tp->link_config.duplex = DUPLEX_HALF; |
1099 | tp->link_config.autoneg = AUTONEG_ENABLE; | 1106 | tp->link_config.autoneg = AUTONEG_ENABLE; |
@@ -1145,6 +1152,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state) | |||
1145 | CLOCK_CTRL_ALTCLK | | 1152 | CLOCK_CTRL_ALTCLK | |
1146 | CLOCK_CTRL_PWRDOWN_PLL133); | 1153 | CLOCK_CTRL_PWRDOWN_PLL133); |
1147 | udelay(40); | 1154 | udelay(40); |
1155 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | ||
1156 | /* do nothing */ | ||
1148 | } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && | 1157 | } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && |
1149 | (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) { | 1158 | (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) { |
1150 | u32 newbits1, newbits2; | 1159 | u32 newbits1, newbits2; |
@@ -1238,6 +1247,25 @@ static void tg3_setup_flow_control(struct tg3 *tp, u32 local_adv, u32 remote_adv | |||
1238 | u32 old_tx_mode = tp->tx_mode; | 1247 | u32 old_tx_mode = tp->tx_mode; |
1239 | 1248 | ||
1240 | if (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) { | 1249 | if (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) { |
1250 | |||
1251 | /* Convert 1000BaseX flow control bits to 1000BaseT | ||
1252 | * bits before resolving flow control. | ||
1253 | */ | ||
1254 | if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) { | ||
1255 | local_adv &= ~(ADVERTISE_PAUSE_CAP | | ||
1256 | ADVERTISE_PAUSE_ASYM); | ||
1257 | remote_adv &= ~(LPA_PAUSE_CAP | LPA_PAUSE_ASYM); | ||
1258 | |||
1259 | if (local_adv & ADVERTISE_1000XPAUSE) | ||
1260 | local_adv |= ADVERTISE_PAUSE_CAP; | ||
1261 | if (local_adv & ADVERTISE_1000XPSE_ASYM) | ||
1262 | local_adv |= ADVERTISE_PAUSE_ASYM; | ||
1263 | if (remote_adv & LPA_1000XPAUSE) | ||
1264 | remote_adv |= LPA_PAUSE_CAP; | ||
1265 | if (remote_adv & LPA_1000XPAUSE_ASYM) | ||
1266 | remote_adv |= LPA_PAUSE_ASYM; | ||
1267 | } | ||
1268 | |||
1241 | if (local_adv & ADVERTISE_PAUSE_CAP) { | 1269 | if (local_adv & ADVERTISE_PAUSE_CAP) { |
1242 | if (local_adv & ADVERTISE_PAUSE_ASYM) { | 1270 | if (local_adv & ADVERTISE_PAUSE_ASYM) { |
1243 | if (remote_adv & LPA_PAUSE_CAP) | 1271 | if (remote_adv & LPA_PAUSE_CAP) |
@@ -2498,12 +2526,226 @@ static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset) | |||
2498 | return 0; | 2526 | return 0; |
2499 | } | 2527 | } |
2500 | 2528 | ||
2529 | static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset) | ||
2530 | { | ||
2531 | int current_link_up, err = 0; | ||
2532 | u32 bmsr, bmcr; | ||
2533 | u16 current_speed; | ||
2534 | u8 current_duplex; | ||
2535 | |||
2536 | tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; | ||
2537 | tw32_f(MAC_MODE, tp->mac_mode); | ||
2538 | udelay(40); | ||
2539 | |||
2540 | tw32(MAC_EVENT, 0); | ||
2541 | |||
2542 | tw32_f(MAC_STATUS, | ||
2543 | (MAC_STATUS_SYNC_CHANGED | | ||
2544 | MAC_STATUS_CFG_CHANGED | | ||
2545 | MAC_STATUS_MI_COMPLETION | | ||
2546 | MAC_STATUS_LNKSTATE_CHANGED)); | ||
2547 | udelay(40); | ||
2548 | |||
2549 | if (force_reset) | ||
2550 | tg3_phy_reset(tp); | ||
2551 | |||
2552 | current_link_up = 0; | ||
2553 | current_speed = SPEED_INVALID; | ||
2554 | current_duplex = DUPLEX_INVALID; | ||
2555 | |||
2556 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); | ||
2557 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); | ||
2558 | |||
2559 | err |= tg3_readphy(tp, MII_BMCR, &bmcr); | ||
2560 | |||
2561 | if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && | ||
2562 | (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) { | ||
2563 | /* do nothing, just check for link up at the end */ | ||
2564 | } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { | ||
2565 | u32 adv, new_adv; | ||
2566 | |||
2567 | err |= tg3_readphy(tp, MII_ADVERTISE, &adv); | ||
2568 | new_adv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | | ||
2569 | ADVERTISE_1000XPAUSE | | ||
2570 | ADVERTISE_1000XPSE_ASYM | | ||
2571 | ADVERTISE_SLCT); | ||
2572 | |||
2573 | /* Always advertise symmetric PAUSE just like copper */ | ||
2574 | new_adv |= ADVERTISE_1000XPAUSE; | ||
2575 | |||
2576 | if (tp->link_config.advertising & ADVERTISED_1000baseT_Half) | ||
2577 | new_adv |= ADVERTISE_1000XHALF; | ||
2578 | if (tp->link_config.advertising & ADVERTISED_1000baseT_Full) | ||
2579 | new_adv |= ADVERTISE_1000XFULL; | ||
2580 | |||
2581 | if ((new_adv != adv) || !(bmcr & BMCR_ANENABLE)) { | ||
2582 | tg3_writephy(tp, MII_ADVERTISE, new_adv); | ||
2583 | bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; | ||
2584 | tg3_writephy(tp, MII_BMCR, bmcr); | ||
2585 | |||
2586 | tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); | ||
2587 | tp->tg3_flags2 |= TG3_FLG2_PHY_JUST_INITTED; | ||
2588 | tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT; | ||
2589 | |||
2590 | return err; | ||
2591 | } | ||
2592 | } else { | ||
2593 | u32 new_bmcr; | ||
2594 | |||
2595 | bmcr &= ~BMCR_SPEED1000; | ||
2596 | new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); | ||
2597 | |||
2598 | if (tp->link_config.duplex == DUPLEX_FULL) | ||
2599 | new_bmcr |= BMCR_FULLDPLX; | ||
2600 | |||
2601 | if (new_bmcr != bmcr) { | ||
2602 | /* BMCR_SPEED1000 is a reserved bit that needs | ||
2603 | * to be set on write. | ||
2604 | */ | ||
2605 | new_bmcr |= BMCR_SPEED1000; | ||
2606 | |||
2607 | /* Force a linkdown */ | ||
2608 | if (netif_carrier_ok(tp->dev)) { | ||
2609 | u32 adv; | ||
2610 | |||
2611 | err |= tg3_readphy(tp, MII_ADVERTISE, &adv); | ||
2612 | adv &= ~(ADVERTISE_1000XFULL | | ||
2613 | ADVERTISE_1000XHALF | | ||
2614 | ADVERTISE_SLCT); | ||
2615 | tg3_writephy(tp, MII_ADVERTISE, adv); | ||
2616 | tg3_writephy(tp, MII_BMCR, bmcr | | ||
2617 | BMCR_ANRESTART | | ||
2618 | BMCR_ANENABLE); | ||
2619 | udelay(10); | ||
2620 | netif_carrier_off(tp->dev); | ||
2621 | } | ||
2622 | tg3_writephy(tp, MII_BMCR, new_bmcr); | ||
2623 | bmcr = new_bmcr; | ||
2624 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); | ||
2625 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); | ||
2626 | tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT; | ||
2627 | } | ||
2628 | } | ||
2629 | |||
2630 | if (bmsr & BMSR_LSTATUS) { | ||
2631 | current_speed = SPEED_1000; | ||
2632 | current_link_up = 1; | ||
2633 | if (bmcr & BMCR_FULLDPLX) | ||
2634 | current_duplex = DUPLEX_FULL; | ||
2635 | else | ||
2636 | current_duplex = DUPLEX_HALF; | ||
2637 | |||
2638 | if (bmcr & BMCR_ANENABLE) { | ||
2639 | u32 local_adv, remote_adv, common; | ||
2640 | |||
2641 | err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); | ||
2642 | err |= tg3_readphy(tp, MII_LPA, &remote_adv); | ||
2643 | common = local_adv & remote_adv; | ||
2644 | if (common & (ADVERTISE_1000XHALF | | ||
2645 | ADVERTISE_1000XFULL)) { | ||
2646 | if (common & ADVERTISE_1000XFULL) | ||
2647 | current_duplex = DUPLEX_FULL; | ||
2648 | else | ||
2649 | current_duplex = DUPLEX_HALF; | ||
2650 | |||
2651 | tg3_setup_flow_control(tp, local_adv, | ||
2652 | remote_adv); | ||
2653 | } | ||
2654 | else | ||
2655 | current_link_up = 0; | ||
2656 | } | ||
2657 | } | ||
2658 | |||
2659 | tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; | ||
2660 | if (tp->link_config.active_duplex == DUPLEX_HALF) | ||
2661 | tp->mac_mode |= MAC_MODE_HALF_DUPLEX; | ||
2662 | |||
2663 | tw32_f(MAC_MODE, tp->mac_mode); | ||
2664 | udelay(40); | ||
2665 | |||
2666 | tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); | ||
2667 | |||
2668 | tp->link_config.active_speed = current_speed; | ||
2669 | tp->link_config.active_duplex = current_duplex; | ||
2670 | |||
2671 | if (current_link_up != netif_carrier_ok(tp->dev)) { | ||
2672 | if (current_link_up) | ||
2673 | netif_carrier_on(tp->dev); | ||
2674 | else { | ||
2675 | netif_carrier_off(tp->dev); | ||
2676 | tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT; | ||
2677 | } | ||
2678 | tg3_link_report(tp); | ||
2679 | } | ||
2680 | return err; | ||
2681 | } | ||
2682 | |||
2683 | static void tg3_serdes_parallel_detect(struct tg3 *tp) | ||
2684 | { | ||
2685 | if (tp->tg3_flags2 & TG3_FLG2_PHY_JUST_INITTED) { | ||
2686 | /* Give autoneg time to complete. */ | ||
2687 | tp->tg3_flags2 &= ~TG3_FLG2_PHY_JUST_INITTED; | ||
2688 | return; | ||
2689 | } | ||
2690 | if (!netif_carrier_ok(tp->dev) && | ||
2691 | (tp->link_config.autoneg == AUTONEG_ENABLE)) { | ||
2692 | u32 bmcr; | ||
2693 | |||
2694 | tg3_readphy(tp, MII_BMCR, &bmcr); | ||
2695 | if (bmcr & BMCR_ANENABLE) { | ||
2696 | u32 phy1, phy2; | ||
2697 | |||
2698 | /* Select shadow register 0x1f */ | ||
2699 | tg3_writephy(tp, 0x1c, 0x7c00); | ||
2700 | tg3_readphy(tp, 0x1c, &phy1); | ||
2701 | |||
2702 | /* Select expansion interrupt status register */ | ||
2703 | tg3_writephy(tp, 0x17, 0x0f01); | ||
2704 | tg3_readphy(tp, 0x15, &phy2); | ||
2705 | tg3_readphy(tp, 0x15, &phy2); | ||
2706 | |||
2707 | if ((phy1 & 0x10) && !(phy2 & 0x20)) { | ||
2708 | /* We have signal detect and not receiving | ||
2709 | * config code words, link is up by parallel | ||
2710 | * detection. | ||
2711 | */ | ||
2712 | |||
2713 | bmcr &= ~BMCR_ANENABLE; | ||
2714 | bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; | ||
2715 | tg3_writephy(tp, MII_BMCR, bmcr); | ||
2716 | tp->tg3_flags2 |= TG3_FLG2_PARALLEL_DETECT; | ||
2717 | } | ||
2718 | } | ||
2719 | } | ||
2720 | else if (netif_carrier_ok(tp->dev) && | ||
2721 | (tp->link_config.autoneg == AUTONEG_ENABLE) && | ||
2722 | (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) { | ||
2723 | u32 phy2; | ||
2724 | |||
2725 | /* Select expansion interrupt status register */ | ||
2726 | tg3_writephy(tp, 0x17, 0x0f01); | ||
2727 | tg3_readphy(tp, 0x15, &phy2); | ||
2728 | if (phy2 & 0x20) { | ||
2729 | u32 bmcr; | ||
2730 | |||
2731 | /* Config code words received, turn on autoneg. */ | ||
2732 | tg3_readphy(tp, MII_BMCR, &bmcr); | ||
2733 | tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); | ||
2734 | |||
2735 | tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT; | ||
2736 | |||
2737 | } | ||
2738 | } | ||
2739 | } | ||
2740 | |||
2501 | static int tg3_setup_phy(struct tg3 *tp, int force_reset) | 2741 | static int tg3_setup_phy(struct tg3 *tp, int force_reset) |
2502 | { | 2742 | { |
2503 | int err; | 2743 | int err; |
2504 | 2744 | ||
2505 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) { | 2745 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) { |
2506 | err = tg3_setup_fiber_phy(tp, force_reset); | 2746 | err = tg3_setup_fiber_phy(tp, force_reset); |
2747 | } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) { | ||
2748 | err = tg3_setup_fiber_mii_phy(tp, force_reset); | ||
2507 | } else { | 2749 | } else { |
2508 | err = tg3_setup_copper_phy(tp, force_reset); | 2750 | err = tg3_setup_copper_phy(tp, force_reset); |
2509 | } | 2751 | } |
@@ -2612,7 +2854,7 @@ static int tg3_alloc_rx_skb(struct tg3 *tp, u32 opaque_key, | |||
2612 | map = &tp->rx_std_buffers[dest_idx]; | 2854 | map = &tp->rx_std_buffers[dest_idx]; |
2613 | if (src_idx >= 0) | 2855 | if (src_idx >= 0) |
2614 | src_map = &tp->rx_std_buffers[src_idx]; | 2856 | src_map = &tp->rx_std_buffers[src_idx]; |
2615 | skb_size = RX_PKT_BUF_SZ; | 2857 | skb_size = tp->rx_pkt_buf_sz; |
2616 | break; | 2858 | break; |
2617 | 2859 | ||
2618 | case RXD_OPAQUE_RING_JUMBO: | 2860 | case RXD_OPAQUE_RING_JUMBO: |
@@ -3434,10 +3676,18 @@ static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, | |||
3434 | { | 3676 | { |
3435 | dev->mtu = new_mtu; | 3677 | dev->mtu = new_mtu; |
3436 | 3678 | ||
3437 | if (new_mtu > ETH_DATA_LEN) | 3679 | if (new_mtu > ETH_DATA_LEN) { |
3438 | tp->tg3_flags |= TG3_FLAG_JUMBO_ENABLE; | 3680 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { |
3439 | else | 3681 | tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE; |
3440 | tp->tg3_flags &= ~TG3_FLAG_JUMBO_ENABLE; | 3682 | ethtool_op_set_tso(dev, 0); |
3683 | } | ||
3684 | else | ||
3685 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; | ||
3686 | } else { | ||
3687 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | ||
3688 | tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE; | ||
3689 | tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE; | ||
3690 | } | ||
3441 | } | 3691 | } |
3442 | 3692 | ||
3443 | static int tg3_change_mtu(struct net_device *dev, int new_mtu) | 3693 | static int tg3_change_mtu(struct net_device *dev, int new_mtu) |
@@ -3491,7 +3741,7 @@ static void tg3_free_rings(struct tg3 *tp) | |||
3491 | continue; | 3741 | continue; |
3492 | pci_unmap_single(tp->pdev, | 3742 | pci_unmap_single(tp->pdev, |
3493 | pci_unmap_addr(rxp, mapping), | 3743 | pci_unmap_addr(rxp, mapping), |
3494 | RX_PKT_BUF_SZ - tp->rx_offset, | 3744 | tp->rx_pkt_buf_sz - tp->rx_offset, |
3495 | PCI_DMA_FROMDEVICE); | 3745 | PCI_DMA_FROMDEVICE); |
3496 | dev_kfree_skb_any(rxp->skb); | 3746 | dev_kfree_skb_any(rxp->skb); |
3497 | rxp->skb = NULL; | 3747 | rxp->skb = NULL; |
@@ -3564,6 +3814,11 @@ static void tg3_init_rings(struct tg3 *tp) | |||
3564 | memset(tp->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); | 3814 | memset(tp->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); |
3565 | memset(tp->tx_ring, 0, TG3_TX_RING_BYTES); | 3815 | memset(tp->tx_ring, 0, TG3_TX_RING_BYTES); |
3566 | 3816 | ||
3817 | tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ; | ||
3818 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) && | ||
3819 | (tp->dev->mtu > ETH_DATA_LEN)) | ||
3820 | tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ; | ||
3821 | |||
3567 | /* Initialize invariants of the rings, we only set this | 3822 | /* Initialize invariants of the rings, we only set this |
3568 | * stuff once. This works because the card does not | 3823 | * stuff once. This works because the card does not |
3569 | * write into the rx buffer posting rings. | 3824 | * write into the rx buffer posting rings. |
@@ -3572,14 +3827,14 @@ static void tg3_init_rings(struct tg3 *tp) | |||
3572 | struct tg3_rx_buffer_desc *rxd; | 3827 | struct tg3_rx_buffer_desc *rxd; |
3573 | 3828 | ||
3574 | rxd = &tp->rx_std[i]; | 3829 | rxd = &tp->rx_std[i]; |
3575 | rxd->idx_len = (RX_PKT_BUF_SZ - tp->rx_offset - 64) | 3830 | rxd->idx_len = (tp->rx_pkt_buf_sz - tp->rx_offset - 64) |
3576 | << RXD_LEN_SHIFT; | 3831 | << RXD_LEN_SHIFT; |
3577 | rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); | 3832 | rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); |
3578 | rxd->opaque = (RXD_OPAQUE_RING_STD | | 3833 | rxd->opaque = (RXD_OPAQUE_RING_STD | |
3579 | (i << RXD_OPAQUE_INDEX_SHIFT)); | 3834 | (i << RXD_OPAQUE_INDEX_SHIFT)); |
3580 | } | 3835 | } |
3581 | 3836 | ||
3582 | if (tp->tg3_flags & TG3_FLAG_JUMBO_ENABLE) { | 3837 | if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) { |
3583 | for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) { | 3838 | for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) { |
3584 | struct tg3_rx_buffer_desc *rxd; | 3839 | struct tg3_rx_buffer_desc *rxd; |
3585 | 3840 | ||
@@ -3600,7 +3855,7 @@ static void tg3_init_rings(struct tg3 *tp) | |||
3600 | break; | 3855 | break; |
3601 | } | 3856 | } |
3602 | 3857 | ||
3603 | if (tp->tg3_flags & TG3_FLAG_JUMBO_ENABLE) { | 3858 | if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) { |
3604 | for (i = 0; i < tp->rx_jumbo_pending; i++) { | 3859 | for (i = 0; i < tp->rx_jumbo_pending; i++) { |
3605 | if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_JUMBO, | 3860 | if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_JUMBO, |
3606 | -1, i) < 0) | 3861 | -1, i) < 0) |
@@ -4056,7 +4311,30 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
4056 | val &= ~PCIX_CAPS_RELAXED_ORDERING; | 4311 | val &= ~PCIX_CAPS_RELAXED_ORDERING; |
4057 | pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val); | 4312 | pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val); |
4058 | 4313 | ||
4059 | tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); | 4314 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { |
4315 | u32 val; | ||
4316 | |||
4317 | /* Chip reset on 5780 will reset MSI enable bit, | ||
4318 | * so need to restore it. | ||
4319 | */ | ||
4320 | if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) { | ||
4321 | u16 ctrl; | ||
4322 | |||
4323 | pci_read_config_word(tp->pdev, | ||
4324 | tp->msi_cap + PCI_MSI_FLAGS, | ||
4325 | &ctrl); | ||
4326 | pci_write_config_word(tp->pdev, | ||
4327 | tp->msi_cap + PCI_MSI_FLAGS, | ||
4328 | ctrl | PCI_MSI_FLAGS_ENABLE); | ||
4329 | val = tr32(MSGINT_MODE); | ||
4330 | tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); | ||
4331 | } | ||
4332 | |||
4333 | val = tr32(MEMARB_MODE); | ||
4334 | tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); | ||
4335 | |||
4336 | } else | ||
4337 | tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); | ||
4060 | 4338 | ||
4061 | if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) { | 4339 | if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) { |
4062 | tg3_stop_fw(tp); | 4340 | tg3_stop_fw(tp); |
@@ -4082,6 +4360,9 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
4082 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) { | 4360 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) { |
4083 | tp->mac_mode = MAC_MODE_PORT_MODE_TBI; | 4361 | tp->mac_mode = MAC_MODE_PORT_MODE_TBI; |
4084 | tw32_f(MAC_MODE, tp->mac_mode); | 4362 | tw32_f(MAC_MODE, tp->mac_mode); |
4363 | } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) { | ||
4364 | tp->mac_mode = MAC_MODE_PORT_MODE_GMII; | ||
4365 | tw32_f(MAC_MODE, tp->mac_mode); | ||
4085 | } else | 4366 | } else |
4086 | tw32_f(MAC_MODE, 0); | 4367 | tw32_f(MAC_MODE, 0); |
4087 | udelay(40); | 4368 | udelay(40); |
@@ -5245,7 +5526,7 @@ static int tg3_reset_hw(struct tg3 *tp) | |||
5245 | } | 5526 | } |
5246 | #endif | 5527 | #endif |
5247 | 5528 | ||
5248 | if (!(tp->tg3_flags & TG3_FLAG_JUMBO_ENABLE)) { | 5529 | if (tp->dev->mtu <= ETH_DATA_LEN) { |
5249 | tw32(BUFMGR_MB_RDMA_LOW_WATER, | 5530 | tw32(BUFMGR_MB_RDMA_LOW_WATER, |
5250 | tp->bufmgr_config.mbuf_read_dma_low_water); | 5531 | tp->bufmgr_config.mbuf_read_dma_low_water); |
5251 | tw32(BUFMGR_MB_MACRX_LOW_WATER, | 5532 | tw32(BUFMGR_MB_MACRX_LOW_WATER, |
@@ -5320,7 +5601,7 @@ static int tg3_reset_hw(struct tg3 *tp) | |||
5320 | /* Setup replenish threshold. */ | 5601 | /* Setup replenish threshold. */ |
5321 | tw32(RCVBDI_JUMBO_THRESH, tp->rx_jumbo_pending / 8); | 5602 | tw32(RCVBDI_JUMBO_THRESH, tp->rx_jumbo_pending / 8); |
5322 | 5603 | ||
5323 | if (tp->tg3_flags & TG3_FLAG_JUMBO_ENABLE) { | 5604 | if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) { |
5324 | tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, | 5605 | tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, |
5325 | ((u64) tp->rx_jumbo_mapping >> 32)); | 5606 | ((u64) tp->rx_jumbo_mapping >> 32)); |
5326 | tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, | 5607 | tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, |
@@ -5381,7 +5662,7 @@ static int tg3_reset_hw(struct tg3 *tp) | |||
5381 | tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW, | 5662 | tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW, |
5382 | tp->rx_std_ptr); | 5663 | tp->rx_std_ptr); |
5383 | 5664 | ||
5384 | tp->rx_jumbo_ptr = (tp->tg3_flags & TG3_FLAG_JUMBO_ENABLE) ? | 5665 | tp->rx_jumbo_ptr = (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) ? |
5385 | tp->rx_jumbo_pending : 0; | 5666 | tp->rx_jumbo_pending : 0; |
5386 | tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW, | 5667 | tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW, |
5387 | tp->rx_jumbo_ptr); | 5668 | tp->rx_jumbo_ptr); |
@@ -5683,7 +5964,8 @@ static int tg3_reset_hw(struct tg3 *tp) | |||
5683 | tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); | 5964 | tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); |
5684 | tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); | 5965 | tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); |
5685 | 5966 | ||
5686 | if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) | 5967 | if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) && |
5968 | (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780)) | ||
5687 | limit = 8; | 5969 | limit = 8; |
5688 | else | 5970 | else |
5689 | limit = 16; | 5971 | limit = 16; |
@@ -5865,7 +6147,8 @@ static void tg3_timer(unsigned long __opaque) | |||
5865 | udelay(40); | 6147 | udelay(40); |
5866 | tg3_setup_phy(tp, 0); | 6148 | tg3_setup_phy(tp, 0); |
5867 | } | 6149 | } |
5868 | } | 6150 | } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) |
6151 | tg3_serdes_parallel_detect(tp); | ||
5869 | 6152 | ||
5870 | tp->timer_counter = tp->timer_multiplier; | 6153 | tp->timer_counter = tp->timer_multiplier; |
5871 | } | 6154 | } |
@@ -8569,8 +8852,12 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) | |||
8569 | eeprom_phy_id = 0; | 8852 | eeprom_phy_id = 0; |
8570 | 8853 | ||
8571 | tp->phy_id = eeprom_phy_id; | 8854 | tp->phy_id = eeprom_phy_id; |
8572 | if (eeprom_phy_serdes) | 8855 | if (eeprom_phy_serdes) { |
8573 | tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; | 8856 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) |
8857 | tp->tg3_flags2 |= TG3_FLG2_MII_SERDES; | ||
8858 | else | ||
8859 | tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; | ||
8860 | } | ||
8574 | 8861 | ||
8575 | if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) | 8862 | if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) |
8576 | led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | | 8863 | led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | |
@@ -8705,7 +8992,7 @@ static int __devinit tg3_phy_probe(struct tg3 *tp) | |||
8705 | } | 8992 | } |
8706 | } | 8993 | } |
8707 | 8994 | ||
8708 | if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) && | 8995 | if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) && |
8709 | !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) { | 8996 | !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) { |
8710 | u32 bmsr, adv_reg, tg3_ctrl; | 8997 | u32 bmsr, adv_reg, tg3_ctrl; |
8711 | 8998 | ||
@@ -8758,7 +9045,7 @@ skip_phy_reset: | |||
8758 | err = tg3_init_5401phy_dsp(tp); | 9045 | err = tg3_init_5401phy_dsp(tp); |
8759 | } | 9046 | } |
8760 | 9047 | ||
8761 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) | 9048 | if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) |
8762 | tp->link_config.advertising = | 9049 | tp->link_config.advertising = |
8763 | (ADVERTISED_1000baseT_Half | | 9050 | (ADVERTISED_1000baseT_Half | |
8764 | ADVERTISED_1000baseT_Full | | 9051 | ADVERTISED_1000baseT_Full | |
@@ -8928,6 +9215,10 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
8928 | if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW) | 9215 | if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW) |
8929 | tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; | 9216 | tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; |
8930 | 9217 | ||
9218 | /* Find msi capability. */ | ||
9219 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | ||
9220 | tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); | ||
9221 | |||
8931 | /* Initialize misc host control in PCI block. */ | 9222 | /* Initialize misc host control in PCI block. */ |
8932 | tp->misc_host_ctrl |= (misc_ctrl_reg & | 9223 | tp->misc_host_ctrl |= (misc_ctrl_reg & |
8933 | MISC_HOST_CTRL_CHIPREV); | 9224 | MISC_HOST_CTRL_CHIPREV); |
@@ -8943,7 +9234,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
8943 | tp->pci_bist = (cacheline_sz_reg >> 24) & 0xff; | 9234 | tp->pci_bist = (cacheline_sz_reg >> 24) & 0xff; |
8944 | 9235 | ||
8945 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || | 9236 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || |
8946 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) | 9237 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || |
9238 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | ||
8947 | tp->tg3_flags2 |= TG3_FLG2_5750_PLUS; | 9239 | tp->tg3_flags2 |= TG3_FLG2_5750_PLUS; |
8948 | 9240 | ||
8949 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) || | 9241 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) || |
@@ -8953,6 +9245,11 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
8953 | if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) | 9245 | if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) |
8954 | tp->tg3_flags2 |= TG3_FLG2_HW_TSO; | 9246 | tp->tg3_flags2 |= TG3_FLG2_HW_TSO; |
8955 | 9247 | ||
9248 | if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && | ||
9249 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750 && | ||
9250 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752) | ||
9251 | tp->tg3_flags2 |= TG3_FLG2_JUMBO_CAPABLE; | ||
9252 | |||
8956 | if (pci_find_capability(tp->pdev, PCI_CAP_ID_EXP) != 0) | 9253 | if (pci_find_capability(tp->pdev, PCI_CAP_ID_EXP) != 0) |
8957 | tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS; | 9254 | tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS; |
8958 | 9255 | ||
@@ -9079,8 +9376,9 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
9079 | /* Derive initial jumbo mode from MTU assigned in | 9376 | /* Derive initial jumbo mode from MTU assigned in |
9080 | * ether_setup() via the alloc_etherdev() call | 9377 | * ether_setup() via the alloc_etherdev() call |
9081 | */ | 9378 | */ |
9082 | if (tp->dev->mtu > ETH_DATA_LEN) | 9379 | if (tp->dev->mtu > ETH_DATA_LEN && |
9083 | tp->tg3_flags |= TG3_FLAG_JUMBO_ENABLE; | 9380 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780) |
9381 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; | ||
9084 | 9382 | ||
9085 | /* Determine WakeOnLan speed to use. */ | 9383 | /* Determine WakeOnLan speed to use. */ |
9086 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || | 9384 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || |
@@ -9096,7 +9394,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
9096 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) || | 9394 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) || |
9097 | ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) && | 9395 | ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) && |
9098 | (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) && | 9396 | (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) && |
9099 | (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1))) | 9397 | (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) || |
9398 | (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) | ||
9100 | tp->tg3_flags2 |= TG3_FLG2_NO_ETH_WIRE_SPEED; | 9399 | tp->tg3_flags2 |= TG3_FLG2_NO_ETH_WIRE_SPEED; |
9101 | 9400 | ||
9102 | if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX || | 9401 | if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX || |
@@ -9305,8 +9604,9 @@ static int __devinit tg3_get_device_address(struct tg3 *tp) | |||
9305 | #endif | 9604 | #endif |
9306 | 9605 | ||
9307 | mac_offset = 0x7c; | 9606 | mac_offset = 0x7c; |
9308 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && | 9607 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && |
9309 | !(tp->tg3_flags & TG3_FLG2_SUN_570X)) { | 9608 | !(tp->tg3_flags & TG3_FLG2_SUN_570X)) || |
9609 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | ||
9310 | if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) | 9610 | if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) |
9311 | mac_offset = 0xcc; | 9611 | mac_offset = 0xcc; |
9312 | if (tg3_nvram_lock(tp)) | 9612 | if (tg3_nvram_lock(tp)) |
@@ -9620,6 +9920,9 @@ static int __devinit tg3_test_dma(struct tg3 *tp) | |||
9620 | 9920 | ||
9621 | /* Set bit 23 to enable PCIX hw bug fix */ | 9921 | /* Set bit 23 to enable PCIX hw bug fix */ |
9622 | tp->dma_rwctrl |= 0x009f0000; | 9922 | tp->dma_rwctrl |= 0x009f0000; |
9923 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | ||
9924 | /* 5780 always in PCIX mode */ | ||
9925 | tp->dma_rwctrl |= 0x00144000; | ||
9623 | } else { | 9926 | } else { |
9624 | tp->dma_rwctrl |= 0x001b000f; | 9927 | tp->dma_rwctrl |= 0x001b000f; |
9625 | } | 9928 | } |
@@ -9773,19 +10076,35 @@ static void __devinit tg3_init_link_config(struct tg3 *tp) | |||
9773 | 10076 | ||
9774 | static void __devinit tg3_init_bufmgr_config(struct tg3 *tp) | 10077 | static void __devinit tg3_init_bufmgr_config(struct tg3 *tp) |
9775 | { | 10078 | { |
9776 | tp->bufmgr_config.mbuf_read_dma_low_water = | 10079 | if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) { |
9777 | DEFAULT_MB_RDMA_LOW_WATER; | 10080 | tp->bufmgr_config.mbuf_read_dma_low_water = |
9778 | tp->bufmgr_config.mbuf_mac_rx_low_water = | 10081 | DEFAULT_MB_RDMA_LOW_WATER_5705; |
9779 | DEFAULT_MB_MACRX_LOW_WATER; | 10082 | tp->bufmgr_config.mbuf_mac_rx_low_water = |
9780 | tp->bufmgr_config.mbuf_high_water = | 10083 | DEFAULT_MB_MACRX_LOW_WATER_5705; |
9781 | DEFAULT_MB_HIGH_WATER; | 10084 | tp->bufmgr_config.mbuf_high_water = |
10085 | DEFAULT_MB_HIGH_WATER_5705; | ||
10086 | |||
10087 | tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = | ||
10088 | DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; | ||
10089 | tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = | ||
10090 | DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; | ||
10091 | tp->bufmgr_config.mbuf_high_water_jumbo = | ||
10092 | DEFAULT_MB_HIGH_WATER_JUMBO_5780; | ||
10093 | } else { | ||
10094 | tp->bufmgr_config.mbuf_read_dma_low_water = | ||
10095 | DEFAULT_MB_RDMA_LOW_WATER; | ||
10096 | tp->bufmgr_config.mbuf_mac_rx_low_water = | ||
10097 | DEFAULT_MB_MACRX_LOW_WATER; | ||
10098 | tp->bufmgr_config.mbuf_high_water = | ||
10099 | DEFAULT_MB_HIGH_WATER; | ||
9782 | 10100 | ||
9783 | tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = | 10101 | tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = |
9784 | DEFAULT_MB_RDMA_LOW_WATER_JUMBO; | 10102 | DEFAULT_MB_RDMA_LOW_WATER_JUMBO; |
9785 | tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = | 10103 | tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = |
9786 | DEFAULT_MB_MACRX_LOW_WATER_JUMBO; | 10104 | DEFAULT_MB_MACRX_LOW_WATER_JUMBO; |
9787 | tp->bufmgr_config.mbuf_high_water_jumbo = | 10105 | tp->bufmgr_config.mbuf_high_water_jumbo = |
9788 | DEFAULT_MB_HIGH_WATER_JUMBO; | 10106 | DEFAULT_MB_HIGH_WATER_JUMBO; |
10107 | } | ||
9789 | 10108 | ||
9790 | tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; | 10109 | tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; |
9791 | tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; | 10110 | tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; |
@@ -9803,6 +10122,7 @@ static char * __devinit tg3_phy_string(struct tg3 *tp) | |||
9803 | case PHY_ID_BCM5705: return "5705"; | 10122 | case PHY_ID_BCM5705: return "5705"; |
9804 | case PHY_ID_BCM5750: return "5750"; | 10123 | case PHY_ID_BCM5750: return "5750"; |
9805 | case PHY_ID_BCM5752: return "5752"; | 10124 | case PHY_ID_BCM5752: return "5752"; |
10125 | case PHY_ID_BCM5780: return "5780"; | ||
9806 | case PHY_ID_BCM8002: return "8002/serdes"; | 10126 | case PHY_ID_BCM8002: return "8002/serdes"; |
9807 | case 0: return "serdes"; | 10127 | case 0: return "serdes"; |
9808 | default: return "unknown"; | 10128 | default: return "unknown"; |
@@ -9998,8 +10318,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
9998 | 10318 | ||
9999 | tg3_init_link_config(tp); | 10319 | tg3_init_link_config(tp); |
10000 | 10320 | ||
10001 | tg3_init_bufmgr_config(tp); | ||
10002 | |||
10003 | tp->rx_pending = TG3_DEF_RX_RING_PENDING; | 10321 | tp->rx_pending = TG3_DEF_RX_RING_PENDING; |
10004 | tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; | 10322 | tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; |
10005 | tp->tx_pending = TG3_DEF_TX_RING_PENDING; | 10323 | tp->tx_pending = TG3_DEF_TX_RING_PENDING; |
@@ -10028,14 +10346,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10028 | goto err_out_iounmap; | 10346 | goto err_out_iounmap; |
10029 | } | 10347 | } |
10030 | 10348 | ||
10031 | if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) { | 10349 | tg3_init_bufmgr_config(tp); |
10032 | tp->bufmgr_config.mbuf_read_dma_low_water = | ||
10033 | DEFAULT_MB_RDMA_LOW_WATER_5705; | ||
10034 | tp->bufmgr_config.mbuf_mac_rx_low_water = | ||
10035 | DEFAULT_MB_MACRX_LOW_WATER_5705; | ||
10036 | tp->bufmgr_config.mbuf_high_water = | ||
10037 | DEFAULT_MB_HIGH_WATER_5705; | ||
10038 | } | ||
10039 | 10350 | ||
10040 | #if TG3_TSO_SUPPORT != 0 | 10351 | #if TG3_TSO_SUPPORT != 0 |
10041 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) { | 10352 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) { |
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index 70ad450733e6..5c4433c147fa 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
@@ -136,6 +136,7 @@ | |||
136 | #define ASIC_REV_5705 0x03 | 136 | #define ASIC_REV_5705 0x03 |
137 | #define ASIC_REV_5750 0x04 | 137 | #define ASIC_REV_5750 0x04 |
138 | #define ASIC_REV_5752 0x06 | 138 | #define ASIC_REV_5752 0x06 |
139 | #define ASIC_REV_5780 0x08 | ||
139 | #define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8) | 140 | #define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8) |
140 | #define CHIPREV_5700_AX 0x70 | 141 | #define CHIPREV_5700_AX 0x70 |
141 | #define CHIPREV_5700_BX 0x71 | 142 | #define CHIPREV_5700_BX 0x71 |
@@ -984,14 +985,17 @@ | |||
984 | #define DEFAULT_MB_RDMA_LOW_WATER 0x00000050 | 985 | #define DEFAULT_MB_RDMA_LOW_WATER 0x00000050 |
985 | #define DEFAULT_MB_RDMA_LOW_WATER_5705 0x00000000 | 986 | #define DEFAULT_MB_RDMA_LOW_WATER_5705 0x00000000 |
986 | #define DEFAULT_MB_RDMA_LOW_WATER_JUMBO 0x00000130 | 987 | #define DEFAULT_MB_RDMA_LOW_WATER_JUMBO 0x00000130 |
988 | #define DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780 0x00000000 | ||
987 | #define BUFMGR_MB_MACRX_LOW_WATER 0x00004414 | 989 | #define BUFMGR_MB_MACRX_LOW_WATER 0x00004414 |
988 | #define DEFAULT_MB_MACRX_LOW_WATER 0x00000020 | 990 | #define DEFAULT_MB_MACRX_LOW_WATER 0x00000020 |
989 | #define DEFAULT_MB_MACRX_LOW_WATER_5705 0x00000010 | 991 | #define DEFAULT_MB_MACRX_LOW_WATER_5705 0x00000010 |
990 | #define DEFAULT_MB_MACRX_LOW_WATER_JUMBO 0x00000098 | 992 | #define DEFAULT_MB_MACRX_LOW_WATER_JUMBO 0x00000098 |
993 | #define DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780 0x0000004b | ||
991 | #define BUFMGR_MB_HIGH_WATER 0x00004418 | 994 | #define BUFMGR_MB_HIGH_WATER 0x00004418 |
992 | #define DEFAULT_MB_HIGH_WATER 0x00000060 | 995 | #define DEFAULT_MB_HIGH_WATER 0x00000060 |
993 | #define DEFAULT_MB_HIGH_WATER_5705 0x00000060 | 996 | #define DEFAULT_MB_HIGH_WATER_5705 0x00000060 |
994 | #define DEFAULT_MB_HIGH_WATER_JUMBO 0x0000017c | 997 | #define DEFAULT_MB_HIGH_WATER_JUMBO 0x0000017c |
998 | #define DEFAULT_MB_HIGH_WATER_JUMBO_5780 0x00000096 | ||
995 | #define BUFMGR_RX_MB_ALLOC_REQ 0x0000441c | 999 | #define BUFMGR_RX_MB_ALLOC_REQ 0x0000441c |
996 | #define BUFMGR_MB_ALLOC_BIT 0x10000000 | 1000 | #define BUFMGR_MB_ALLOC_BIT 0x10000000 |
997 | #define BUFMGR_RX_MB_ALLOC_RESP 0x00004420 | 1001 | #define BUFMGR_RX_MB_ALLOC_RESP 0x00004420 |
@@ -2087,6 +2091,8 @@ struct tg3 { | |||
2087 | struct tg3_rx_buffer_desc *rx_rcb; | 2091 | struct tg3_rx_buffer_desc *rx_rcb; |
2088 | dma_addr_t rx_rcb_mapping; | 2092 | dma_addr_t rx_rcb_mapping; |
2089 | 2093 | ||
2094 | u32 rx_pkt_buf_sz; | ||
2095 | |||
2090 | /* begin "everything else" cacheline(s) section */ | 2096 | /* begin "everything else" cacheline(s) section */ |
2091 | struct net_device_stats net_stats; | 2097 | struct net_device_stats net_stats; |
2092 | struct net_device_stats net_stats_prev; | 2098 | struct net_device_stats net_stats_prev; |
@@ -2124,7 +2130,7 @@ struct tg3 { | |||
2124 | #define TG3_FLAG_NO_TX_PSEUDO_CSUM 0x00100000 | 2130 | #define TG3_FLAG_NO_TX_PSEUDO_CSUM 0x00100000 |
2125 | #define TG3_FLAG_NO_RX_PSEUDO_CSUM 0x00200000 | 2131 | #define TG3_FLAG_NO_RX_PSEUDO_CSUM 0x00200000 |
2126 | #define TG3_FLAG_SERDES_WOL_CAP 0x00400000 | 2132 | #define TG3_FLAG_SERDES_WOL_CAP 0x00400000 |
2127 | #define TG3_FLAG_JUMBO_ENABLE 0x00800000 | 2133 | #define TG3_FLAG_JUMBO_RING_ENABLE 0x00800000 |
2128 | #define TG3_FLAG_10_100_ONLY 0x01000000 | 2134 | #define TG3_FLAG_10_100_ONLY 0x01000000 |
2129 | #define TG3_FLAG_PAUSE_AUTONEG 0x02000000 | 2135 | #define TG3_FLAG_PAUSE_AUTONEG 0x02000000 |
2130 | #define TG3_FLAG_BROKEN_CHECKSUMS 0x10000000 | 2136 | #define TG3_FLAG_BROKEN_CHECKSUMS 0x10000000 |
@@ -2154,6 +2160,11 @@ struct tg3 { | |||
2154 | #define TG3_FLG2_5750_PLUS 0x00080000 | 2160 | #define TG3_FLG2_5750_PLUS 0x00080000 |
2155 | #define TG3_FLG2_PROTECTED_NVRAM 0x00100000 | 2161 | #define TG3_FLG2_PROTECTED_NVRAM 0x00100000 |
2156 | #define TG3_FLG2_USING_MSI 0x00200000 | 2162 | #define TG3_FLG2_USING_MSI 0x00200000 |
2163 | #define TG3_FLG2_JUMBO_CAPABLE 0x00400000 | ||
2164 | #define TG3_FLG2_MII_SERDES 0x00800000 | ||
2165 | #define TG3_FLG2_ANY_SERDES (TG3_FLG2_PHY_SERDES | \ | ||
2166 | TG3_FLG2_MII_SERDES) | ||
2167 | #define TG3_FLG2_PARALLEL_DETECT 0x01000000 | ||
2157 | 2168 | ||
2158 | u32 split_mode_max_reqs; | 2169 | u32 split_mode_max_reqs; |
2159 | #define SPLIT_MODE_5704_MAX_REQ 3 | 2170 | #define SPLIT_MODE_5704_MAX_REQ 3 |
@@ -2187,6 +2198,7 @@ struct tg3 { | |||
2187 | u8 pci_bist; | 2198 | u8 pci_bist; |
2188 | 2199 | ||
2189 | int pm_cap; | 2200 | int pm_cap; |
2201 | int msi_cap; | ||
2190 | 2202 | ||
2191 | /* PHY info */ | 2203 | /* PHY info */ |
2192 | u32 phy_id; | 2204 | u32 phy_id; |
@@ -2200,6 +2212,7 @@ struct tg3 { | |||
2200 | #define PHY_ID_BCM5705 0x600081a0 | 2212 | #define PHY_ID_BCM5705 0x600081a0 |
2201 | #define PHY_ID_BCM5750 0x60008180 | 2213 | #define PHY_ID_BCM5750 0x60008180 |
2202 | #define PHY_ID_BCM5752 0x60008100 | 2214 | #define PHY_ID_BCM5752 0x60008100 |
2215 | #define PHY_ID_BCM5780 0x60008350 | ||
2203 | #define PHY_ID_BCM8002 0x60010140 | 2216 | #define PHY_ID_BCM8002 0x60010140 |
2204 | #define PHY_ID_INVALID 0xffffffff | 2217 | #define PHY_ID_INVALID 0xffffffff |
2205 | #define PHY_ID_REV_MASK 0x0000000f | 2218 | #define PHY_ID_REV_MASK 0x0000000f |
diff --git a/drivers/net/via-velocity.h b/drivers/net/via-velocity.h index 1b70b7c97580..d9a774b91ddc 100644 --- a/drivers/net/via-velocity.h +++ b/drivers/net/via-velocity.h | |||
@@ -1414,7 +1414,7 @@ static inline void mac_get_cam(struct mac_regs __iomem * regs, int idx, u8 *addr | |||
1414 | * the rest of the logic from the result of sleep/wakeup | 1414 | * the rest of the logic from the result of sleep/wakeup |
1415 | */ | 1415 | */ |
1416 | 1416 | ||
1417 | inline static void mac_wol_reset(struct mac_regs __iomem * regs) | 1417 | static inline void mac_wol_reset(struct mac_regs __iomem * regs) |
1418 | { | 1418 | { |
1419 | 1419 | ||
1420 | /* Turn off SWPTAG right after leaving power mode */ | 1420 | /* Turn off SWPTAG right after leaving power mode */ |
@@ -1811,7 +1811,7 @@ struct velocity_info { | |||
1811 | * CHECK ME: locking | 1811 | * CHECK ME: locking |
1812 | */ | 1812 | */ |
1813 | 1813 | ||
1814 | inline static int velocity_get_ip(struct velocity_info *vptr) | 1814 | static inline int velocity_get_ip(struct velocity_info *vptr) |
1815 | { | 1815 | { |
1816 | struct in_device *in_dev = (struct in_device *) vptr->dev->ip_ptr; | 1816 | struct in_device *in_dev = (struct in_device *) vptr->dev->ip_ptr; |
1817 | struct in_ifaddr *ifa; | 1817 | struct in_ifaddr *ifa; |
diff --git a/drivers/net/wan/sdla_fr.c b/drivers/net/wan/sdla_fr.c index 2efccb0554c0..c5f5e62aab8b 100644 --- a/drivers/net/wan/sdla_fr.c +++ b/drivers/net/wan/sdla_fr.c | |||
@@ -152,6 +152,7 @@ | |||
152 | #include <asm/io.h> /* for inb(), outb(), etc. */ | 152 | #include <asm/io.h> /* for inb(), outb(), etc. */ |
153 | #include <linux/time.h> /* for do_gettimeofday */ | 153 | #include <linux/time.h> /* for do_gettimeofday */ |
154 | #include <linux/in.h> /* sockaddr_in */ | 154 | #include <linux/in.h> /* sockaddr_in */ |
155 | #include <linux/jiffies.h> /* time_after() macro */ | ||
155 | #include <asm/errno.h> | 156 | #include <asm/errno.h> |
156 | 157 | ||
157 | #include <linux/ip.h> | 158 | #include <linux/ip.h> |
@@ -773,7 +774,7 @@ static int update(struct wan_device* wandev) | |||
773 | for(;;) { | 774 | for(;;) { |
774 | if(card->u.f.update_comms_stats == 0) | 775 | if(card->u.f.update_comms_stats == 0) |
775 | break; | 776 | break; |
776 | if ((jiffies - timeout) > (1 * HZ)){ | 777 | if (time_after(jiffies, timeout + 1 * HZ)){ |
777 | card->u.f.update_comms_stats = 0; | 778 | card->u.f.update_comms_stats = 0; |
778 | return -EAGAIN; | 779 | return -EAGAIN; |
779 | } | 780 | } |
@@ -4799,7 +4800,7 @@ static void trigger_unconfig_fr(struct net_device *dev) | |||
4799 | { | 4800 | { |
4800 | fr_channel_t *chan = dev->priv; | 4801 | fr_channel_t *chan = dev->priv; |
4801 | volatile sdla_t *card = chan->card; | 4802 | volatile sdla_t *card = chan->card; |
4802 | u32 timeout; | 4803 | unsigned long timeout; |
4803 | fr508_flags_t* flags = card->flags; | 4804 | fr508_flags_t* flags = card->flags; |
4804 | int reset_critical=0; | 4805 | int reset_critical=0; |
4805 | 4806 | ||
@@ -4821,7 +4822,7 @@ static void trigger_unconfig_fr(struct net_device *dev) | |||
4821 | if(!(card->u.f.timer_int_enabled & TMR_INT_ENABLED_UNCONFIG)) | 4822 | if(!(card->u.f.timer_int_enabled & TMR_INT_ENABLED_UNCONFIG)) |
4822 | break; | 4823 | break; |
4823 | 4824 | ||
4824 | if ((jiffies - timeout) > (1 * HZ)){ | 4825 | if (time_after(jiffies, timeout + 1 * HZ)){ |
4825 | card->u.f.timer_int_enabled &= ~TMR_INT_ENABLED_UNCONFIG; | 4826 | card->u.f.timer_int_enabled &= ~TMR_INT_ENABLED_UNCONFIG; |
4826 | printk(KERN_INFO "%s: Failed to delete DLCI %i\n", | 4827 | printk(KERN_INFO "%s: Failed to delete DLCI %i\n", |
4827 | card->devname,chan->dlci); | 4828 | card->devname,chan->dlci); |
diff --git a/drivers/net/wan/sdla_ft1.c b/drivers/net/wan/sdla_ft1.c index 5e3124856eb0..9d6528a50f7b 100644 --- a/drivers/net/wan/sdla_ft1.c +++ b/drivers/net/wan/sdla_ft1.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/wanrouter.h> /* WAN router definitions */ | 29 | #include <linux/wanrouter.h> /* WAN router definitions */ |
30 | #include <linux/wanpipe.h> /* WANPIPE common user API definitions */ | 30 | #include <linux/wanpipe.h> /* WANPIPE common user API definitions */ |
31 | #include <linux/if_arp.h> /* ARPHRD_* defines */ | 31 | #include <linux/if_arp.h> /* ARPHRD_* defines */ |
32 | #include <linux/jiffies.h> /* time_after() macro */ | ||
32 | 33 | ||
33 | #include <linux/inetdevice.h> | 34 | #include <linux/inetdevice.h> |
34 | #include <asm/uaccess.h> | 35 | #include <asm/uaccess.h> |
@@ -164,7 +165,7 @@ int wpft1_init (sdla_t* card, wandev_conf_t* conf) | |||
164 | 165 | ||
165 | timeout = jiffies; | 166 | timeout = jiffies; |
166 | while (mb->return_code != 'I') /* Wait 1s for board to initialize */ | 167 | while (mb->return_code != 'I') /* Wait 1s for board to initialize */ |
167 | if ((jiffies - timeout) > 1*HZ) break; | 168 | if (time_after(jiffies, timeout + 1*HZ)) break; |
168 | 169 | ||
169 | if (mb->return_code != 'I') { | 170 | if (mb->return_code != 'I') { |
170 | printk(KERN_INFO | 171 | printk(KERN_INFO |
diff --git a/drivers/net/wan/sdla_ppp.c b/drivers/net/wan/sdla_ppp.c index 1761cb68ab48..a4b489cccbbf 100644 --- a/drivers/net/wan/sdla_ppp.c +++ b/drivers/net/wan/sdla_ppp.c | |||
@@ -101,6 +101,7 @@ | |||
101 | #include <linux/if_arp.h> /* ARPHRD_* defines */ | 101 | #include <linux/if_arp.h> /* ARPHRD_* defines */ |
102 | #include <asm/byteorder.h> /* htons(), etc. */ | 102 | #include <asm/byteorder.h> /* htons(), etc. */ |
103 | #include <linux/in.h> /* sockaddr_in */ | 103 | #include <linux/in.h> /* sockaddr_in */ |
104 | #include <linux/jiffies.h> /* time_after() macro */ | ||
104 | 105 | ||
105 | 106 | ||
106 | #include <asm/uaccess.h> | 107 | #include <asm/uaccess.h> |
@@ -482,7 +483,7 @@ static int update(struct wan_device *wandev) | |||
482 | if(ppp_priv_area->update_comms_stats == 0){ | 483 | if(ppp_priv_area->update_comms_stats == 0){ |
483 | break; | 484 | break; |
484 | } | 485 | } |
485 | if ((jiffies - timeout) > (1 * HZ)){ | 486 | if (time_after(jiffies, timeout + 1 * HZ)){ |
486 | ppp_priv_area->update_comms_stats = 0; | 487 | ppp_priv_area->update_comms_stats = 0; |
487 | ppp_priv_area->timer_int_enabled &= | 488 | ppp_priv_area->timer_int_enabled &= |
488 | ~TMR_INT_ENABLED_UPDATE; | 489 | ~TMR_INT_ENABLED_UPDATE; |
diff --git a/drivers/net/wan/sdla_x25.c b/drivers/net/wan/sdla_x25.c index 3a93d2fd4fbf..8a95d61a2f8f 100644 --- a/drivers/net/wan/sdla_x25.c +++ b/drivers/net/wan/sdla_x25.c | |||
@@ -91,6 +91,7 @@ | |||
91 | #include <linux/wanrouter.h> /* WAN router definitions */ | 91 | #include <linux/wanrouter.h> /* WAN router definitions */ |
92 | #include <linux/wanpipe.h> /* WANPIPE common user API definitions */ | 92 | #include <linux/wanpipe.h> /* WANPIPE common user API definitions */ |
93 | #include <linux/workqueue.h> | 93 | #include <linux/workqueue.h> |
94 | #include <linux/jiffies.h> /* time_after() macro */ | ||
94 | #include <asm/byteorder.h> /* htons(), etc. */ | 95 | #include <asm/byteorder.h> /* htons(), etc. */ |
95 | #include <asm/atomic.h> | 96 | #include <asm/atomic.h> |
96 | #include <linux/delay.h> /* Experimental delay */ | 97 | #include <linux/delay.h> /* Experimental delay */ |
@@ -867,7 +868,7 @@ static int update(struct wan_device* wandev) | |||
867 | if (!(card->u.x.timer_int_enabled & TMR_INT_ENABLED_UPDATE)){ | 868 | if (!(card->u.x.timer_int_enabled & TMR_INT_ENABLED_UPDATE)){ |
868 | break; | 869 | break; |
869 | } | 870 | } |
870 | if ((jiffies-timeout) > 1*HZ){ | 871 | if (time_after(jiffies, timeout + 1*HZ)){ |
871 | card->u.x.timer_int_enabled &= ~TMR_INT_ENABLED_UPDATE; | 872 | card->u.x.timer_int_enabled &= ~TMR_INT_ENABLED_UPDATE; |
872 | return -EAGAIN; | 873 | return -EAGAIN; |
873 | } | 874 | } |
diff --git a/drivers/net/wan/wanpipe_multppp.c b/drivers/net/wan/wanpipe_multppp.c index 6aa6987d96cb..812a1183c502 100644 --- a/drivers/net/wan/wanpipe_multppp.c +++ b/drivers/net/wan/wanpipe_multppp.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/wanrouter.h> /* WAN router definitions */ | 26 | #include <linux/wanrouter.h> /* WAN router definitions */ |
27 | #include <linux/wanpipe.h> /* WANPIPE common user API definitions */ | 27 | #include <linux/wanpipe.h> /* WANPIPE common user API definitions */ |
28 | #include <linux/if_arp.h> /* ARPHRD_* defines */ | 28 | #include <linux/if_arp.h> /* ARPHRD_* defines */ |
29 | #include <linux/jiffies.h> /* time_after() macro */ | ||
29 | 30 | ||
30 | #include <linux/in.h> /* sockaddr_in */ | 31 | #include <linux/in.h> /* sockaddr_in */ |
31 | #include <linux/inet.h> | 32 | #include <linux/inet.h> |
@@ -270,9 +271,9 @@ int wsppp_init (sdla_t* card, wandev_conf_t* conf) | |||
270 | ready to accept commands. We expect this to be completed in less | 271 | ready to accept commands. We expect this to be completed in less |
271 | than 1 second. */ | 272 | than 1 second. */ |
272 | 273 | ||
273 | timeout = jiffies; | 274 | timeout = jiffies + 1 * HZ; |
274 | while (mb->return_code != 'I') /* Wait 1s for board to initialize */ | 275 | while (mb->return_code != 'I') /* Wait 1s for board to initialize */ |
275 | if ((jiffies - timeout) > 1*HZ) break; | 276 | if (time_after(jiffies, timeout)) break; |
276 | 277 | ||
277 | if (mb->return_code != 'I') { | 278 | if (mb->return_code != 'I') { |
278 | printk(KERN_INFO | 279 | printk(KERN_INFO |
@@ -493,11 +494,11 @@ static int update(struct wan_device* wandev) | |||
493 | chdlc_priv_area->timer_int_enabled = TMR_INT_ENABLED_UPDATE; | 494 | chdlc_priv_area->timer_int_enabled = TMR_INT_ENABLED_UPDATE; |
494 | 495 | ||
495 | /* wait a maximum of 1 second for the statistics to be updated */ | 496 | /* wait a maximum of 1 second for the statistics to be updated */ |
496 | timeout = jiffies; | 497 | timeout = jiffies + 1 * HZ; |
497 | for(;;) { | 498 | for(;;) { |
498 | if(chdlc_priv_area->update_comms_stats == 0) | 499 | if(chdlc_priv_area->update_comms_stats == 0) |
499 | break; | 500 | break; |
500 | if ((jiffies - timeout) > (1 * HZ)){ | 501 | if (time_after(jiffies, timeout)){ |
501 | chdlc_priv_area->update_comms_stats = 0; | 502 | chdlc_priv_area->update_comms_stats = 0; |
502 | chdlc_priv_area->timer_int_enabled &= | 503 | chdlc_priv_area->timer_int_enabled &= |
503 | ~TMR_INT_ENABLED_UPDATE; | 504 | ~TMR_INT_ENABLED_UPDATE; |
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index 6110187668dc..6db1fb6461de 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c | |||
@@ -5020,7 +5020,7 @@ static void proc_SSID_on_close( struct inode *inode, struct file *file ) { | |||
5020 | enable_MAC(ai, &rsp, 1); | 5020 | enable_MAC(ai, &rsp, 1); |
5021 | } | 5021 | } |
5022 | 5022 | ||
5023 | inline static u8 hexVal(char c) { | 5023 | static inline u8 hexVal(char c) { |
5024 | if (c>='0' && c<='9') return c -= '0'; | 5024 | if (c>='0' && c<='9') return c -= '0'; |
5025 | if (c>='a' && c<='f') return c -= 'a'-10; | 5025 | if (c>='a' && c<='f') return c -= 'a'-10; |
5026 | if (c>='A' && c<='F') return c -= 'A'-10; | 5026 | if (c>='A' && c<='F') return c -= 'A'-10; |
diff --git a/drivers/net/wireless/orinoco_cs.c b/drivers/net/wireless/orinoco_cs.c index 368d2f962f67..1cc1492083c9 100644 --- a/drivers/net/wireless/orinoco_cs.c +++ b/drivers/net/wireless/orinoco_cs.c | |||
@@ -621,8 +621,6 @@ static struct pcmcia_device_id orinoco_cs_ids[] = { | |||
621 | PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021), | 621 | PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021), |
622 | PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002), | 622 | PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002), |
623 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), | 623 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), |
624 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), | ||
625 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), | ||
626 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), | 624 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), |
627 | PCMCIA_DEVICE_PROD_ID12("3Com", "3CRWE737A AirConnect Wireless LAN PC Card", 0x41240e5b, 0x56010af3), | 625 | PCMCIA_DEVICE_PROD_ID12("3Com", "3CRWE737A AirConnect Wireless LAN PC Card", 0x41240e5b, 0x56010af3), |
628 | PCMCIA_DEVICE_PROD_ID123("Instant Wireless ", " Network PC CARD", "Version 01.02", 0x11d901af, 0x6e9bd926, 0x4b74baa0), | 626 | PCMCIA_DEVICE_PROD_ID123("Instant Wireless ", " Network PC CARD", "Version 01.02", 0x11d901af, 0x6e9bd926, 0x4b74baa0), |