diff options
author | David S. Miller <davem@davemloft.net> | 2008-02-24 20:57:16 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-02-24 20:57:16 -0500 |
commit | 323dbaba2cfab170c656f5d68986ff0ced5b421c (patch) | |
tree | 99d2ef0d64df0036a4a9d2ef054b5bf20dd7fbd5 | |
parent | bfa274e2436fc7ef72ef51c878083647f1cfd429 (diff) | |
parent | 3bf319a787a881aa6ad8213b98b93b8de2b6f0e0 (diff) |
Merge branch 'upstream-davem' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
-rw-r--r-- | MAINTAINERS | 11 | ||||
-rw-r--r-- | drivers/net/cs89x0.c | 12 | ||||
-rw-r--r-- | drivers/net/e1000e/82571.c | 22 | ||||
-rw-r--r-- | drivers/net/e1000e/defines.h | 10 | ||||
-rw-r--r-- | drivers/net/e1000e/e1000.h | 3 | ||||
-rw-r--r-- | drivers/net/e1000e/hw.h | 4 | ||||
-rw-r--r-- | drivers/net/e1000e/ich8lan.c | 24 | ||||
-rw-r--r-- | drivers/net/e1000e/lib.c | 50 | ||||
-rw-r--r-- | drivers/net/e1000e/netdev.c | 18 | ||||
-rw-r--r-- | drivers/net/e1000e/phy.c | 10 | ||||
-rw-r--r-- | drivers/net/ehea/ehea.h | 34 | ||||
-rw-r--r-- | drivers/net/ehea/ehea_main.c | 281 | ||||
-rw-r--r-- | drivers/net/fs_enet/fs_enet-main.c | 7 | ||||
-rw-r--r-- | drivers/net/gianfar.c | 14 | ||||
-rw-r--r-- | drivers/net/igb/igb_main.c | 15 | ||||
-rw-r--r-- | drivers/net/ixgb/ixgb_ethtool.c | 1 | ||||
-rw-r--r-- | drivers/net/macb.c | 2 | ||||
-rw-r--r-- | drivers/net/pcmcia/pcnet_cs.c | 10 | ||||
-rw-r--r-- | drivers/net/phy/mdio_bus.c | 4 | ||||
-rw-r--r-- | drivers/net/sis190.c | 15 | ||||
-rw-r--r-- | drivers/net/sky2.c | 123 | ||||
-rw-r--r-- | drivers/net/sky2.h | 27 | ||||
-rw-r--r-- | drivers/net/tlan.c | 64 | ||||
-rw-r--r-- | drivers/net/tulip/uli526x.c | 12 | ||||
-rw-r--r-- | drivers/net/via-rhine.c | 2 | ||||
-rw-r--r-- | drivers/net/virtio_net.c | 2 | ||||
-rw-r--r-- | drivers/s390/net/claw.c | 39 |
27 files changed, 531 insertions, 285 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 36c7bc641dba..2333255417f4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -3884,10 +3884,13 @@ M: trivial@kernel.org | |||
3884 | L: linux-kernel@vger.kernel.org | 3884 | L: linux-kernel@vger.kernel.org |
3885 | S: Maintained | 3885 | S: Maintained |
3886 | 3886 | ||
3887 | TULIP NETWORK DRIVER | 3887 | TULIP NETWORK DRIVERS |
3888 | L: tulip-users@lists.sourceforge.net | 3888 | P: Grant Grundler |
3889 | W: http://sourceforge.net/projects/tulip/ | 3889 | M: grundler@parisc-linux.org |
3890 | S: Orphan | 3890 | P: Kyle McMartin |
3891 | M: kyle@parisc-linux.org | ||
3892 | L: netdev@vger.kernel.org | ||
3893 | S: Maintained | ||
3891 | 3894 | ||
3892 | TUN/TAP driver | 3895 | TUN/TAP driver |
3893 | P: Maxim Krasnyansky | 3896 | P: Maxim Krasnyansky |
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c index 571750975137..348371fda597 100644 --- a/drivers/net/cs89x0.c +++ b/drivers/net/cs89x0.c | |||
@@ -172,30 +172,30 @@ static char version[] __initdata = | |||
172 | them to system IRQ numbers. This mapping is card specific and is set to | 172 | them to system IRQ numbers. This mapping is card specific and is set to |
173 | the configuration of the Cirrus Eval board for this chip. */ | 173 | the configuration of the Cirrus Eval board for this chip. */ |
174 | #ifdef CONFIG_ARCH_CLPS7500 | 174 | #ifdef CONFIG_ARCH_CLPS7500 |
175 | static unsigned int netcard_portlist[] __initdata = | 175 | static unsigned int netcard_portlist[] __used __initdata = |
176 | { 0x80090303, 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0}; | 176 | { 0x80090303, 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0}; |
177 | static unsigned int cs8900_irq_map[] = {12,0,0,0}; | 177 | static unsigned int cs8900_irq_map[] = {12,0,0,0}; |
178 | #elif defined(CONFIG_SH_HICOSH4) | 178 | #elif defined(CONFIG_SH_HICOSH4) |
179 | static unsigned int netcard_portlist[] __initdata = | 179 | static unsigned int netcard_portlist[] __used __initdata = |
180 | { 0x0300, 0}; | 180 | { 0x0300, 0}; |
181 | static unsigned int cs8900_irq_map[] = {1,0,0,0}; | 181 | static unsigned int cs8900_irq_map[] = {1,0,0,0}; |
182 | #elif defined(CONFIG_MACH_IXDP2351) | 182 | #elif defined(CONFIG_MACH_IXDP2351) |
183 | static unsigned int netcard_portlist[] __initdata = {IXDP2351_VIRT_CS8900_BASE, 0}; | 183 | static unsigned int netcard_portlist[] __used __initdata = {IXDP2351_VIRT_CS8900_BASE, 0}; |
184 | static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0}; | 184 | static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0}; |
185 | #include <asm/irq.h> | 185 | #include <asm/irq.h> |
186 | #elif defined(CONFIG_ARCH_IXDP2X01) | 186 | #elif defined(CONFIG_ARCH_IXDP2X01) |
187 | #include <asm/irq.h> | 187 | #include <asm/irq.h> |
188 | static unsigned int netcard_portlist[] __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0}; | 188 | static unsigned int netcard_portlist[] __used __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0}; |
189 | static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0}; | 189 | static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0}; |
190 | #elif defined(CONFIG_ARCH_PNX010X) | 190 | #elif defined(CONFIG_ARCH_PNX010X) |
191 | #include <asm/irq.h> | 191 | #include <asm/irq.h> |
192 | #include <asm/arch/gpio.h> | 192 | #include <asm/arch/gpio.h> |
193 | #define CIRRUS_DEFAULT_BASE IO_ADDRESS(EXT_STATIC2_s0_BASE + 0x200000) /* = Physical address 0x48200000 */ | 193 | #define CIRRUS_DEFAULT_BASE IO_ADDRESS(EXT_STATIC2_s0_BASE + 0x200000) /* = Physical address 0x48200000 */ |
194 | #define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */ | 194 | #define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */ |
195 | static unsigned int netcard_portlist[] __initdata = {CIRRUS_DEFAULT_BASE, 0}; | 195 | static unsigned int netcard_portlist[] __used __initdata = {CIRRUS_DEFAULT_BASE, 0}; |
196 | static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0}; | 196 | static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0}; |
197 | #else | 197 | #else |
198 | static unsigned int netcard_portlist[] __initdata = | 198 | static unsigned int netcard_portlist[] __used __initdata = |
199 | { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0}; | 199 | { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0}; |
200 | static unsigned int cs8900_irq_map[] = {10,11,12,5}; | 200 | static unsigned int cs8900_irq_map[] = {10,11,12,5}; |
201 | #endif | 201 | #endif |
diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c index 3beace55b58d..7fe20310eb5f 100644 --- a/drivers/net/e1000e/82571.c +++ b/drivers/net/e1000e/82571.c | |||
@@ -438,7 +438,7 @@ static void e1000_release_nvm_82571(struct e1000_hw *hw) | |||
438 | * For non-82573 silicon, write data to EEPROM at offset using SPI interface. | 438 | * For non-82573 silicon, write data to EEPROM at offset using SPI interface. |
439 | * | 439 | * |
440 | * If e1000e_update_nvm_checksum is not called after this function, the | 440 | * If e1000e_update_nvm_checksum is not called after this function, the |
441 | * EEPROM will most likley contain an invalid checksum. | 441 | * EEPROM will most likely contain an invalid checksum. |
442 | **/ | 442 | **/ |
443 | static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words, | 443 | static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words, |
444 | u16 *data) | 444 | u16 *data) |
@@ -547,7 +547,7 @@ static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw) | |||
547 | * poll for completion. | 547 | * poll for completion. |
548 | * | 548 | * |
549 | * If e1000e_update_nvm_checksum is not called after this function, the | 549 | * If e1000e_update_nvm_checksum is not called after this function, the |
550 | * EEPROM will most likley contain an invalid checksum. | 550 | * EEPROM will most likely contain an invalid checksum. |
551 | **/ | 551 | **/ |
552 | static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset, | 552 | static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset, |
553 | u16 words, u16 *data) | 553 | u16 words, u16 *data) |
@@ -1053,7 +1053,7 @@ static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw) | |||
1053 | /* If SerDes loopback mode is entered, there is no form | 1053 | /* If SerDes loopback mode is entered, there is no form |
1054 | * of reset to take the adapter out of that mode. So we | 1054 | * of reset to take the adapter out of that mode. So we |
1055 | * have to explicitly take the adapter out of loopback | 1055 | * have to explicitly take the adapter out of loopback |
1056 | * mode. This prevents drivers from twidling their thumbs | 1056 | * mode. This prevents drivers from twiddling their thumbs |
1057 | * if another tool failed to take it out of loopback mode. | 1057 | * if another tool failed to take it out of loopback mode. |
1058 | */ | 1058 | */ |
1059 | ew32(SCTL, | 1059 | ew32(SCTL, |
@@ -1098,7 +1098,7 @@ static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data) | |||
1098 | * e1000e_get_laa_state_82571 - Get locally administered address state | 1098 | * e1000e_get_laa_state_82571 - Get locally administered address state |
1099 | * @hw: pointer to the HW structure | 1099 | * @hw: pointer to the HW structure |
1100 | * | 1100 | * |
1101 | * Retrieve and return the current locally administed address state. | 1101 | * Retrieve and return the current locally administered address state. |
1102 | **/ | 1102 | **/ |
1103 | bool e1000e_get_laa_state_82571(struct e1000_hw *hw) | 1103 | bool e1000e_get_laa_state_82571(struct e1000_hw *hw) |
1104 | { | 1104 | { |
@@ -1113,7 +1113,7 @@ bool e1000e_get_laa_state_82571(struct e1000_hw *hw) | |||
1113 | * @hw: pointer to the HW structure | 1113 | * @hw: pointer to the HW structure |
1114 | * @state: enable/disable locally administered address | 1114 | * @state: enable/disable locally administered address |
1115 | * | 1115 | * |
1116 | * Enable/Disable the current locally administed address state. | 1116 | * Enable/Disable the current locally administers address state. |
1117 | **/ | 1117 | **/ |
1118 | void e1000e_set_laa_state_82571(struct e1000_hw *hw, bool state) | 1118 | void e1000e_set_laa_state_82571(struct e1000_hw *hw, bool state) |
1119 | { | 1119 | { |
@@ -1281,16 +1281,6 @@ static struct e1000_phy_operations e82_phy_ops_m88 = { | |||
1281 | 1281 | ||
1282 | static struct e1000_nvm_operations e82571_nvm_ops = { | 1282 | static struct e1000_nvm_operations e82571_nvm_ops = { |
1283 | .acquire_nvm = e1000_acquire_nvm_82571, | 1283 | .acquire_nvm = e1000_acquire_nvm_82571, |
1284 | .read_nvm = e1000e_read_nvm_spi, | ||
1285 | .release_nvm = e1000_release_nvm_82571, | ||
1286 | .update_nvm = e1000_update_nvm_checksum_82571, | ||
1287 | .valid_led_default = e1000_valid_led_default_82571, | ||
1288 | .validate_nvm = e1000_validate_nvm_checksum_82571, | ||
1289 | .write_nvm = e1000_write_nvm_82571, | ||
1290 | }; | ||
1291 | |||
1292 | static struct e1000_nvm_operations e82573_nvm_ops = { | ||
1293 | .acquire_nvm = e1000_acquire_nvm_82571, | ||
1294 | .read_nvm = e1000e_read_nvm_eerd, | 1284 | .read_nvm = e1000e_read_nvm_eerd, |
1295 | .release_nvm = e1000_release_nvm_82571, | 1285 | .release_nvm = e1000_release_nvm_82571, |
1296 | .update_nvm = e1000_update_nvm_checksum_82571, | 1286 | .update_nvm = e1000_update_nvm_checksum_82571, |
@@ -1355,6 +1345,6 @@ struct e1000_info e1000_82573_info = { | |||
1355 | .get_invariants = e1000_get_invariants_82571, | 1345 | .get_invariants = e1000_get_invariants_82571, |
1356 | .mac_ops = &e82571_mac_ops, | 1346 | .mac_ops = &e82571_mac_ops, |
1357 | .phy_ops = &e82_phy_ops_m88, | 1347 | .phy_ops = &e82_phy_ops_m88, |
1358 | .nvm_ops = &e82573_nvm_ops, | 1348 | .nvm_ops = &e82571_nvm_ops, |
1359 | }; | 1349 | }; |
1360 | 1350 | ||
diff --git a/drivers/net/e1000e/defines.h b/drivers/net/e1000e/defines.h index 6232c3e96689..a4f511f549f7 100644 --- a/drivers/net/e1000e/defines.h +++ b/drivers/net/e1000e/defines.h | |||
@@ -66,7 +66,7 @@ | |||
66 | #define E1000_WUFC_ARP 0x00000020 /* ARP Request Packet Wakeup Enable */ | 66 | #define E1000_WUFC_ARP 0x00000020 /* ARP Request Packet Wakeup Enable */ |
67 | 67 | ||
68 | /* Extended Device Control */ | 68 | /* Extended Device Control */ |
69 | #define E1000_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW Defineable Pin 7 */ | 69 | #define E1000_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW Definable Pin 7 */ |
70 | #define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */ | 70 | #define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */ |
71 | #define E1000_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ | 71 | #define E1000_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ |
72 | #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 | 72 | #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 |
@@ -75,12 +75,12 @@ | |||
75 | #define E1000_CTRL_EXT_IAME 0x08000000 /* Interrupt acknowledge Auto-mask */ | 75 | #define E1000_CTRL_EXT_IAME 0x08000000 /* Interrupt acknowledge Auto-mask */ |
76 | #define E1000_CTRL_EXT_INT_TIMER_CLR 0x20000000 /* Clear Interrupt timers after IMS clear */ | 76 | #define E1000_CTRL_EXT_INT_TIMER_CLR 0x20000000 /* Clear Interrupt timers after IMS clear */ |
77 | 77 | ||
78 | /* Receive Decriptor bit definitions */ | 78 | /* Receive Descriptor bit definitions */ |
79 | #define E1000_RXD_STAT_DD 0x01 /* Descriptor Done */ | 79 | #define E1000_RXD_STAT_DD 0x01 /* Descriptor Done */ |
80 | #define E1000_RXD_STAT_EOP 0x02 /* End of Packet */ | 80 | #define E1000_RXD_STAT_EOP 0x02 /* End of Packet */ |
81 | #define E1000_RXD_STAT_IXSM 0x04 /* Ignore checksum */ | 81 | #define E1000_RXD_STAT_IXSM 0x04 /* Ignore checksum */ |
82 | #define E1000_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */ | 82 | #define E1000_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */ |
83 | #define E1000_RXD_STAT_UDPCS 0x10 /* UDP xsum caculated */ | 83 | #define E1000_RXD_STAT_UDPCS 0x10 /* UDP xsum calculated */ |
84 | #define E1000_RXD_STAT_TCPCS 0x20 /* TCP xsum calculated */ | 84 | #define E1000_RXD_STAT_TCPCS 0x20 /* TCP xsum calculated */ |
85 | #define E1000_RXD_ERR_CE 0x01 /* CRC Error */ | 85 | #define E1000_RXD_ERR_CE 0x01 /* CRC Error */ |
86 | #define E1000_RXD_ERR_SE 0x02 /* Symbol Error */ | 86 | #define E1000_RXD_ERR_SE 0x02 /* Symbol Error */ |
@@ -223,7 +223,7 @@ | |||
223 | #define E1000_STATUS_LAN_INIT_DONE 0x00000200 /* Lan Init Completion by NVM */ | 223 | #define E1000_STATUS_LAN_INIT_DONE 0x00000200 /* Lan Init Completion by NVM */ |
224 | #define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Status of Master requests. */ | 224 | #define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Status of Master requests. */ |
225 | 225 | ||
226 | /* Constants used to intrepret the masked PCI-X bus speed. */ | 226 | /* Constants used to interpret the masked PCI-X bus speed. */ |
227 | 227 | ||
228 | #define HALF_DUPLEX 1 | 228 | #define HALF_DUPLEX 1 |
229 | #define FULL_DUPLEX 2 | 229 | #define FULL_DUPLEX 2 |
@@ -517,7 +517,7 @@ | |||
517 | /* PHY 1000 MII Register/Bit Definitions */ | 517 | /* PHY 1000 MII Register/Bit Definitions */ |
518 | /* PHY Registers defined by IEEE */ | 518 | /* PHY Registers defined by IEEE */ |
519 | #define PHY_CONTROL 0x00 /* Control Register */ | 519 | #define PHY_CONTROL 0x00 /* Control Register */ |
520 | #define PHY_STATUS 0x01 /* Status Regiser */ | 520 | #define PHY_STATUS 0x01 /* Status Register */ |
521 | #define PHY_ID1 0x02 /* Phy Id Reg (word 1) */ | 521 | #define PHY_ID1 0x02 /* Phy Id Reg (word 1) */ |
522 | #define PHY_ID2 0x03 /* Phy Id Reg (word 2) */ | 522 | #define PHY_ID2 0x03 /* Phy Id Reg (word 2) */ |
523 | #define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */ | 523 | #define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */ |
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h index 8b88c226e858..327c0620da31 100644 --- a/drivers/net/e1000e/e1000.h +++ b/drivers/net/e1000e/e1000.h | |||
@@ -42,8 +42,7 @@ | |||
42 | struct e1000_info; | 42 | struct e1000_info; |
43 | 43 | ||
44 | #define ndev_printk(level, netdev, format, arg...) \ | 44 | #define ndev_printk(level, netdev, format, arg...) \ |
45 | printk(level "%s: %s: " format, (netdev)->dev.parent->bus_id, \ | 45 | printk(level "%s: " format, (netdev)->name, ## arg) |
46 | (netdev)->name, ## arg) | ||
47 | 46 | ||
48 | #ifdef DEBUG | 47 | #ifdef DEBUG |
49 | #define ndev_dbg(netdev, format, arg...) \ | 48 | #define ndev_dbg(netdev, format, arg...) \ |
diff --git a/drivers/net/e1000e/hw.h b/drivers/net/e1000e/hw.h index 3c5862f97dbf..916025b30fc3 100644 --- a/drivers/net/e1000e/hw.h +++ b/drivers/net/e1000e/hw.h | |||
@@ -184,7 +184,7 @@ enum e1e_registers { | |||
184 | E1000_ICRXDMTC = 0x04120, /* Irq Cause Rx Desc MinThreshold Count */ | 184 | E1000_ICRXDMTC = 0x04120, /* Irq Cause Rx Desc MinThreshold Count */ |
185 | E1000_ICRXOC = 0x04124, /* Irq Cause Receiver Overrun Count */ | 185 | E1000_ICRXOC = 0x04124, /* Irq Cause Receiver Overrun Count */ |
186 | E1000_RXCSUM = 0x05000, /* RX Checksum Control - RW */ | 186 | E1000_RXCSUM = 0x05000, /* RX Checksum Control - RW */ |
187 | E1000_RFCTL = 0x05008, /* Receive Filter Control*/ | 187 | E1000_RFCTL = 0x05008, /* Receive Filter Control */ |
188 | E1000_MTA = 0x05200, /* Multicast Table Array - RW Array */ | 188 | E1000_MTA = 0x05200, /* Multicast Table Array - RW Array */ |
189 | E1000_RA = 0x05400, /* Receive Address - RW Array */ | 189 | E1000_RA = 0x05400, /* Receive Address - RW Array */ |
190 | E1000_VFTA = 0x05600, /* VLAN Filter Table Array - RW Array */ | 190 | E1000_VFTA = 0x05600, /* VLAN Filter Table Array - RW Array */ |
@@ -202,7 +202,7 @@ enum e1e_registers { | |||
202 | E1000_FACTPS = 0x05B30, /* Function Active and Power State to MNG */ | 202 | E1000_FACTPS = 0x05B30, /* Function Active and Power State to MNG */ |
203 | E1000_SWSM = 0x05B50, /* SW Semaphore */ | 203 | E1000_SWSM = 0x05B50, /* SW Semaphore */ |
204 | E1000_FWSM = 0x05B54, /* FW Semaphore */ | 204 | E1000_FWSM = 0x05B54, /* FW Semaphore */ |
205 | E1000_HICR = 0x08F00, /* Host Inteface Control */ | 205 | E1000_HICR = 0x08F00, /* Host Interface Control */ |
206 | }; | 206 | }; |
207 | 207 | ||
208 | /* RSS registers */ | 208 | /* RSS registers */ |
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c index 8f8139de1f48..0ae39550768d 100644 --- a/drivers/net/e1000e/ich8lan.c +++ b/drivers/net/e1000e/ich8lan.c | |||
@@ -671,7 +671,7 @@ static s32 e1000_get_phy_info_ich8lan(struct e1000_hw *hw) | |||
671 | * e1000_check_polarity_ife_ich8lan - Check cable polarity for IFE PHY | 671 | * e1000_check_polarity_ife_ich8lan - Check cable polarity for IFE PHY |
672 | * @hw: pointer to the HW structure | 672 | * @hw: pointer to the HW structure |
673 | * | 673 | * |
674 | * Polarity is determined on the polarity reveral feature being enabled. | 674 | * Polarity is determined on the polarity reversal feature being enabled. |
675 | * This function is only called by other family-specific | 675 | * This function is only called by other family-specific |
676 | * routines. | 676 | * routines. |
677 | **/ | 677 | **/ |
@@ -947,7 +947,7 @@ static s32 e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw) | |||
947 | /* Either we should have a hardware SPI cycle in progress | 947 | /* Either we should have a hardware SPI cycle in progress |
948 | * bit to check against, in order to start a new cycle or | 948 | * bit to check against, in order to start a new cycle or |
949 | * FDONE bit should be changed in the hardware so that it | 949 | * FDONE bit should be changed in the hardware so that it |
950 | * is 1 after harware reset, which can then be used as an | 950 | * is 1 after hardware reset, which can then be used as an |
951 | * indication whether a cycle is in progress or has been | 951 | * indication whether a cycle is in progress or has been |
952 | * completed. | 952 | * completed. |
953 | */ | 953 | */ |
@@ -1155,7 +1155,7 @@ static s32 e1000_write_nvm_ich8lan(struct e1000_hw *hw, u16 offset, u16 words, | |||
1155 | * which writes the checksum to the shadow ram. The changes in the shadow | 1155 | * which writes the checksum to the shadow ram. The changes in the shadow |
1156 | * ram are then committed to the EEPROM by processing each bank at a time | 1156 | * ram are then committed to the EEPROM by processing each bank at a time |
1157 | * checking for the modified bit and writing only the pending changes. | 1157 | * checking for the modified bit and writing only the pending changes. |
1158 | * After a succesful commit, the shadow ram is cleared and is ready for | 1158 | * After a successful commit, the shadow ram is cleared and is ready for |
1159 | * future writes. | 1159 | * future writes. |
1160 | **/ | 1160 | **/ |
1161 | static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw) | 1161 | static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw) |
@@ -1680,7 +1680,7 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw) | |||
1680 | * - initialize LED identification | 1680 | * - initialize LED identification |
1681 | * - setup receive address registers | 1681 | * - setup receive address registers |
1682 | * - setup flow control | 1682 | * - setup flow control |
1683 | * - setup transmit discriptors | 1683 | * - setup transmit descriptors |
1684 | * - clear statistics | 1684 | * - clear statistics |
1685 | **/ | 1685 | **/ |
1686 | static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw) | 1686 | static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw) |
@@ -1961,7 +1961,7 @@ static s32 e1000_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw) | |||
1961 | E1000_PHY_CTRL_NOND0A_GBE_DISABLE); | 1961 | E1000_PHY_CTRL_NOND0A_GBE_DISABLE); |
1962 | ew32(PHY_CTRL, phy_ctrl); | 1962 | ew32(PHY_CTRL, phy_ctrl); |
1963 | 1963 | ||
1964 | /* Call gig speed drop workaround on Giga disable before accessing | 1964 | /* Call gig speed drop workaround on Gig disable before accessing |
1965 | * any PHY registers */ | 1965 | * any PHY registers */ |
1966 | e1000e_gig_downshift_workaround_ich8lan(hw); | 1966 | e1000e_gig_downshift_workaround_ich8lan(hw); |
1967 | 1967 | ||
@@ -1972,7 +1972,7 @@ static s32 e1000_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw) | |||
1972 | /** | 1972 | /** |
1973 | * e1000_set_kmrn_lock_loss_workaound_ich8lan - Set Kumeran workaround state | 1973 | * e1000_set_kmrn_lock_loss_workaound_ich8lan - Set Kumeran workaround state |
1974 | * @hw: pointer to the HW structure | 1974 | * @hw: pointer to the HW structure |
1975 | * @state: boolean value used to set the current Kumaran workaround state | 1975 | * @state: boolean value used to set the current Kumeran workaround state |
1976 | * | 1976 | * |
1977 | * If ICH8, set the current Kumeran workaround state (enabled - TRUE | 1977 | * If ICH8, set the current Kumeran workaround state (enabled - TRUE |
1978 | * /disabled - FALSE). | 1978 | * /disabled - FALSE). |
@@ -2017,7 +2017,7 @@ void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw) | |||
2017 | E1000_PHY_CTRL_NOND0A_GBE_DISABLE); | 2017 | E1000_PHY_CTRL_NOND0A_GBE_DISABLE); |
2018 | ew32(PHY_CTRL, reg); | 2018 | ew32(PHY_CTRL, reg); |
2019 | 2019 | ||
2020 | /* Call gig speed drop workaround on Giga disable before | 2020 | /* Call gig speed drop workaround on Gig disable before |
2021 | * accessing any PHY registers */ | 2021 | * accessing any PHY registers */ |
2022 | if (hw->mac.type == e1000_ich8lan) | 2022 | if (hw->mac.type == e1000_ich8lan) |
2023 | e1000e_gig_downshift_workaround_ich8lan(hw); | 2023 | e1000e_gig_downshift_workaround_ich8lan(hw); |
@@ -2045,7 +2045,7 @@ void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw) | |||
2045 | * @hw: pointer to the HW structure | 2045 | * @hw: pointer to the HW structure |
2046 | * | 2046 | * |
2047 | * Steps to take when dropping from 1Gb/s (eg. link cable removal (LSC), | 2047 | * Steps to take when dropping from 1Gb/s (eg. link cable removal (LSC), |
2048 | * LPLU, Giga disable, MDIC PHY reset): | 2048 | * LPLU, Gig disable, MDIC PHY reset): |
2049 | * 1) Set Kumeran Near-end loopback | 2049 | * 1) Set Kumeran Near-end loopback |
2050 | * 2) Clear Kumeran Near-end loopback | 2050 | * 2) Clear Kumeran Near-end loopback |
2051 | * Should only be called for ICH8[m] devices with IGP_3 Phy. | 2051 | * Should only be called for ICH8[m] devices with IGP_3 Phy. |
@@ -2089,10 +2089,10 @@ static s32 e1000_cleanup_led_ich8lan(struct e1000_hw *hw) | |||
2089 | } | 2089 | } |
2090 | 2090 | ||
2091 | /** | 2091 | /** |
2092 | * e1000_led_on_ich8lan - Turn LED's on | 2092 | * e1000_led_on_ich8lan - Turn LEDs on |
2093 | * @hw: pointer to the HW structure | 2093 | * @hw: pointer to the HW structure |
2094 | * | 2094 | * |
2095 | * Turn on the LED's. | 2095 | * Turn on the LEDs. |
2096 | **/ | 2096 | **/ |
2097 | static s32 e1000_led_on_ich8lan(struct e1000_hw *hw) | 2097 | static s32 e1000_led_on_ich8lan(struct e1000_hw *hw) |
2098 | { | 2098 | { |
@@ -2105,10 +2105,10 @@ static s32 e1000_led_on_ich8lan(struct e1000_hw *hw) | |||
2105 | } | 2105 | } |
2106 | 2106 | ||
2107 | /** | 2107 | /** |
2108 | * e1000_led_off_ich8lan - Turn LED's off | 2108 | * e1000_led_off_ich8lan - Turn LEDs off |
2109 | * @hw: pointer to the HW structure | 2109 | * @hw: pointer to the HW structure |
2110 | * | 2110 | * |
2111 | * Turn off the LED's. | 2111 | * Turn off the LEDs. |
2112 | **/ | 2112 | **/ |
2113 | static s32 e1000_led_off_ich8lan(struct e1000_hw *hw) | 2113 | static s32 e1000_led_off_ich8lan(struct e1000_hw *hw) |
2114 | { | 2114 | { |
diff --git a/drivers/net/e1000e/lib.c b/drivers/net/e1000e/lib.c index 16f35fadb74b..95f75a43c9f9 100644 --- a/drivers/net/e1000e/lib.c +++ b/drivers/net/e1000e/lib.c | |||
@@ -589,9 +589,6 @@ static s32 e1000_set_default_fc_generic(struct e1000_hw *hw) | |||
589 | s32 ret_val; | 589 | s32 ret_val; |
590 | u16 nvm_data; | 590 | u16 nvm_data; |
591 | 591 | ||
592 | if (mac->fc != e1000_fc_default) | ||
593 | return 0; | ||
594 | |||
595 | /* Read and store word 0x0F of the EEPROM. This word contains bits | 592 | /* Read and store word 0x0F of the EEPROM. This word contains bits |
596 | * that determine the hardware's default PAUSE (flow control) mode, | 593 | * that determine the hardware's default PAUSE (flow control) mode, |
597 | * a bit that determines whether the HW defaults to enabling or | 594 | * a bit that determines whether the HW defaults to enabling or |
@@ -1107,34 +1104,13 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1107 | (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { | 1104 | (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { |
1108 | mac->fc = e1000_fc_rx_pause; | 1105 | mac->fc = e1000_fc_rx_pause; |
1109 | hw_dbg(hw, "Flow Control = RX PAUSE frames only.\r\n"); | 1106 | hw_dbg(hw, "Flow Control = RX PAUSE frames only.\r\n"); |
1110 | } | 1107 | } else { |
1111 | /* Per the IEEE spec, at this point flow control should be | 1108 | /* |
1112 | * disabled. However, we want to consider that we could | 1109 | * Per the IEEE spec, at this point flow control |
1113 | * be connected to a legacy switch that doesn't advertise | 1110 | * should be disabled. |
1114 | * desired flow control, but can be forced on the link | 1111 | */ |
1115 | * partner. So if we advertised no flow control, that is | ||
1116 | * what we will resolve to. If we advertised some kind of | ||
1117 | * receive capability (Rx Pause Only or Full Flow Control) | ||
1118 | * and the link partner advertised none, we will configure | ||
1119 | * ourselves to enable Rx Flow Control only. We can do | ||
1120 | * this safely for two reasons: If the link partner really | ||
1121 | * didn't want flow control enabled, and we enable Rx, no | ||
1122 | * harm done since we won't be receiving any PAUSE frames | ||
1123 | * anyway. If the intent on the link partner was to have | ||
1124 | * flow control enabled, then by us enabling RX only, we | ||
1125 | * can at least receive pause frames and process them. | ||
1126 | * This is a good idea because in most cases, since we are | ||
1127 | * predominantly a server NIC, more times than not we will | ||
1128 | * be asked to delay transmission of packets than asking | ||
1129 | * our link partner to pause transmission of frames. | ||
1130 | */ | ||
1131 | else if ((mac->original_fc == e1000_fc_none) || | ||
1132 | (mac->original_fc == e1000_fc_tx_pause)) { | ||
1133 | mac->fc = e1000_fc_none; | 1112 | mac->fc = e1000_fc_none; |
1134 | hw_dbg(hw, "Flow Control = NONE.\r\n"); | 1113 | hw_dbg(hw, "Flow Control = NONE.\r\n"); |
1135 | } else { | ||
1136 | mac->fc = e1000_fc_rx_pause; | ||
1137 | hw_dbg(hw, "Flow Control = RX PAUSE frames only.\r\n"); | ||
1138 | } | 1114 | } |
1139 | 1115 | ||
1140 | /* Now we need to do one last check... If we auto- | 1116 | /* Now we need to do one last check... If we auto- |
@@ -1164,7 +1140,7 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1164 | } | 1140 | } |
1165 | 1141 | ||
1166 | /** | 1142 | /** |
1167 | * e1000e_get_speed_and_duplex_copper - Retreive current speed/duplex | 1143 | * e1000e_get_speed_and_duplex_copper - Retrieve current speed/duplex |
1168 | * @hw: pointer to the HW structure | 1144 | * @hw: pointer to the HW structure |
1169 | * @speed: stores the current speed | 1145 | * @speed: stores the current speed |
1170 | * @duplex: stores the current duplex | 1146 | * @duplex: stores the current duplex |
@@ -1200,7 +1176,7 @@ s32 e1000e_get_speed_and_duplex_copper(struct e1000_hw *hw, u16 *speed, u16 *dup | |||
1200 | } | 1176 | } |
1201 | 1177 | ||
1202 | /** | 1178 | /** |
1203 | * e1000e_get_speed_and_duplex_fiber_serdes - Retreive current speed/duplex | 1179 | * e1000e_get_speed_and_duplex_fiber_serdes - Retrieve current speed/duplex |
1204 | * @hw: pointer to the HW structure | 1180 | * @hw: pointer to the HW structure |
1205 | * @speed: stores the current speed | 1181 | * @speed: stores the current speed |
1206 | * @duplex: stores the current duplex | 1182 | * @duplex: stores the current duplex |
@@ -1410,7 +1386,7 @@ s32 e1000e_cleanup_led_generic(struct e1000_hw *hw) | |||
1410 | * e1000e_blink_led - Blink LED | 1386 | * e1000e_blink_led - Blink LED |
1411 | * @hw: pointer to the HW structure | 1387 | * @hw: pointer to the HW structure |
1412 | * | 1388 | * |
1413 | * Blink the led's which are set to be on. | 1389 | * Blink the LEDs which are set to be on. |
1414 | **/ | 1390 | **/ |
1415 | s32 e1000e_blink_led(struct e1000_hw *hw) | 1391 | s32 e1000e_blink_led(struct e1000_hw *hw) |
1416 | { | 1392 | { |
@@ -1515,7 +1491,7 @@ void e1000e_set_pcie_no_snoop(struct e1000_hw *hw, u32 no_snoop) | |||
1515 | * @hw: pointer to the HW structure | 1491 | * @hw: pointer to the HW structure |
1516 | * | 1492 | * |
1517 | * Returns 0 if successful, else returns -10 | 1493 | * Returns 0 if successful, else returns -10 |
1518 | * (-E1000_ERR_MASTER_REQUESTS_PENDING) if master disable bit has not casued | 1494 | * (-E1000_ERR_MASTER_REQUESTS_PENDING) if master disable bit has not caused |
1519 | * the master requests to be disabled. | 1495 | * the master requests to be disabled. |
1520 | * | 1496 | * |
1521 | * Disables PCI-Express master access and verifies there are no pending | 1497 | * Disables PCI-Express master access and verifies there are no pending |
@@ -1876,7 +1852,7 @@ static s32 e1000_ready_nvm_eeprom(struct e1000_hw *hw) | |||
1876 | } | 1852 | } |
1877 | 1853 | ||
1878 | /** | 1854 | /** |
1879 | * e1000e_read_nvm_spi - Read EEPROM's using SPI | 1855 | * e1000e_read_nvm_spi - Reads EEPROM using SPI |
1880 | * @hw: pointer to the HW structure | 1856 | * @hw: pointer to the HW structure |
1881 | * @offset: offset of word in the EEPROM to read | 1857 | * @offset: offset of word in the EEPROM to read |
1882 | * @words: number of words to read | 1858 | * @words: number of words to read |
@@ -1980,7 +1956,7 @@ s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | |||
1980 | * Writes data to EEPROM at offset using SPI interface. | 1956 | * Writes data to EEPROM at offset using SPI interface. |
1981 | * | 1957 | * |
1982 | * If e1000e_update_nvm_checksum is not called after this function , the | 1958 | * If e1000e_update_nvm_checksum is not called after this function , the |
1983 | * EEPROM will most likley contain an invalid checksum. | 1959 | * EEPROM will most likely contain an invalid checksum. |
1984 | **/ | 1960 | **/ |
1985 | s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | 1961 | s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) |
1986 | { | 1962 | { |
@@ -2222,7 +2198,7 @@ static u8 e1000_calculate_checksum(u8 *buffer, u32 length) | |||
2222 | * | 2198 | * |
2223 | * Returns E1000_success upon success, else E1000_ERR_HOST_INTERFACE_COMMAND | 2199 | * Returns E1000_success upon success, else E1000_ERR_HOST_INTERFACE_COMMAND |
2224 | * | 2200 | * |
2225 | * This function checks whether the HOST IF is enabled for command operaton | 2201 | * This function checks whether the HOST IF is enabled for command operation |
2226 | * and also checks whether the previous command is completed. It busy waits | 2202 | * and also checks whether the previous command is completed. It busy waits |
2227 | * in case of previous command is not completed. | 2203 | * in case of previous command is not completed. |
2228 | **/ | 2204 | **/ |
@@ -2254,7 +2230,7 @@ static s32 e1000_mng_enable_host_if(struct e1000_hw *hw) | |||
2254 | } | 2230 | } |
2255 | 2231 | ||
2256 | /** | 2232 | /** |
2257 | * e1000e_check_mng_mode - check managament mode | 2233 | * e1000e_check_mng_mode - check management mode |
2258 | * @hw: pointer to the HW structure | 2234 | * @hw: pointer to the HW structure |
2259 | * | 2235 | * |
2260 | * Reads the firmware semaphore register and returns true (>0) if | 2236 | * Reads the firmware semaphore register and returns true (>0) if |
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 3031d6d16247..fc5c63f4f578 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -1006,7 +1006,7 @@ static void e1000_irq_enable(struct e1000_adapter *adapter) | |||
1006 | * e1000_get_hw_control - get control of the h/w from f/w | 1006 | * e1000_get_hw_control - get control of the h/w from f/w |
1007 | * @adapter: address of board private structure | 1007 | * @adapter: address of board private structure |
1008 | * | 1008 | * |
1009 | * e1000_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit. | 1009 | * e1000_get_hw_control sets {CTRL_EXT|SWSM}:DRV_LOAD bit. |
1010 | * For ASF and Pass Through versions of f/w this means that | 1010 | * For ASF and Pass Through versions of f/w this means that |
1011 | * the driver is loaded. For AMT version (only with 82573) | 1011 | * the driver is loaded. For AMT version (only with 82573) |
1012 | * of the f/w this means that the network i/f is open. | 1012 | * of the f/w this means that the network i/f is open. |
@@ -1032,7 +1032,7 @@ static void e1000_get_hw_control(struct e1000_adapter *adapter) | |||
1032 | * e1000_release_hw_control - release control of the h/w to f/w | 1032 | * e1000_release_hw_control - release control of the h/w to f/w |
1033 | * @adapter: address of board private structure | 1033 | * @adapter: address of board private structure |
1034 | * | 1034 | * |
1035 | * e1000_release_hw_control resets {CTRL_EXT|FWSM}:DRV_LOAD bit. | 1035 | * e1000_release_hw_control resets {CTRL_EXT|SWSM}:DRV_LOAD bit. |
1036 | * For ASF and Pass Through versions of f/w this means that the | 1036 | * For ASF and Pass Through versions of f/w this means that the |
1037 | * driver is no longer loaded. For AMT version (only with 82573) i | 1037 | * driver is no longer loaded. For AMT version (only with 82573) i |
1038 | * of the f/w this means that the network i/f is closed. | 1038 | * of the f/w this means that the network i/f is closed. |
@@ -1241,6 +1241,11 @@ void e1000e_free_rx_resources(struct e1000_adapter *adapter) | |||
1241 | 1241 | ||
1242 | /** | 1242 | /** |
1243 | * e1000_update_itr - update the dynamic ITR value based on statistics | 1243 | * e1000_update_itr - update the dynamic ITR value based on statistics |
1244 | * @adapter: pointer to adapter | ||
1245 | * @itr_setting: current adapter->itr | ||
1246 | * @packets: the number of packets during this measurement interval | ||
1247 | * @bytes: the number of bytes during this measurement interval | ||
1248 | * | ||
1244 | * Stores a new ITR value based on packets and byte | 1249 | * Stores a new ITR value based on packets and byte |
1245 | * counts during the last interrupt. The advantage of per interrupt | 1250 | * counts during the last interrupt. The advantage of per interrupt |
1246 | * computation is faster updates and more accurate ITR for the current | 1251 | * computation is faster updates and more accurate ITR for the current |
@@ -1250,10 +1255,6 @@ void e1000e_free_rx_resources(struct e1000_adapter *adapter) | |||
1250 | * while increasing bulk throughput. | 1255 | * while increasing bulk throughput. |
1251 | * this functionality is controlled by the InterruptThrottleRate module | 1256 | * this functionality is controlled by the InterruptThrottleRate module |
1252 | * parameter (see e1000_param.c) | 1257 | * parameter (see e1000_param.c) |
1253 | * @adapter: pointer to adapter | ||
1254 | * @itr_setting: current adapter->itr | ||
1255 | * @packets: the number of packets during this measurement interval | ||
1256 | * @bytes: the number of bytes during this measurement interval | ||
1257 | **/ | 1258 | **/ |
1258 | static unsigned int e1000_update_itr(struct e1000_adapter *adapter, | 1259 | static unsigned int e1000_update_itr(struct e1000_adapter *adapter, |
1259 | u16 itr_setting, int packets, | 1260 | u16 itr_setting, int packets, |
@@ -1366,6 +1367,7 @@ set_itr_now: | |||
1366 | /** | 1367 | /** |
1367 | * e1000_clean - NAPI Rx polling callback | 1368 | * e1000_clean - NAPI Rx polling callback |
1368 | * @adapter: board private structure | 1369 | * @adapter: board private structure |
1370 | * @budget: amount of packets driver is allowed to process this poll | ||
1369 | **/ | 1371 | **/ |
1370 | static int e1000_clean(struct napi_struct *napi, int budget) | 1372 | static int e1000_clean(struct napi_struct *napi, int budget) |
1371 | { | 1373 | { |
@@ -2000,7 +2002,7 @@ static void e1000_power_down_phy(struct e1000_adapter *adapter) | |||
2000 | e1000_check_reset_block(hw)) | 2002 | e1000_check_reset_block(hw)) |
2001 | return; | 2003 | return; |
2002 | 2004 | ||
2003 | /* managebility (AMT) is enabled */ | 2005 | /* manageability (AMT) is enabled */ |
2004 | if (er32(MANC) & E1000_MANC_SMBUS_EN) | 2006 | if (er32(MANC) & E1000_MANC_SMBUS_EN) |
2005 | return; | 2007 | return; |
2006 | 2008 | ||
@@ -3488,7 +3490,6 @@ static int e1000_suspend(struct pci_dev *pdev, pm_message_t state) | |||
3488 | static void e1000e_disable_l1aspm(struct pci_dev *pdev) | 3490 | static void e1000e_disable_l1aspm(struct pci_dev *pdev) |
3489 | { | 3491 | { |
3490 | int pos; | 3492 | int pos; |
3491 | u32 cap; | ||
3492 | u16 val; | 3493 | u16 val; |
3493 | 3494 | ||
3494 | /* | 3495 | /* |
@@ -3503,7 +3504,6 @@ static void e1000e_disable_l1aspm(struct pci_dev *pdev) | |||
3503 | * active. | 3504 | * active. |
3504 | */ | 3505 | */ |
3505 | pos = pci_find_capability(pdev, PCI_CAP_ID_EXP); | 3506 | pos = pci_find_capability(pdev, PCI_CAP_ID_EXP); |
3506 | pci_read_config_dword(pdev, pos + PCI_EXP_LNKCAP, &cap); | ||
3507 | pci_read_config_word(pdev, pos + PCI_EXP_LNKCTL, &val); | 3507 | pci_read_config_word(pdev, pos + PCI_EXP_LNKCTL, &val); |
3508 | if (val & 0x2) { | 3508 | if (val & 0x2) { |
3509 | dev_warn(&pdev->dev, "Disabling L1 ASPM\n"); | 3509 | dev_warn(&pdev->dev, "Disabling L1 ASPM\n"); |
diff --git a/drivers/net/e1000e/phy.c b/drivers/net/e1000e/phy.c index fc6fee112f1c..dab3c468a768 100644 --- a/drivers/net/e1000e/phy.c +++ b/drivers/net/e1000e/phy.c | |||
@@ -121,7 +121,7 @@ s32 e1000e_phy_reset_dsp(struct e1000_hw *hw) | |||
121 | * @offset: register offset to be read | 121 | * @offset: register offset to be read |
122 | * @data: pointer to the read data | 122 | * @data: pointer to the read data |
123 | * | 123 | * |
124 | * Reads the MDI control regsiter in the PHY at offset and stores the | 124 | * Reads the MDI control register in the PHY at offset and stores the |
125 | * information read to data. | 125 | * information read to data. |
126 | **/ | 126 | **/ |
127 | static s32 e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data) | 127 | static s32 e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data) |
@@ -1172,7 +1172,7 @@ s32 e1000e_set_d3_lplu_state(struct e1000_hw *hw, bool active) | |||
1172 | } | 1172 | } |
1173 | 1173 | ||
1174 | /** | 1174 | /** |
1175 | * e1000e_check_downshift - Checks whether a downshift in speed occured | 1175 | * e1000e_check_downshift - Checks whether a downshift in speed occurred |
1176 | * @hw: pointer to the HW structure | 1176 | * @hw: pointer to the HW structure |
1177 | * | 1177 | * |
1178 | * Success returns 0, Failure returns 1 | 1178 | * Success returns 0, Failure returns 1 |
@@ -1388,8 +1388,8 @@ s32 e1000e_get_cable_length_m88(struct e1000_hw *hw) | |||
1388 | * | 1388 | * |
1389 | * The automatic gain control (agc) normalizes the amplitude of the | 1389 | * The automatic gain control (agc) normalizes the amplitude of the |
1390 | * received signal, adjusting for the attenuation produced by the | 1390 | * received signal, adjusting for the attenuation produced by the |
1391 | * cable. By reading the AGC registers, which reperesent the | 1391 | * cable. By reading the AGC registers, which represent the |
1392 | * cobination of course and fine gain value, the value can be put | 1392 | * combination of course and fine gain value, the value can be put |
1393 | * into a lookup table to obtain the approximate cable length | 1393 | * into a lookup table to obtain the approximate cable length |
1394 | * for each channel. | 1394 | * for each channel. |
1395 | **/ | 1395 | **/ |
@@ -1619,7 +1619,7 @@ s32 e1000e_phy_sw_reset(struct e1000_hw *hw) | |||
1619 | * Verify the reset block is not blocking us from resetting. Acquire | 1619 | * Verify the reset block is not blocking us from resetting. Acquire |
1620 | * semaphore (if necessary) and read/set/write the device control reset | 1620 | * semaphore (if necessary) and read/set/write the device control reset |
1621 | * bit in the PHY. Wait the appropriate delay time for the device to | 1621 | * bit in the PHY. Wait the appropriate delay time for the device to |
1622 | * reset and relase the semaphore (if necessary). | 1622 | * reset and release the semaphore (if necessary). |
1623 | **/ | 1623 | **/ |
1624 | s32 e1000e_phy_hw_reset_generic(struct e1000_hw *hw) | 1624 | s32 e1000e_phy_hw_reset_generic(struct e1000_hw *hw) |
1625 | { | 1625 | { |
diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h index 88fb53eba715..7c4ead35cfa2 100644 --- a/drivers/net/ehea/ehea.h +++ b/drivers/net/ehea/ehea.h | |||
@@ -40,7 +40,7 @@ | |||
40 | #include <asm/io.h> | 40 | #include <asm/io.h> |
41 | 41 | ||
42 | #define DRV_NAME "ehea" | 42 | #define DRV_NAME "ehea" |
43 | #define DRV_VERSION "EHEA_0083" | 43 | #define DRV_VERSION "EHEA_0087" |
44 | 44 | ||
45 | /* eHEA capability flags */ | 45 | /* eHEA capability flags */ |
46 | #define DLPAR_PORT_ADD_REM 1 | 46 | #define DLPAR_PORT_ADD_REM 1 |
@@ -386,6 +386,13 @@ struct ehea_port_res { | |||
386 | 386 | ||
387 | 387 | ||
388 | #define EHEA_MAX_PORTS 16 | 388 | #define EHEA_MAX_PORTS 16 |
389 | |||
390 | #define EHEA_NUM_PORTRES_FW_HANDLES 6 /* QP handle, SendCQ handle, | ||
391 | RecvCQ handle, EQ handle, | ||
392 | SendMR handle, RecvMR handle */ | ||
393 | #define EHEA_NUM_PORT_FW_HANDLES 1 /* EQ handle */ | ||
394 | #define EHEA_NUM_ADAPTER_FW_HANDLES 2 /* MR handle, NEQ handle */ | ||
395 | |||
389 | struct ehea_adapter { | 396 | struct ehea_adapter { |
390 | u64 handle; | 397 | u64 handle; |
391 | struct of_device *ofdev; | 398 | struct of_device *ofdev; |
@@ -405,6 +412,31 @@ struct ehea_mc_list { | |||
405 | u64 macaddr; | 412 | u64 macaddr; |
406 | }; | 413 | }; |
407 | 414 | ||
415 | /* kdump support */ | ||
416 | struct ehea_fw_handle_entry { | ||
417 | u64 adh; /* Adapter Handle */ | ||
418 | u64 fwh; /* Firmware Handle */ | ||
419 | }; | ||
420 | |||
421 | struct ehea_fw_handle_array { | ||
422 | struct ehea_fw_handle_entry *arr; | ||
423 | int num_entries; | ||
424 | struct semaphore lock; | ||
425 | }; | ||
426 | |||
427 | struct ehea_bcmc_reg_entry { | ||
428 | u64 adh; /* Adapter Handle */ | ||
429 | u32 port_id; /* Logical Port Id */ | ||
430 | u8 reg_type; /* Registration Type */ | ||
431 | u64 macaddr; | ||
432 | }; | ||
433 | |||
434 | struct ehea_bcmc_reg_array { | ||
435 | struct ehea_bcmc_reg_entry *arr; | ||
436 | int num_entries; | ||
437 | struct semaphore lock; | ||
438 | }; | ||
439 | |||
408 | #define EHEA_PORT_UP 1 | 440 | #define EHEA_PORT_UP 1 |
409 | #define EHEA_PORT_DOWN 0 | 441 | #define EHEA_PORT_DOWN 0 |
410 | #define EHEA_PHY_LINK_UP 1 | 442 | #define EHEA_PHY_LINK_UP 1 |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index c051c7e09b9a..21af674b764e 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/if_ether.h> | 35 | #include <linux/if_ether.h> |
36 | #include <linux/notifier.h> | 36 | #include <linux/notifier.h> |
37 | #include <linux/reboot.h> | 37 | #include <linux/reboot.h> |
38 | #include <asm/kexec.h> | ||
38 | 39 | ||
39 | #include <net/ip.h> | 40 | #include <net/ip.h> |
40 | 41 | ||
@@ -98,8 +99,10 @@ static int port_name_cnt; | |||
98 | static LIST_HEAD(adapter_list); | 99 | static LIST_HEAD(adapter_list); |
99 | u64 ehea_driver_flags; | 100 | u64 ehea_driver_flags; |
100 | struct work_struct ehea_rereg_mr_task; | 101 | struct work_struct ehea_rereg_mr_task; |
101 | |||
102 | struct semaphore dlpar_mem_lock; | 102 | struct semaphore dlpar_mem_lock; |
103 | struct ehea_fw_handle_array ehea_fw_handles; | ||
104 | struct ehea_bcmc_reg_array ehea_bcmc_regs; | ||
105 | |||
103 | 106 | ||
104 | static int __devinit ehea_probe_adapter(struct of_device *dev, | 107 | static int __devinit ehea_probe_adapter(struct of_device *dev, |
105 | const struct of_device_id *id); | 108 | const struct of_device_id *id); |
@@ -132,6 +135,160 @@ void ehea_dump(void *adr, int len, char *msg) | |||
132 | } | 135 | } |
133 | } | 136 | } |
134 | 137 | ||
138 | static void ehea_update_firmware_handles(void) | ||
139 | { | ||
140 | struct ehea_fw_handle_entry *arr = NULL; | ||
141 | struct ehea_adapter *adapter; | ||
142 | int num_adapters = 0; | ||
143 | int num_ports = 0; | ||
144 | int num_portres = 0; | ||
145 | int i = 0; | ||
146 | int num_fw_handles, k, l; | ||
147 | |||
148 | /* Determine number of handles */ | ||
149 | list_for_each_entry(adapter, &adapter_list, list) { | ||
150 | num_adapters++; | ||
151 | |||
152 | for (k = 0; k < EHEA_MAX_PORTS; k++) { | ||
153 | struct ehea_port *port = adapter->port[k]; | ||
154 | |||
155 | if (!port || (port->state != EHEA_PORT_UP)) | ||
156 | continue; | ||
157 | |||
158 | num_ports++; | ||
159 | num_portres += port->num_def_qps + port->num_add_tx_qps; | ||
160 | } | ||
161 | } | ||
162 | |||
163 | num_fw_handles = num_adapters * EHEA_NUM_ADAPTER_FW_HANDLES + | ||
164 | num_ports * EHEA_NUM_PORT_FW_HANDLES + | ||
165 | num_portres * EHEA_NUM_PORTRES_FW_HANDLES; | ||
166 | |||
167 | if (num_fw_handles) { | ||
168 | arr = kzalloc(num_fw_handles * sizeof(*arr), GFP_KERNEL); | ||
169 | if (!arr) | ||
170 | return; /* Keep the existing array */ | ||
171 | } else | ||
172 | goto out_update; | ||
173 | |||
174 | list_for_each_entry(adapter, &adapter_list, list) { | ||
175 | for (k = 0; k < EHEA_MAX_PORTS; k++) { | ||
176 | struct ehea_port *port = adapter->port[k]; | ||
177 | |||
178 | if (!port || (port->state != EHEA_PORT_UP)) | ||
179 | continue; | ||
180 | |||
181 | for (l = 0; | ||
182 | l < port->num_def_qps + port->num_add_tx_qps; | ||
183 | l++) { | ||
184 | struct ehea_port_res *pr = &port->port_res[l]; | ||
185 | |||
186 | arr[i].adh = adapter->handle; | ||
187 | arr[i++].fwh = pr->qp->fw_handle; | ||
188 | arr[i].adh = adapter->handle; | ||
189 | arr[i++].fwh = pr->send_cq->fw_handle; | ||
190 | arr[i].adh = adapter->handle; | ||
191 | arr[i++].fwh = pr->recv_cq->fw_handle; | ||
192 | arr[i].adh = adapter->handle; | ||
193 | arr[i++].fwh = pr->eq->fw_handle; | ||
194 | arr[i].adh = adapter->handle; | ||
195 | arr[i++].fwh = pr->send_mr.handle; | ||
196 | arr[i].adh = adapter->handle; | ||
197 | arr[i++].fwh = pr->recv_mr.handle; | ||
198 | } | ||
199 | arr[i].adh = adapter->handle; | ||
200 | arr[i++].fwh = port->qp_eq->fw_handle; | ||
201 | } | ||
202 | |||
203 | arr[i].adh = adapter->handle; | ||
204 | arr[i++].fwh = adapter->neq->fw_handle; | ||
205 | |||
206 | if (adapter->mr.handle) { | ||
207 | arr[i].adh = adapter->handle; | ||
208 | arr[i++].fwh = adapter->mr.handle; | ||
209 | } | ||
210 | } | ||
211 | |||
212 | out_update: | ||
213 | kfree(ehea_fw_handles.arr); | ||
214 | ehea_fw_handles.arr = arr; | ||
215 | ehea_fw_handles.num_entries = i; | ||
216 | } | ||
217 | |||
218 | static void ehea_update_bcmc_registrations(void) | ||
219 | { | ||
220 | struct ehea_bcmc_reg_entry *arr = NULL; | ||
221 | struct ehea_adapter *adapter; | ||
222 | struct ehea_mc_list *mc_entry; | ||
223 | int num_registrations = 0; | ||
224 | int i = 0; | ||
225 | int k; | ||
226 | |||
227 | /* Determine number of registrations */ | ||
228 | list_for_each_entry(adapter, &adapter_list, list) | ||
229 | for (k = 0; k < EHEA_MAX_PORTS; k++) { | ||
230 | struct ehea_port *port = adapter->port[k]; | ||
231 | |||
232 | if (!port || (port->state != EHEA_PORT_UP)) | ||
233 | continue; | ||
234 | |||
235 | num_registrations += 2; /* Broadcast registrations */ | ||
236 | |||
237 | list_for_each_entry(mc_entry, &port->mc_list->list,list) | ||
238 | num_registrations += 2; | ||
239 | } | ||
240 | |||
241 | if (num_registrations) { | ||
242 | arr = kzalloc(num_registrations * sizeof(*arr), GFP_KERNEL); | ||
243 | if (!arr) | ||
244 | return; /* Keep the existing array */ | ||
245 | } else | ||
246 | goto out_update; | ||
247 | |||
248 | list_for_each_entry(adapter, &adapter_list, list) { | ||
249 | for (k = 0; k < EHEA_MAX_PORTS; k++) { | ||
250 | struct ehea_port *port = adapter->port[k]; | ||
251 | |||
252 | if (!port || (port->state != EHEA_PORT_UP)) | ||
253 | continue; | ||
254 | |||
255 | arr[i].adh = adapter->handle; | ||
256 | arr[i].port_id = port->logical_port_id; | ||
257 | arr[i].reg_type = EHEA_BCMC_BROADCAST | | ||
258 | EHEA_BCMC_UNTAGGED; | ||
259 | arr[i++].macaddr = port->mac_addr; | ||
260 | |||
261 | arr[i].adh = adapter->handle; | ||
262 | arr[i].port_id = port->logical_port_id; | ||
263 | arr[i].reg_type = EHEA_BCMC_BROADCAST | | ||
264 | EHEA_BCMC_VLANID_ALL; | ||
265 | arr[i++].macaddr = port->mac_addr; | ||
266 | |||
267 | list_for_each_entry(mc_entry, | ||
268 | &port->mc_list->list, list) { | ||
269 | arr[i].adh = adapter->handle; | ||
270 | arr[i].port_id = port->logical_port_id; | ||
271 | arr[i].reg_type = EHEA_BCMC_SCOPE_ALL | | ||
272 | EHEA_BCMC_MULTICAST | | ||
273 | EHEA_BCMC_UNTAGGED; | ||
274 | arr[i++].macaddr = mc_entry->macaddr; | ||
275 | |||
276 | arr[i].adh = adapter->handle; | ||
277 | arr[i].port_id = port->logical_port_id; | ||
278 | arr[i].reg_type = EHEA_BCMC_SCOPE_ALL | | ||
279 | EHEA_BCMC_MULTICAST | | ||
280 | EHEA_BCMC_VLANID_ALL; | ||
281 | arr[i++].macaddr = mc_entry->macaddr; | ||
282 | } | ||
283 | } | ||
284 | } | ||
285 | |||
286 | out_update: | ||
287 | kfree(ehea_bcmc_regs.arr); | ||
288 | ehea_bcmc_regs.arr = arr; | ||
289 | ehea_bcmc_regs.num_entries = i; | ||
290 | } | ||
291 | |||
135 | static struct net_device_stats *ehea_get_stats(struct net_device *dev) | 292 | static struct net_device_stats *ehea_get_stats(struct net_device *dev) |
136 | { | 293 | { |
137 | struct ehea_port *port = netdev_priv(dev); | 294 | struct ehea_port *port = netdev_priv(dev); |
@@ -1601,19 +1758,25 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa) | |||
1601 | 1758 | ||
1602 | memcpy(dev->dev_addr, mac_addr->sa_data, dev->addr_len); | 1759 | memcpy(dev->dev_addr, mac_addr->sa_data, dev->addr_len); |
1603 | 1760 | ||
1761 | down(&ehea_bcmc_regs.lock); | ||
1762 | |||
1604 | /* Deregister old MAC in pHYP */ | 1763 | /* Deregister old MAC in pHYP */ |
1605 | ret = ehea_broadcast_reg_helper(port, H_DEREG_BCMC); | 1764 | ret = ehea_broadcast_reg_helper(port, H_DEREG_BCMC); |
1606 | if (ret) | 1765 | if (ret) |
1607 | goto out_free; | 1766 | goto out_upregs; |
1608 | 1767 | ||
1609 | port->mac_addr = cb0->port_mac_addr << 16; | 1768 | port->mac_addr = cb0->port_mac_addr << 16; |
1610 | 1769 | ||
1611 | /* Register new MAC in pHYP */ | 1770 | /* Register new MAC in pHYP */ |
1612 | ret = ehea_broadcast_reg_helper(port, H_REG_BCMC); | 1771 | ret = ehea_broadcast_reg_helper(port, H_REG_BCMC); |
1613 | if (ret) | 1772 | if (ret) |
1614 | goto out_free; | 1773 | goto out_upregs; |
1615 | 1774 | ||
1616 | ret = 0; | 1775 | ret = 0; |
1776 | |||
1777 | out_upregs: | ||
1778 | ehea_update_bcmc_registrations(); | ||
1779 | up(&ehea_bcmc_regs.lock); | ||
1617 | out_free: | 1780 | out_free: |
1618 | kfree(cb0); | 1781 | kfree(cb0); |
1619 | out: | 1782 | out: |
@@ -1775,9 +1938,11 @@ static void ehea_set_multicast_list(struct net_device *dev) | |||
1775 | } | 1938 | } |
1776 | ehea_promiscuous(dev, 0); | 1939 | ehea_promiscuous(dev, 0); |
1777 | 1940 | ||
1941 | down(&ehea_bcmc_regs.lock); | ||
1942 | |||
1778 | if (dev->flags & IFF_ALLMULTI) { | 1943 | if (dev->flags & IFF_ALLMULTI) { |
1779 | ehea_allmulti(dev, 1); | 1944 | ehea_allmulti(dev, 1); |
1780 | return; | 1945 | goto out; |
1781 | } | 1946 | } |
1782 | ehea_allmulti(dev, 0); | 1947 | ehea_allmulti(dev, 0); |
1783 | 1948 | ||
@@ -1803,6 +1968,8 @@ static void ehea_set_multicast_list(struct net_device *dev) | |||
1803 | 1968 | ||
1804 | } | 1969 | } |
1805 | out: | 1970 | out: |
1971 | ehea_update_bcmc_registrations(); | ||
1972 | up(&ehea_bcmc_regs.lock); | ||
1806 | return; | 1973 | return; |
1807 | } | 1974 | } |
1808 | 1975 | ||
@@ -2285,6 +2452,8 @@ static int ehea_up(struct net_device *dev) | |||
2285 | if (port->state == EHEA_PORT_UP) | 2452 | if (port->state == EHEA_PORT_UP) |
2286 | return 0; | 2453 | return 0; |
2287 | 2454 | ||
2455 | down(&ehea_fw_handles.lock); | ||
2456 | |||
2288 | ret = ehea_port_res_setup(port, port->num_def_qps, | 2457 | ret = ehea_port_res_setup(port, port->num_def_qps, |
2289 | port->num_add_tx_qps); | 2458 | port->num_add_tx_qps); |
2290 | if (ret) { | 2459 | if (ret) { |
@@ -2321,8 +2490,17 @@ static int ehea_up(struct net_device *dev) | |||
2321 | } | 2490 | } |
2322 | } | 2491 | } |
2323 | 2492 | ||
2324 | ret = 0; | 2493 | down(&ehea_bcmc_regs.lock); |
2494 | |||
2495 | ret = ehea_broadcast_reg_helper(port, H_REG_BCMC); | ||
2496 | if (ret) { | ||
2497 | ret = -EIO; | ||
2498 | goto out_free_irqs; | ||
2499 | } | ||
2500 | |||
2325 | port->state = EHEA_PORT_UP; | 2501 | port->state = EHEA_PORT_UP; |
2502 | |||
2503 | ret = 0; | ||
2326 | goto out; | 2504 | goto out; |
2327 | 2505 | ||
2328 | out_free_irqs: | 2506 | out_free_irqs: |
@@ -2334,6 +2512,12 @@ out: | |||
2334 | if (ret) | 2512 | if (ret) |
2335 | ehea_info("Failed starting %s. ret=%i", dev->name, ret); | 2513 | ehea_info("Failed starting %s. ret=%i", dev->name, ret); |
2336 | 2514 | ||
2515 | ehea_update_bcmc_registrations(); | ||
2516 | up(&ehea_bcmc_regs.lock); | ||
2517 | |||
2518 | ehea_update_firmware_handles(); | ||
2519 | up(&ehea_fw_handles.lock); | ||
2520 | |||
2337 | return ret; | 2521 | return ret; |
2338 | } | 2522 | } |
2339 | 2523 | ||
@@ -2382,16 +2566,27 @@ static int ehea_down(struct net_device *dev) | |||
2382 | if (port->state == EHEA_PORT_DOWN) | 2566 | if (port->state == EHEA_PORT_DOWN) |
2383 | return 0; | 2567 | return 0; |
2384 | 2568 | ||
2569 | down(&ehea_bcmc_regs.lock); | ||
2385 | ehea_drop_multicast_list(dev); | 2570 | ehea_drop_multicast_list(dev); |
2571 | ehea_broadcast_reg_helper(port, H_DEREG_BCMC); | ||
2572 | |||
2386 | ehea_free_interrupts(dev); | 2573 | ehea_free_interrupts(dev); |
2387 | 2574 | ||
2575 | down(&ehea_fw_handles.lock); | ||
2576 | |||
2388 | port->state = EHEA_PORT_DOWN; | 2577 | port->state = EHEA_PORT_DOWN; |
2389 | 2578 | ||
2579 | ehea_update_bcmc_registrations(); | ||
2580 | up(&ehea_bcmc_regs.lock); | ||
2581 | |||
2390 | ret = ehea_clean_all_portres(port); | 2582 | ret = ehea_clean_all_portres(port); |
2391 | if (ret) | 2583 | if (ret) |
2392 | ehea_info("Failed freeing resources for %s. ret=%i", | 2584 | ehea_info("Failed freeing resources for %s. ret=%i", |
2393 | dev->name, ret); | 2585 | dev->name, ret); |
2394 | 2586 | ||
2587 | ehea_update_firmware_handles(); | ||
2588 | up(&ehea_fw_handles.lock); | ||
2589 | |||
2395 | return ret; | 2590 | return ret; |
2396 | } | 2591 | } |
2397 | 2592 | ||
@@ -2920,19 +3115,12 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter, | |||
2920 | dev->watchdog_timeo = EHEA_WATCH_DOG_TIMEOUT; | 3115 | dev->watchdog_timeo = EHEA_WATCH_DOG_TIMEOUT; |
2921 | 3116 | ||
2922 | INIT_WORK(&port->reset_task, ehea_reset_port); | 3117 | INIT_WORK(&port->reset_task, ehea_reset_port); |
2923 | |||
2924 | ret = ehea_broadcast_reg_helper(port, H_REG_BCMC); | ||
2925 | if (ret) { | ||
2926 | ret = -EIO; | ||
2927 | goto out_unreg_port; | ||
2928 | } | ||
2929 | |||
2930 | ehea_set_ethtool_ops(dev); | 3118 | ehea_set_ethtool_ops(dev); |
2931 | 3119 | ||
2932 | ret = register_netdev(dev); | 3120 | ret = register_netdev(dev); |
2933 | if (ret) { | 3121 | if (ret) { |
2934 | ehea_error("register_netdev failed. ret=%d", ret); | 3122 | ehea_error("register_netdev failed. ret=%d", ret); |
2935 | goto out_dereg_bc; | 3123 | goto out_unreg_port; |
2936 | } | 3124 | } |
2937 | 3125 | ||
2938 | port->lro_max_aggr = lro_max_aggr; | 3126 | port->lro_max_aggr = lro_max_aggr; |
@@ -2949,9 +3137,6 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter, | |||
2949 | 3137 | ||
2950 | return port; | 3138 | return port; |
2951 | 3139 | ||
2952 | out_dereg_bc: | ||
2953 | ehea_broadcast_reg_helper(port, H_DEREG_BCMC); | ||
2954 | |||
2955 | out_unreg_port: | 3140 | out_unreg_port: |
2956 | ehea_unregister_port(port); | 3141 | ehea_unregister_port(port); |
2957 | 3142 | ||
@@ -2971,7 +3156,6 @@ static void ehea_shutdown_single_port(struct ehea_port *port) | |||
2971 | { | 3156 | { |
2972 | unregister_netdev(port->netdev); | 3157 | unregister_netdev(port->netdev); |
2973 | ehea_unregister_port(port); | 3158 | ehea_unregister_port(port); |
2974 | ehea_broadcast_reg_helper(port, H_DEREG_BCMC); | ||
2975 | kfree(port->mc_list); | 3159 | kfree(port->mc_list); |
2976 | free_netdev(port->netdev); | 3160 | free_netdev(port->netdev); |
2977 | port->adapter->active_ports--; | 3161 | port->adapter->active_ports--; |
@@ -3014,7 +3198,6 @@ static int ehea_setup_ports(struct ehea_adapter *adapter) | |||
3014 | 3198 | ||
3015 | i++; | 3199 | i++; |
3016 | }; | 3200 | }; |
3017 | |||
3018 | return 0; | 3201 | return 0; |
3019 | } | 3202 | } |
3020 | 3203 | ||
@@ -3159,6 +3342,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev, | |||
3159 | ehea_error("Invalid ibmebus device probed"); | 3342 | ehea_error("Invalid ibmebus device probed"); |
3160 | return -EINVAL; | 3343 | return -EINVAL; |
3161 | } | 3344 | } |
3345 | down(&ehea_fw_handles.lock); | ||
3162 | 3346 | ||
3163 | adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); | 3347 | adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); |
3164 | if (!adapter) { | 3348 | if (!adapter) { |
@@ -3239,7 +3423,10 @@ out_kill_eq: | |||
3239 | 3423 | ||
3240 | out_free_ad: | 3424 | out_free_ad: |
3241 | kfree(adapter); | 3425 | kfree(adapter); |
3426 | |||
3242 | out: | 3427 | out: |
3428 | ehea_update_firmware_handles(); | ||
3429 | up(&ehea_fw_handles.lock); | ||
3243 | return ret; | 3430 | return ret; |
3244 | } | 3431 | } |
3245 | 3432 | ||
@@ -3258,18 +3445,41 @@ static int __devexit ehea_remove(struct of_device *dev) | |||
3258 | 3445 | ||
3259 | flush_scheduled_work(); | 3446 | flush_scheduled_work(); |
3260 | 3447 | ||
3448 | down(&ehea_fw_handles.lock); | ||
3449 | |||
3261 | ibmebus_free_irq(adapter->neq->attr.ist1, adapter); | 3450 | ibmebus_free_irq(adapter->neq->attr.ist1, adapter); |
3262 | tasklet_kill(&adapter->neq_tasklet); | 3451 | tasklet_kill(&adapter->neq_tasklet); |
3263 | 3452 | ||
3264 | ehea_destroy_eq(adapter->neq); | 3453 | ehea_destroy_eq(adapter->neq); |
3265 | ehea_remove_adapter_mr(adapter); | 3454 | ehea_remove_adapter_mr(adapter); |
3266 | list_del(&adapter->list); | 3455 | list_del(&adapter->list); |
3267 | |||
3268 | kfree(adapter); | 3456 | kfree(adapter); |
3269 | 3457 | ||
3458 | ehea_update_firmware_handles(); | ||
3459 | up(&ehea_fw_handles.lock); | ||
3460 | |||
3270 | return 0; | 3461 | return 0; |
3271 | } | 3462 | } |
3272 | 3463 | ||
3464 | void ehea_crash_handler(void) | ||
3465 | { | ||
3466 | int i; | ||
3467 | |||
3468 | if (ehea_fw_handles.arr) | ||
3469 | for (i = 0; i < ehea_fw_handles.num_entries; i++) | ||
3470 | ehea_h_free_resource(ehea_fw_handles.arr[i].adh, | ||
3471 | ehea_fw_handles.arr[i].fwh, | ||
3472 | FORCE_FREE); | ||
3473 | |||
3474 | if (ehea_bcmc_regs.arr) | ||
3475 | for (i = 0; i < ehea_bcmc_regs.num_entries; i++) | ||
3476 | ehea_h_reg_dereg_bcmc(ehea_bcmc_regs.arr[i].adh, | ||
3477 | ehea_bcmc_regs.arr[i].port_id, | ||
3478 | ehea_bcmc_regs.arr[i].reg_type, | ||
3479 | ehea_bcmc_regs.arr[i].macaddr, | ||
3480 | 0, H_DEREG_BCMC); | ||
3481 | } | ||
3482 | |||
3273 | static int ehea_reboot_notifier(struct notifier_block *nb, | 3483 | static int ehea_reboot_notifier(struct notifier_block *nb, |
3274 | unsigned long action, void *unused) | 3484 | unsigned long action, void *unused) |
3275 | { | 3485 | { |
@@ -3330,7 +3540,12 @@ int __init ehea_module_init(void) | |||
3330 | 3540 | ||
3331 | 3541 | ||
3332 | INIT_WORK(&ehea_rereg_mr_task, ehea_rereg_mrs); | 3542 | INIT_WORK(&ehea_rereg_mr_task, ehea_rereg_mrs); |
3543 | memset(&ehea_fw_handles, 0, sizeof(ehea_fw_handles)); | ||
3544 | memset(&ehea_bcmc_regs, 0, sizeof(ehea_bcmc_regs)); | ||
3545 | |||
3333 | sema_init(&dlpar_mem_lock, 1); | 3546 | sema_init(&dlpar_mem_lock, 1); |
3547 | sema_init(&ehea_fw_handles.lock, 1); | ||
3548 | sema_init(&ehea_bcmc_regs.lock, 1); | ||
3334 | 3549 | ||
3335 | ret = check_module_parm(); | 3550 | ret = check_module_parm(); |
3336 | if (ret) | 3551 | if (ret) |
@@ -3340,12 +3555,18 @@ int __init ehea_module_init(void) | |||
3340 | if (ret) | 3555 | if (ret) |
3341 | goto out; | 3556 | goto out; |
3342 | 3557 | ||
3343 | register_reboot_notifier(&ehea_reboot_nb); | 3558 | ret = register_reboot_notifier(&ehea_reboot_nb); |
3559 | if (ret) | ||
3560 | ehea_info("failed registering reboot notifier"); | ||
3561 | |||
3562 | ret = crash_shutdown_register(&ehea_crash_handler); | ||
3563 | if (ret) | ||
3564 | ehea_info("failed registering crash handler"); | ||
3344 | 3565 | ||
3345 | ret = ibmebus_register_driver(&ehea_driver); | 3566 | ret = ibmebus_register_driver(&ehea_driver); |
3346 | if (ret) { | 3567 | if (ret) { |
3347 | ehea_error("failed registering eHEA device driver on ebus"); | 3568 | ehea_error("failed registering eHEA device driver on ebus"); |
3348 | goto out; | 3569 | goto out2; |
3349 | } | 3570 | } |
3350 | 3571 | ||
3351 | ret = driver_create_file(&ehea_driver.driver, | 3572 | ret = driver_create_file(&ehea_driver.driver, |
@@ -3353,21 +3574,33 @@ int __init ehea_module_init(void) | |||
3353 | if (ret) { | 3574 | if (ret) { |
3354 | ehea_error("failed to register capabilities attribute, ret=%d", | 3575 | ehea_error("failed to register capabilities attribute, ret=%d", |
3355 | ret); | 3576 | ret); |
3356 | unregister_reboot_notifier(&ehea_reboot_nb); | 3577 | goto out3; |
3357 | ibmebus_unregister_driver(&ehea_driver); | ||
3358 | goto out; | ||
3359 | } | 3578 | } |
3360 | 3579 | ||
3580 | return ret; | ||
3581 | |||
3582 | out3: | ||
3583 | ibmebus_unregister_driver(&ehea_driver); | ||
3584 | out2: | ||
3585 | unregister_reboot_notifier(&ehea_reboot_nb); | ||
3586 | crash_shutdown_unregister(&ehea_crash_handler); | ||
3361 | out: | 3587 | out: |
3362 | return ret; | 3588 | return ret; |
3363 | } | 3589 | } |
3364 | 3590 | ||
3365 | static void __exit ehea_module_exit(void) | 3591 | static void __exit ehea_module_exit(void) |
3366 | { | 3592 | { |
3593 | int ret; | ||
3594 | |||
3367 | flush_scheduled_work(); | 3595 | flush_scheduled_work(); |
3368 | driver_remove_file(&ehea_driver.driver, &driver_attr_capabilities); | 3596 | driver_remove_file(&ehea_driver.driver, &driver_attr_capabilities); |
3369 | ibmebus_unregister_driver(&ehea_driver); | 3597 | ibmebus_unregister_driver(&ehea_driver); |
3370 | unregister_reboot_notifier(&ehea_reboot_nb); | 3598 | unregister_reboot_notifier(&ehea_reboot_nb); |
3599 | ret = crash_shutdown_unregister(&ehea_crash_handler); | ||
3600 | if (ret) | ||
3601 | ehea_info("failed unregistering crash handler"); | ||
3602 | kfree(ehea_fw_handles.arr); | ||
3603 | kfree(ehea_bcmc_regs.arr); | ||
3371 | ehea_destroy_busmap(); | 3604 | ehea_destroy_busmap(); |
3372 | } | 3605 | } |
3373 | 3606 | ||
diff --git a/drivers/net/fs_enet/fs_enet-main.c b/drivers/net/fs_enet/fs_enet-main.c index 42d94edeee26..af869cf9ae7d 100644 --- a/drivers/net/fs_enet/fs_enet-main.c +++ b/drivers/net/fs_enet/fs_enet-main.c | |||
@@ -946,16 +946,11 @@ static int fs_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
946 | { | 946 | { |
947 | struct fs_enet_private *fep = netdev_priv(dev); | 947 | struct fs_enet_private *fep = netdev_priv(dev); |
948 | struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&rq->ifr_data; | 948 | struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&rq->ifr_data; |
949 | unsigned long flags; | ||
950 | int rc; | ||
951 | 949 | ||
952 | if (!netif_running(dev)) | 950 | if (!netif_running(dev)) |
953 | return -EINVAL; | 951 | return -EINVAL; |
954 | 952 | ||
955 | spin_lock_irqsave(&fep->lock, flags); | 953 | return phy_mii_ioctl(fep->phydev, mii, cmd); |
956 | rc = phy_mii_ioctl(fep->phydev, mii, cmd); | ||
957 | spin_unlock_irqrestore(&fep->lock, flags); | ||
958 | return rc; | ||
959 | } | 954 | } |
960 | 955 | ||
961 | extern int fs_mii_connect(struct net_device *dev); | 956 | extern int fs_mii_connect(struct net_device *dev); |
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 4244fc282f21..718cf77e345a 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
@@ -605,7 +605,7 @@ void stop_gfar(struct net_device *dev) | |||
605 | 605 | ||
606 | free_skb_resources(priv); | 606 | free_skb_resources(priv); |
607 | 607 | ||
608 | dma_free_coherent(NULL, | 608 | dma_free_coherent(&dev->dev, |
609 | sizeof(struct txbd8)*priv->tx_ring_size | 609 | sizeof(struct txbd8)*priv->tx_ring_size |
610 | + sizeof(struct rxbd8)*priv->rx_ring_size, | 610 | + sizeof(struct rxbd8)*priv->rx_ring_size, |
611 | priv->tx_bd_base, | 611 | priv->tx_bd_base, |
@@ -626,7 +626,7 @@ static void free_skb_resources(struct gfar_private *priv) | |||
626 | for (i = 0; i < priv->tx_ring_size; i++) { | 626 | for (i = 0; i < priv->tx_ring_size; i++) { |
627 | 627 | ||
628 | if (priv->tx_skbuff[i]) { | 628 | if (priv->tx_skbuff[i]) { |
629 | dma_unmap_single(NULL, txbdp->bufPtr, | 629 | dma_unmap_single(&priv->dev->dev, txbdp->bufPtr, |
630 | txbdp->length, | 630 | txbdp->length, |
631 | DMA_TO_DEVICE); | 631 | DMA_TO_DEVICE); |
632 | dev_kfree_skb_any(priv->tx_skbuff[i]); | 632 | dev_kfree_skb_any(priv->tx_skbuff[i]); |
@@ -643,7 +643,7 @@ static void free_skb_resources(struct gfar_private *priv) | |||
643 | if(priv->rx_skbuff != NULL) { | 643 | if(priv->rx_skbuff != NULL) { |
644 | for (i = 0; i < priv->rx_ring_size; i++) { | 644 | for (i = 0; i < priv->rx_ring_size; i++) { |
645 | if (priv->rx_skbuff[i]) { | 645 | if (priv->rx_skbuff[i]) { |
646 | dma_unmap_single(NULL, rxbdp->bufPtr, | 646 | dma_unmap_single(&priv->dev->dev, rxbdp->bufPtr, |
647 | priv->rx_buffer_size, | 647 | priv->rx_buffer_size, |
648 | DMA_FROM_DEVICE); | 648 | DMA_FROM_DEVICE); |
649 | 649 | ||
@@ -708,7 +708,7 @@ int startup_gfar(struct net_device *dev) | |||
708 | gfar_write(®s->imask, IMASK_INIT_CLEAR); | 708 | gfar_write(®s->imask, IMASK_INIT_CLEAR); |
709 | 709 | ||
710 | /* Allocate memory for the buffer descriptors */ | 710 | /* Allocate memory for the buffer descriptors */ |
711 | vaddr = (unsigned long) dma_alloc_coherent(NULL, | 711 | vaddr = (unsigned long) dma_alloc_coherent(&dev->dev, |
712 | sizeof (struct txbd8) * priv->tx_ring_size + | 712 | sizeof (struct txbd8) * priv->tx_ring_size + |
713 | sizeof (struct rxbd8) * priv->rx_ring_size, | 713 | sizeof (struct rxbd8) * priv->rx_ring_size, |
714 | &addr, GFP_KERNEL); | 714 | &addr, GFP_KERNEL); |
@@ -919,7 +919,7 @@ err_irq_fail: | |||
919 | rx_skb_fail: | 919 | rx_skb_fail: |
920 | free_skb_resources(priv); | 920 | free_skb_resources(priv); |
921 | tx_skb_fail: | 921 | tx_skb_fail: |
922 | dma_free_coherent(NULL, | 922 | dma_free_coherent(&dev->dev, |
923 | sizeof(struct txbd8)*priv->tx_ring_size | 923 | sizeof(struct txbd8)*priv->tx_ring_size |
924 | + sizeof(struct rxbd8)*priv->rx_ring_size, | 924 | + sizeof(struct rxbd8)*priv->rx_ring_size, |
925 | priv->tx_bd_base, | 925 | priv->tx_bd_base, |
@@ -1053,7 +1053,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1053 | 1053 | ||
1054 | /* Set buffer length and pointer */ | 1054 | /* Set buffer length and pointer */ |
1055 | txbdp->length = skb->len; | 1055 | txbdp->length = skb->len; |
1056 | txbdp->bufPtr = dma_map_single(NULL, skb->data, | 1056 | txbdp->bufPtr = dma_map_single(&dev->dev, skb->data, |
1057 | skb->len, DMA_TO_DEVICE); | 1057 | skb->len, DMA_TO_DEVICE); |
1058 | 1058 | ||
1059 | /* Save the skb pointer so we can free it later */ | 1059 | /* Save the skb pointer so we can free it later */ |
@@ -1332,7 +1332,7 @@ struct sk_buff * gfar_new_skb(struct net_device *dev, struct rxbd8 *bdp) | |||
1332 | */ | 1332 | */ |
1333 | skb_reserve(skb, alignamount); | 1333 | skb_reserve(skb, alignamount); |
1334 | 1334 | ||
1335 | bdp->bufPtr = dma_map_single(NULL, skb->data, | 1335 | bdp->bufPtr = dma_map_single(&dev->dev, skb->data, |
1336 | priv->rx_buffer_size, DMA_FROM_DEVICE); | 1336 | priv->rx_buffer_size, DMA_FROM_DEVICE); |
1337 | 1337 | ||
1338 | bdp->length = 0; | 1338 | bdp->length = 0; |
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index bff280eff5e3..6a1f23092099 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -439,7 +439,7 @@ static int igb_request_irq(struct igb_adapter *adapter) | |||
439 | err = igb_request_msix(adapter); | 439 | err = igb_request_msix(adapter); |
440 | if (!err) { | 440 | if (!err) { |
441 | /* enable IAM, auto-mask, | 441 | /* enable IAM, auto-mask, |
442 | * DO NOT USE EIAME or IAME in legacy mode */ | 442 | * DO NOT USE EIAM or IAM in legacy mode */ |
443 | wr32(E1000_IAM, IMS_ENABLE_MASK); | 443 | wr32(E1000_IAM, IMS_ENABLE_MASK); |
444 | goto request_done; | 444 | goto request_done; |
445 | } | 445 | } |
@@ -465,14 +465,9 @@ static int igb_request_irq(struct igb_adapter *adapter) | |||
465 | err = request_irq(adapter->pdev->irq, &igb_intr, IRQF_SHARED, | 465 | err = request_irq(adapter->pdev->irq, &igb_intr, IRQF_SHARED, |
466 | netdev->name, netdev); | 466 | netdev->name, netdev); |
467 | 467 | ||
468 | if (err) { | 468 | if (err) |
469 | dev_err(&adapter->pdev->dev, "Error %d getting interrupt\n", | 469 | dev_err(&adapter->pdev->dev, "Error %d getting interrupt\n", |
470 | err); | 470 | err); |
471 | goto request_done; | ||
472 | } | ||
473 | |||
474 | /* enable IAM, auto-mask */ | ||
475 | wr32(E1000_IAM, IMS_ENABLE_MASK); | ||
476 | 471 | ||
477 | request_done: | 472 | request_done: |
478 | return err; | 473 | return err; |
@@ -821,7 +816,8 @@ void igb_reset(struct igb_adapter *adapter) | |||
821 | wr32(E1000_VET, ETHERNET_IEEE_VLAN_TYPE); | 816 | wr32(E1000_VET, ETHERNET_IEEE_VLAN_TYPE); |
822 | 817 | ||
823 | igb_reset_adaptive(&adapter->hw); | 818 | igb_reset_adaptive(&adapter->hw); |
824 | adapter->hw.phy.ops.get_phy_info(&adapter->hw); | 819 | if (adapter->hw.phy.ops.get_phy_info) |
820 | adapter->hw.phy.ops.get_phy_info(&adapter->hw); | ||
825 | } | 821 | } |
826 | 822 | ||
827 | /** | 823 | /** |
@@ -2057,7 +2053,8 @@ static void igb_set_multi(struct net_device *netdev) | |||
2057 | static void igb_update_phy_info(unsigned long data) | 2053 | static void igb_update_phy_info(unsigned long data) |
2058 | { | 2054 | { |
2059 | struct igb_adapter *adapter = (struct igb_adapter *) data; | 2055 | struct igb_adapter *adapter = (struct igb_adapter *) data; |
2060 | adapter->hw.phy.ops.get_phy_info(&adapter->hw); | 2056 | if (adapter->hw.phy.ops.get_phy_info) |
2057 | adapter->hw.phy.ops.get_phy_info(&adapter->hw); | ||
2061 | } | 2058 | } |
2062 | 2059 | ||
2063 | /** | 2060 | /** |
diff --git a/drivers/net/ixgb/ixgb_ethtool.c b/drivers/net/ixgb/ixgb_ethtool.c index 53a9fd086f96..75f3a68ee354 100644 --- a/drivers/net/ixgb/ixgb_ethtool.c +++ b/drivers/net/ixgb/ixgb_ethtool.c | |||
@@ -67,6 +67,7 @@ static struct ixgb_stats ixgb_gstrings_stats[] = { | |||
67 | {"rx_over_errors", IXGB_STAT(net_stats.rx_over_errors)}, | 67 | {"rx_over_errors", IXGB_STAT(net_stats.rx_over_errors)}, |
68 | {"rx_crc_errors", IXGB_STAT(net_stats.rx_crc_errors)}, | 68 | {"rx_crc_errors", IXGB_STAT(net_stats.rx_crc_errors)}, |
69 | {"rx_frame_errors", IXGB_STAT(net_stats.rx_frame_errors)}, | 69 | {"rx_frame_errors", IXGB_STAT(net_stats.rx_frame_errors)}, |
70 | {"rx_no_buffer_count", IXGB_STAT(stats.rnbc)}, | ||
70 | {"rx_fifo_errors", IXGB_STAT(net_stats.rx_fifo_errors)}, | 71 | {"rx_fifo_errors", IXGB_STAT(net_stats.rx_fifo_errors)}, |
71 | {"rx_missed_errors", IXGB_STAT(net_stats.rx_missed_errors)}, | 72 | {"rx_missed_errors", IXGB_STAT(net_stats.rx_missed_errors)}, |
72 | {"tx_aborted_errors", IXGB_STAT(net_stats.tx_aborted_errors)}, | 73 | {"tx_aborted_errors", IXGB_STAT(net_stats.tx_aborted_errors)}, |
diff --git a/drivers/net/macb.c b/drivers/net/macb.c index 81bf005ff280..1d210ed46130 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c | |||
@@ -148,7 +148,7 @@ static void macb_handle_link_change(struct net_device *dev) | |||
148 | 148 | ||
149 | if (phydev->duplex) | 149 | if (phydev->duplex) |
150 | reg |= MACB_BIT(FD); | 150 | reg |= MACB_BIT(FD); |
151 | if (phydev->speed) | 151 | if (phydev->speed == SPEED_100) |
152 | reg |= MACB_BIT(SPD); | 152 | reg |= MACB_BIT(SPD); |
153 | 153 | ||
154 | macb_writel(bp, NCFGR, reg); | 154 | macb_writel(bp, NCFGR, reg); |
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c index 6323988dfa1d..fd8158a86f64 100644 --- a/drivers/net/pcmcia/pcnet_cs.c +++ b/drivers/net/pcmcia/pcnet_cs.c | |||
@@ -590,6 +590,13 @@ static int pcnet_config(struct pcmcia_device *link) | |||
590 | dev->if_port = 0; | 590 | dev->if_port = 0; |
591 | } | 591 | } |
592 | 592 | ||
593 | if ((link->conf.ConfigBase == 0x03c0) | ||
594 | && (link->manf_id == 0x149) && (link->card_id = 0xc1ab)) { | ||
595 | printk(KERN_INFO "pcnet_cs: this is an AX88190 card!\n"); | ||
596 | printk(KERN_INFO "pcnet_cs: use axnet_cs instead.\n"); | ||
597 | goto failed; | ||
598 | } | ||
599 | |||
593 | local_hw_info = get_hwinfo(link); | 600 | local_hw_info = get_hwinfo(link); |
594 | if (local_hw_info == NULL) | 601 | if (local_hw_info == NULL) |
595 | local_hw_info = get_prom(link); | 602 | local_hw_info = get_prom(link); |
@@ -1567,12 +1574,11 @@ static struct pcmcia_device_id pcnet_ids[] = { | |||
1567 | PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0145), | 1574 | PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0145), |
1568 | PCMCIA_DEVICE_MANF_CARD(0x0149, 0x0230), | 1575 | PCMCIA_DEVICE_MANF_CARD(0x0149, 0x0230), |
1569 | PCMCIA_DEVICE_MANF_CARD(0x0149, 0x4530), | 1576 | PCMCIA_DEVICE_MANF_CARD(0x0149, 0x4530), |
1570 | /* PCMCIA_DEVICE_MANF_CARD(0x0149, 0xc1ab), conflict with axnet_cs */ | 1577 | PCMCIA_DEVICE_MANF_CARD(0x0149, 0xc1ab), |
1571 | PCMCIA_DEVICE_MANF_CARD(0x0186, 0x0110), | 1578 | PCMCIA_DEVICE_MANF_CARD(0x0186, 0x0110), |
1572 | PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x2328), | 1579 | PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x2328), |
1573 | PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x8041), | 1580 | PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x8041), |
1574 | PCMCIA_DEVICE_MANF_CARD(0x0213, 0x2452), | 1581 | PCMCIA_DEVICE_MANF_CARD(0x0213, 0x2452), |
1575 | /* PCMCIA_DEVICE_MANF_CARD(0x021b, 0x0202), conflict with axnet_cs */ | ||
1576 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0300), | 1582 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0300), |
1577 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0307), | 1583 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0307), |
1578 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030a), | 1584 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030a), |
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 6e9f619c491f..963630c65ca9 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c | |||
@@ -49,13 +49,13 @@ int mdiobus_register(struct mii_bus *bus) | |||
49 | int i; | 49 | int i; |
50 | int err = 0; | 50 | int err = 0; |
51 | 51 | ||
52 | mutex_init(&bus->mdio_lock); | ||
53 | |||
54 | if (NULL == bus || NULL == bus->name || | 52 | if (NULL == bus || NULL == bus->name || |
55 | NULL == bus->read || | 53 | NULL == bus->read || |
56 | NULL == bus->write) | 54 | NULL == bus->write) |
57 | return -EINVAL; | 55 | return -EINVAL; |
58 | 56 | ||
57 | mutex_init(&bus->mdio_lock); | ||
58 | |||
59 | if (bus->reset) | 59 | if (bus->reset) |
60 | bus->reset(bus); | 60 | bus->reset(bus); |
61 | 61 | ||
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c index 202fdf356621..20745fd4e973 100644 --- a/drivers/net/sis190.c +++ b/drivers/net/sis190.c | |||
@@ -1633,13 +1633,18 @@ static inline void sis190_init_rxfilter(struct net_device *dev) | |||
1633 | static int __devinit sis190_get_mac_addr(struct pci_dev *pdev, | 1633 | static int __devinit sis190_get_mac_addr(struct pci_dev *pdev, |
1634 | struct net_device *dev) | 1634 | struct net_device *dev) |
1635 | { | 1635 | { |
1636 | u8 from; | 1636 | int rc; |
1637 | |||
1638 | rc = sis190_get_mac_addr_from_eeprom(pdev, dev); | ||
1639 | if (rc < 0) { | ||
1640 | u8 reg; | ||
1637 | 1641 | ||
1638 | pci_read_config_byte(pdev, 0x73, &from); | 1642 | pci_read_config_byte(pdev, 0x73, ®); |
1639 | 1643 | ||
1640 | return (from & 0x00000001) ? | 1644 | if (reg & 0x00000001) |
1641 | sis190_get_mac_addr_from_apc(pdev, dev) : | 1645 | rc = sis190_get_mac_addr_from_apc(pdev, dev); |
1642 | sis190_get_mac_addr_from_eeprom(pdev, dev); | 1646 | } |
1647 | return rc; | ||
1643 | } | 1648 | } |
1644 | 1649 | ||
1645 | static void sis190_set_speed_auto(struct net_device *dev) | 1650 | static void sis190_set_speed_auto(struct net_device *dev) |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 9a6295909e43..54c662690f65 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -572,8 +572,9 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port) | |||
572 | default: | 572 | default: |
573 | /* set Tx LED (LED_TX) to blink mode on Rx OR Tx activity */ | 573 | /* set Tx LED (LED_TX) to blink mode on Rx OR Tx activity */ |
574 | ledctrl |= PHY_M_LED_BLINK_RT(BLINK_84MS) | PHY_M_LEDC_TX_CTRL; | 574 | ledctrl |= PHY_M_LED_BLINK_RT(BLINK_84MS) | PHY_M_LEDC_TX_CTRL; |
575 | |||
575 | /* turn off the Rx LED (LED_RX) */ | 576 | /* turn off the Rx LED (LED_RX) */ |
576 | ledover &= ~PHY_M_LED_MO_RX; | 577 | ledover |= PHY_M_LED_MO_RX(MO_LED_OFF); |
577 | } | 578 | } |
578 | 579 | ||
579 | if (hw->chip_id == CHIP_ID_YUKON_EC_U && | 580 | if (hw->chip_id == CHIP_ID_YUKON_EC_U && |
@@ -602,7 +603,7 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port) | |||
602 | 603 | ||
603 | if (sky2->autoneg == AUTONEG_DISABLE || sky2->speed == SPEED_100) { | 604 | if (sky2->autoneg == AUTONEG_DISABLE || sky2->speed == SPEED_100) { |
604 | /* turn on 100 Mbps LED (LED_LINK100) */ | 605 | /* turn on 100 Mbps LED (LED_LINK100) */ |
605 | ledover |= PHY_M_LED_MO_100; | 606 | ledover |= PHY_M_LED_MO_100(MO_LED_ON); |
606 | } | 607 | } |
607 | 608 | ||
608 | if (ledover) | 609 | if (ledover) |
@@ -3322,82 +3323,80 @@ static void sky2_set_multicast(struct net_device *dev) | |||
3322 | /* Can have one global because blinking is controlled by | 3323 | /* Can have one global because blinking is controlled by |
3323 | * ethtool and that is always under RTNL mutex | 3324 | * ethtool and that is always under RTNL mutex |
3324 | */ | 3325 | */ |
3325 | static void sky2_led(struct sky2_hw *hw, unsigned port, int on) | 3326 | static void sky2_led(struct sky2_port *sky2, enum led_mode mode) |
3326 | { | 3327 | { |
3327 | u16 pg; | 3328 | struct sky2_hw *hw = sky2->hw; |
3329 | unsigned port = sky2->port; | ||
3328 | 3330 | ||
3329 | switch (hw->chip_id) { | 3331 | spin_lock_bh(&sky2->phy_lock); |
3330 | case CHIP_ID_YUKON_XL: | 3332 | if (hw->chip_id == CHIP_ID_YUKON_EC_U || |
3333 | hw->chip_id == CHIP_ID_YUKON_EX || | ||
3334 | hw->chip_id == CHIP_ID_YUKON_SUPR) { | ||
3335 | u16 pg; | ||
3331 | pg = gm_phy_read(hw, port, PHY_MARV_EXT_ADR); | 3336 | pg = gm_phy_read(hw, port, PHY_MARV_EXT_ADR); |
3332 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 3); | 3337 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 3); |
3333 | gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, | ||
3334 | on ? (PHY_M_LEDC_LOS_CTRL(1) | | ||
3335 | PHY_M_LEDC_INIT_CTRL(7) | | ||
3336 | PHY_M_LEDC_STA1_CTRL(7) | | ||
3337 | PHY_M_LEDC_STA0_CTRL(7)) | ||
3338 | : 0); | ||
3339 | 3338 | ||
3340 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, pg); | 3339 | switch (mode) { |
3341 | break; | 3340 | case MO_LED_OFF: |
3341 | gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, | ||
3342 | PHY_M_LEDC_LOS_CTRL(8) | | ||
3343 | PHY_M_LEDC_INIT_CTRL(8) | | ||
3344 | PHY_M_LEDC_STA1_CTRL(8) | | ||
3345 | PHY_M_LEDC_STA0_CTRL(8)); | ||
3346 | break; | ||
3347 | case MO_LED_ON: | ||
3348 | gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, | ||
3349 | PHY_M_LEDC_LOS_CTRL(9) | | ||
3350 | PHY_M_LEDC_INIT_CTRL(9) | | ||
3351 | PHY_M_LEDC_STA1_CTRL(9) | | ||
3352 | PHY_M_LEDC_STA0_CTRL(9)); | ||
3353 | break; | ||
3354 | case MO_LED_BLINK: | ||
3355 | gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, | ||
3356 | PHY_M_LEDC_LOS_CTRL(0xa) | | ||
3357 | PHY_M_LEDC_INIT_CTRL(0xa) | | ||
3358 | PHY_M_LEDC_STA1_CTRL(0xa) | | ||
3359 | PHY_M_LEDC_STA0_CTRL(0xa)); | ||
3360 | break; | ||
3361 | case MO_LED_NORM: | ||
3362 | gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, | ||
3363 | PHY_M_LEDC_LOS_CTRL(1) | | ||
3364 | PHY_M_LEDC_INIT_CTRL(8) | | ||
3365 | PHY_M_LEDC_STA1_CTRL(7) | | ||
3366 | PHY_M_LEDC_STA0_CTRL(7)); | ||
3367 | } | ||
3342 | 3368 | ||
3343 | default: | 3369 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, pg); |
3344 | gm_phy_write(hw, port, PHY_MARV_LED_CTRL, 0); | 3370 | } else |
3345 | gm_phy_write(hw, port, PHY_MARV_LED_OVER, | 3371 | gm_phy_write(hw, port, PHY_MARV_LED_OVER, |
3346 | on ? PHY_M_LED_ALL : 0); | 3372 | PHY_M_LED_MO_DUP(mode) | |
3347 | } | 3373 | PHY_M_LED_MO_10(mode) | |
3374 | PHY_M_LED_MO_100(mode) | | ||
3375 | PHY_M_LED_MO_1000(mode) | | ||
3376 | PHY_M_LED_MO_RX(mode) | | ||
3377 | PHY_M_LED_MO_TX(mode)); | ||
3378 | |||
3379 | spin_unlock_bh(&sky2->phy_lock); | ||
3348 | } | 3380 | } |
3349 | 3381 | ||
3350 | /* blink LED's for finding board */ | 3382 | /* blink LED's for finding board */ |
3351 | static int sky2_phys_id(struct net_device *dev, u32 data) | 3383 | static int sky2_phys_id(struct net_device *dev, u32 data) |
3352 | { | 3384 | { |
3353 | struct sky2_port *sky2 = netdev_priv(dev); | 3385 | struct sky2_port *sky2 = netdev_priv(dev); |
3354 | struct sky2_hw *hw = sky2->hw; | 3386 | unsigned int i; |
3355 | unsigned port = sky2->port; | ||
3356 | u16 ledctrl, ledover = 0; | ||
3357 | long ms; | ||
3358 | int interrupted; | ||
3359 | int onoff = 1; | ||
3360 | 3387 | ||
3361 | if (!data || data > (u32) (MAX_SCHEDULE_TIMEOUT / HZ)) | 3388 | if (data == 0) |
3362 | ms = jiffies_to_msecs(MAX_SCHEDULE_TIMEOUT); | 3389 | data = UINT_MAX; |
3363 | else | ||
3364 | ms = data * 1000; | ||
3365 | |||
3366 | /* save initial values */ | ||
3367 | spin_lock_bh(&sky2->phy_lock); | ||
3368 | if (hw->chip_id == CHIP_ID_YUKON_XL) { | ||
3369 | u16 pg = gm_phy_read(hw, port, PHY_MARV_EXT_ADR); | ||
3370 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 3); | ||
3371 | ledctrl = gm_phy_read(hw, port, PHY_MARV_PHY_CTRL); | ||
3372 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, pg); | ||
3373 | } else { | ||
3374 | ledctrl = gm_phy_read(hw, port, PHY_MARV_LED_CTRL); | ||
3375 | ledover = gm_phy_read(hw, port, PHY_MARV_LED_OVER); | ||
3376 | } | ||
3377 | |||
3378 | interrupted = 0; | ||
3379 | while (!interrupted && ms > 0) { | ||
3380 | sky2_led(hw, port, onoff); | ||
3381 | onoff = !onoff; | ||
3382 | |||
3383 | spin_unlock_bh(&sky2->phy_lock); | ||
3384 | interrupted = msleep_interruptible(250); | ||
3385 | spin_lock_bh(&sky2->phy_lock); | ||
3386 | |||
3387 | ms -= 250; | ||
3388 | } | ||
3389 | 3390 | ||
3390 | /* resume regularly scheduled programming */ | 3391 | for (i = 0; i < data; i++) { |
3391 | if (hw->chip_id == CHIP_ID_YUKON_XL) { | 3392 | sky2_led(sky2, MO_LED_ON); |
3392 | u16 pg = gm_phy_read(hw, port, PHY_MARV_EXT_ADR); | 3393 | if (msleep_interruptible(500)) |
3393 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 3); | 3394 | break; |
3394 | gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, ledctrl); | 3395 | sky2_led(sky2, MO_LED_OFF); |
3395 | gm_phy_write(hw, port, PHY_MARV_EXT_ADR, pg); | 3396 | if (msleep_interruptible(500)) |
3396 | } else { | 3397 | break; |
3397 | gm_phy_write(hw, port, PHY_MARV_LED_CTRL, ledctrl); | ||
3398 | gm_phy_write(hw, port, PHY_MARV_LED_OVER, ledover); | ||
3399 | } | 3398 | } |
3400 | spin_unlock_bh(&sky2->phy_lock); | 3399 | sky2_led(sky2, MO_LED_NORM); |
3401 | 3400 | ||
3402 | return 0; | 3401 | return 0; |
3403 | } | 3402 | } |
diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h index 5ab5c1c7c5aa..7bb3ba9bcbd8 100644 --- a/drivers/net/sky2.h +++ b/drivers/net/sky2.h | |||
@@ -1318,18 +1318,21 @@ enum { | |||
1318 | BLINK_670MS = 4,/* 670 ms */ | 1318 | BLINK_670MS = 4,/* 670 ms */ |
1319 | }; | 1319 | }; |
1320 | 1320 | ||
1321 | /**** PHY_MARV_LED_OVER 16 bit r/w LED control */ | 1321 | /***** PHY_MARV_LED_OVER 16 bit r/w Manual LED Override Reg *****/ |
1322 | enum { | 1322 | #define PHY_M_LED_MO_SGMII(x) ((x)<<14) /* Bit 15..14: SGMII AN Timer */ |
1323 | PHY_M_LED_MO_DUP = 3<<10,/* Bit 11..10: Duplex */ | 1323 | |
1324 | PHY_M_LED_MO_10 = 3<<8, /* Bit 9.. 8: Link 10 */ | 1324 | #define PHY_M_LED_MO_DUP(x) ((x)<<10) /* Bit 11..10: Duplex */ |
1325 | PHY_M_LED_MO_100 = 3<<6, /* Bit 7.. 6: Link 100 */ | 1325 | #define PHY_M_LED_MO_10(x) ((x)<<8) /* Bit 9.. 8: Link 10 */ |
1326 | PHY_M_LED_MO_1000 = 3<<4, /* Bit 5.. 4: Link 1000 */ | 1326 | #define PHY_M_LED_MO_100(x) ((x)<<6) /* Bit 7.. 6: Link 100 */ |
1327 | PHY_M_LED_MO_RX = 3<<2, /* Bit 3.. 2: Rx */ | 1327 | #define PHY_M_LED_MO_1000(x) ((x)<<4) /* Bit 5.. 4: Link 1000 */ |
1328 | PHY_M_LED_MO_TX = 3<<0, /* Bit 1.. 0: Tx */ | 1328 | #define PHY_M_LED_MO_RX(x) ((x)<<2) /* Bit 3.. 2: Rx */ |
1329 | 1329 | #define PHY_M_LED_MO_TX(x) ((x)<<0) /* Bit 1.. 0: Tx */ | |
1330 | PHY_M_LED_ALL = PHY_M_LED_MO_DUP | PHY_M_LED_MO_10 | 1330 | |
1331 | | PHY_M_LED_MO_100 | PHY_M_LED_MO_1000 | 1331 | enum led_mode { |
1332 | | PHY_M_LED_MO_RX, | 1332 | MO_LED_NORM = 0, |
1333 | MO_LED_BLINK = 1, | ||
1334 | MO_LED_OFF = 2, | ||
1335 | MO_LED_ON = 3, | ||
1333 | }; | 1336 | }; |
1334 | 1337 | ||
1335 | /***** PHY_MARV_EXT_CTRL_2 16 bit r/w Ext. PHY Specific Ctrl 2 *****/ | 1338 | /***** PHY_MARV_EXT_CTRL_2 16 bit r/w Ext. PHY Specific Ctrl 2 *****/ |
diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c index 3af5b92b48c8..0166407d7061 100644 --- a/drivers/net/tlan.c +++ b/drivers/net/tlan.c | |||
@@ -1400,7 +1400,7 @@ static void TLan_SetMulticastList( struct net_device *dev ) | |||
1400 | * | 1400 | * |
1401 | **************************************************************/ | 1401 | **************************************************************/ |
1402 | 1402 | ||
1403 | u32 TLan_HandleInvalid( struct net_device *dev, u16 host_int ) | 1403 | static u32 TLan_HandleInvalid( struct net_device *dev, u16 host_int ) |
1404 | { | 1404 | { |
1405 | /* printk( "TLAN: Invalid interrupt on %s.\n", dev->name ); */ | 1405 | /* printk( "TLAN: Invalid interrupt on %s.\n", dev->name ); */ |
1406 | return 0; | 1406 | return 0; |
@@ -1432,7 +1432,7 @@ u32 TLan_HandleInvalid( struct net_device *dev, u16 host_int ) | |||
1432 | * | 1432 | * |
1433 | **************************************************************/ | 1433 | **************************************************************/ |
1434 | 1434 | ||
1435 | u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) | 1435 | static u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) |
1436 | { | 1436 | { |
1437 | TLanPrivateInfo *priv = netdev_priv(dev); | 1437 | TLanPrivateInfo *priv = netdev_priv(dev); |
1438 | int eoc = 0; | 1438 | int eoc = 0; |
@@ -1518,7 +1518,7 @@ u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) | |||
1518 | * | 1518 | * |
1519 | **************************************************************/ | 1519 | **************************************************************/ |
1520 | 1520 | ||
1521 | u32 TLan_HandleStatOverflow( struct net_device *dev, u16 host_int ) | 1521 | static u32 TLan_HandleStatOverflow( struct net_device *dev, u16 host_int ) |
1522 | { | 1522 | { |
1523 | TLan_ReadAndClearStats( dev, TLAN_RECORD ); | 1523 | TLan_ReadAndClearStats( dev, TLAN_RECORD ); |
1524 | 1524 | ||
@@ -1554,7 +1554,7 @@ u32 TLan_HandleStatOverflow( struct net_device *dev, u16 host_int ) | |||
1554 | * | 1554 | * |
1555 | **************************************************************/ | 1555 | **************************************************************/ |
1556 | 1556 | ||
1557 | u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) | 1557 | static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) |
1558 | { | 1558 | { |
1559 | TLanPrivateInfo *priv = netdev_priv(dev); | 1559 | TLanPrivateInfo *priv = netdev_priv(dev); |
1560 | u32 ack = 0; | 1560 | u32 ack = 0; |
@@ -1689,7 +1689,7 @@ u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) | |||
1689 | * | 1689 | * |
1690 | **************************************************************/ | 1690 | **************************************************************/ |
1691 | 1691 | ||
1692 | u32 TLan_HandleDummy( struct net_device *dev, u16 host_int ) | 1692 | static u32 TLan_HandleDummy( struct net_device *dev, u16 host_int ) |
1693 | { | 1693 | { |
1694 | printk( "TLAN: Test interrupt on %s.\n", dev->name ); | 1694 | printk( "TLAN: Test interrupt on %s.\n", dev->name ); |
1695 | return 1; | 1695 | return 1; |
@@ -1719,7 +1719,7 @@ u32 TLan_HandleDummy( struct net_device *dev, u16 host_int ) | |||
1719 | * | 1719 | * |
1720 | **************************************************************/ | 1720 | **************************************************************/ |
1721 | 1721 | ||
1722 | u32 TLan_HandleTxEOC( struct net_device *dev, u16 host_int ) | 1722 | static u32 TLan_HandleTxEOC( struct net_device *dev, u16 host_int ) |
1723 | { | 1723 | { |
1724 | TLanPrivateInfo *priv = netdev_priv(dev); | 1724 | TLanPrivateInfo *priv = netdev_priv(dev); |
1725 | TLanList *head_list; | 1725 | TLanList *head_list; |
@@ -1767,7 +1767,7 @@ u32 TLan_HandleTxEOC( struct net_device *dev, u16 host_int ) | |||
1767 | * | 1767 | * |
1768 | **************************************************************/ | 1768 | **************************************************************/ |
1769 | 1769 | ||
1770 | u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int ) | 1770 | static u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int ) |
1771 | { | 1771 | { |
1772 | TLanPrivateInfo *priv = netdev_priv(dev); | 1772 | TLanPrivateInfo *priv = netdev_priv(dev); |
1773 | u32 ack; | 1773 | u32 ack; |
@@ -1842,7 +1842,7 @@ u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int ) | |||
1842 | * | 1842 | * |
1843 | **************************************************************/ | 1843 | **************************************************************/ |
1844 | 1844 | ||
1845 | u32 TLan_HandleRxEOC( struct net_device *dev, u16 host_int ) | 1845 | static u32 TLan_HandleRxEOC( struct net_device *dev, u16 host_int ) |
1846 | { | 1846 | { |
1847 | TLanPrivateInfo *priv = netdev_priv(dev); | 1847 | TLanPrivateInfo *priv = netdev_priv(dev); |
1848 | dma_addr_t head_list_phys; | 1848 | dma_addr_t head_list_phys; |
@@ -1902,7 +1902,7 @@ u32 TLan_HandleRxEOC( struct net_device *dev, u16 host_int ) | |||
1902 | * | 1902 | * |
1903 | **************************************************************/ | 1903 | **************************************************************/ |
1904 | 1904 | ||
1905 | void TLan_Timer( unsigned long data ) | 1905 | static void TLan_Timer( unsigned long data ) |
1906 | { | 1906 | { |
1907 | struct net_device *dev = (struct net_device *) data; | 1907 | struct net_device *dev = (struct net_device *) data; |
1908 | TLanPrivateInfo *priv = netdev_priv(dev); | 1908 | TLanPrivateInfo *priv = netdev_priv(dev); |
@@ -1983,7 +1983,7 @@ void TLan_Timer( unsigned long data ) | |||
1983 | * | 1983 | * |
1984 | **************************************************************/ | 1984 | **************************************************************/ |
1985 | 1985 | ||
1986 | void TLan_ResetLists( struct net_device *dev ) | 1986 | static void TLan_ResetLists( struct net_device *dev ) |
1987 | { | 1987 | { |
1988 | TLanPrivateInfo *priv = netdev_priv(dev); | 1988 | TLanPrivateInfo *priv = netdev_priv(dev); |
1989 | int i; | 1989 | int i; |
@@ -2043,7 +2043,7 @@ void TLan_ResetLists( struct net_device *dev ) | |||
2043 | } /* TLan_ResetLists */ | 2043 | } /* TLan_ResetLists */ |
2044 | 2044 | ||
2045 | 2045 | ||
2046 | void TLan_FreeLists( struct net_device *dev ) | 2046 | static void TLan_FreeLists( struct net_device *dev ) |
2047 | { | 2047 | { |
2048 | TLanPrivateInfo *priv = netdev_priv(dev); | 2048 | TLanPrivateInfo *priv = netdev_priv(dev); |
2049 | int i; | 2049 | int i; |
@@ -2092,7 +2092,7 @@ void TLan_FreeLists( struct net_device *dev ) | |||
2092 | * | 2092 | * |
2093 | **************************************************************/ | 2093 | **************************************************************/ |
2094 | 2094 | ||
2095 | void TLan_PrintDio( u16 io_base ) | 2095 | static void TLan_PrintDio( u16 io_base ) |
2096 | { | 2096 | { |
2097 | u32 data0, data1; | 2097 | u32 data0, data1; |
2098 | int i; | 2098 | int i; |
@@ -2127,7 +2127,7 @@ void TLan_PrintDio( u16 io_base ) | |||
2127 | * | 2127 | * |
2128 | **************************************************************/ | 2128 | **************************************************************/ |
2129 | 2129 | ||
2130 | void TLan_PrintList( TLanList *list, char *type, int num) | 2130 | static void TLan_PrintList( TLanList *list, char *type, int num) |
2131 | { | 2131 | { |
2132 | int i; | 2132 | int i; |
2133 | 2133 | ||
@@ -2163,7 +2163,7 @@ void TLan_PrintList( TLanList *list, char *type, int num) | |||
2163 | * | 2163 | * |
2164 | **************************************************************/ | 2164 | **************************************************************/ |
2165 | 2165 | ||
2166 | void TLan_ReadAndClearStats( struct net_device *dev, int record ) | 2166 | static void TLan_ReadAndClearStats( struct net_device *dev, int record ) |
2167 | { | 2167 | { |
2168 | TLanPrivateInfo *priv = netdev_priv(dev); | 2168 | TLanPrivateInfo *priv = netdev_priv(dev); |
2169 | u32 tx_good, tx_under; | 2169 | u32 tx_good, tx_under; |
@@ -2238,7 +2238,7 @@ void TLan_ReadAndClearStats( struct net_device *dev, int record ) | |||
2238 | * | 2238 | * |
2239 | **************************************************************/ | 2239 | **************************************************************/ |
2240 | 2240 | ||
2241 | void | 2241 | static void |
2242 | TLan_ResetAdapter( struct net_device *dev ) | 2242 | TLan_ResetAdapter( struct net_device *dev ) |
2243 | { | 2243 | { |
2244 | TLanPrivateInfo *priv = netdev_priv(dev); | 2244 | TLanPrivateInfo *priv = netdev_priv(dev); |
@@ -2324,7 +2324,7 @@ TLan_ResetAdapter( struct net_device *dev ) | |||
2324 | 2324 | ||
2325 | 2325 | ||
2326 | 2326 | ||
2327 | void | 2327 | static void |
2328 | TLan_FinishReset( struct net_device *dev ) | 2328 | TLan_FinishReset( struct net_device *dev ) |
2329 | { | 2329 | { |
2330 | TLanPrivateInfo *priv = netdev_priv(dev); | 2330 | TLanPrivateInfo *priv = netdev_priv(dev); |
@@ -2448,7 +2448,7 @@ TLan_FinishReset( struct net_device *dev ) | |||
2448 | * | 2448 | * |
2449 | **************************************************************/ | 2449 | **************************************************************/ |
2450 | 2450 | ||
2451 | void TLan_SetMac( struct net_device *dev, int areg, char *mac ) | 2451 | static void TLan_SetMac( struct net_device *dev, int areg, char *mac ) |
2452 | { | 2452 | { |
2453 | int i; | 2453 | int i; |
2454 | 2454 | ||
@@ -2490,7 +2490,7 @@ void TLan_SetMac( struct net_device *dev, int areg, char *mac ) | |||
2490 | * | 2490 | * |
2491 | ********************************************************************/ | 2491 | ********************************************************************/ |
2492 | 2492 | ||
2493 | void TLan_PhyPrint( struct net_device *dev ) | 2493 | static void TLan_PhyPrint( struct net_device *dev ) |
2494 | { | 2494 | { |
2495 | TLanPrivateInfo *priv = netdev_priv(dev); | 2495 | TLanPrivateInfo *priv = netdev_priv(dev); |
2496 | u16 i, data0, data1, data2, data3, phy; | 2496 | u16 i, data0, data1, data2, data3, phy; |
@@ -2539,7 +2539,7 @@ void TLan_PhyPrint( struct net_device *dev ) | |||
2539 | * | 2539 | * |
2540 | ********************************************************************/ | 2540 | ********************************************************************/ |
2541 | 2541 | ||
2542 | void TLan_PhyDetect( struct net_device *dev ) | 2542 | static void TLan_PhyDetect( struct net_device *dev ) |
2543 | { | 2543 | { |
2544 | TLanPrivateInfo *priv = netdev_priv(dev); | 2544 | TLanPrivateInfo *priv = netdev_priv(dev); |
2545 | u16 control; | 2545 | u16 control; |
@@ -2586,7 +2586,7 @@ void TLan_PhyDetect( struct net_device *dev ) | |||
2586 | 2586 | ||
2587 | 2587 | ||
2588 | 2588 | ||
2589 | void TLan_PhyPowerDown( struct net_device *dev ) | 2589 | static void TLan_PhyPowerDown( struct net_device *dev ) |
2590 | { | 2590 | { |
2591 | TLanPrivateInfo *priv = netdev_priv(dev); | 2591 | TLanPrivateInfo *priv = netdev_priv(dev); |
2592 | u16 value; | 2592 | u16 value; |
@@ -2611,7 +2611,7 @@ void TLan_PhyPowerDown( struct net_device *dev ) | |||
2611 | 2611 | ||
2612 | 2612 | ||
2613 | 2613 | ||
2614 | void TLan_PhyPowerUp( struct net_device *dev ) | 2614 | static void TLan_PhyPowerUp( struct net_device *dev ) |
2615 | { | 2615 | { |
2616 | TLanPrivateInfo *priv = netdev_priv(dev); | 2616 | TLanPrivateInfo *priv = netdev_priv(dev); |
2617 | u16 value; | 2617 | u16 value; |
@@ -2632,7 +2632,7 @@ void TLan_PhyPowerUp( struct net_device *dev ) | |||
2632 | 2632 | ||
2633 | 2633 | ||
2634 | 2634 | ||
2635 | void TLan_PhyReset( struct net_device *dev ) | 2635 | static void TLan_PhyReset( struct net_device *dev ) |
2636 | { | 2636 | { |
2637 | TLanPrivateInfo *priv = netdev_priv(dev); | 2637 | TLanPrivateInfo *priv = netdev_priv(dev); |
2638 | u16 phy; | 2638 | u16 phy; |
@@ -2660,7 +2660,7 @@ void TLan_PhyReset( struct net_device *dev ) | |||
2660 | 2660 | ||
2661 | 2661 | ||
2662 | 2662 | ||
2663 | void TLan_PhyStartLink( struct net_device *dev ) | 2663 | static void TLan_PhyStartLink( struct net_device *dev ) |
2664 | { | 2664 | { |
2665 | TLanPrivateInfo *priv = netdev_priv(dev); | 2665 | TLanPrivateInfo *priv = netdev_priv(dev); |
2666 | u16 ability; | 2666 | u16 ability; |
@@ -2747,7 +2747,7 @@ void TLan_PhyStartLink( struct net_device *dev ) | |||
2747 | 2747 | ||
2748 | 2748 | ||
2749 | 2749 | ||
2750 | void TLan_PhyFinishAutoNeg( struct net_device *dev ) | 2750 | static void TLan_PhyFinishAutoNeg( struct net_device *dev ) |
2751 | { | 2751 | { |
2752 | TLanPrivateInfo *priv = netdev_priv(dev); | 2752 | TLanPrivateInfo *priv = netdev_priv(dev); |
2753 | u16 an_adv; | 2753 | u16 an_adv; |
@@ -2903,7 +2903,7 @@ void TLan_PhyMonitor( struct net_device *dev ) | |||
2903 | * | 2903 | * |
2904 | **************************************************************/ | 2904 | **************************************************************/ |
2905 | 2905 | ||
2906 | int TLan_MiiReadReg( struct net_device *dev, u16 phy, u16 reg, u16 *val ) | 2906 | static int TLan_MiiReadReg( struct net_device *dev, u16 phy, u16 reg, u16 *val ) |
2907 | { | 2907 | { |
2908 | u8 nack; | 2908 | u8 nack; |
2909 | u16 sio, tmp; | 2909 | u16 sio, tmp; |
@@ -2993,7 +2993,7 @@ int TLan_MiiReadReg( struct net_device *dev, u16 phy, u16 reg, u16 *val ) | |||
2993 | * | 2993 | * |
2994 | **************************************************************/ | 2994 | **************************************************************/ |
2995 | 2995 | ||
2996 | void TLan_MiiSendData( u16 base_port, u32 data, unsigned num_bits ) | 2996 | static void TLan_MiiSendData( u16 base_port, u32 data, unsigned num_bits ) |
2997 | { | 2997 | { |
2998 | u16 sio; | 2998 | u16 sio; |
2999 | u32 i; | 2999 | u32 i; |
@@ -3035,7 +3035,7 @@ void TLan_MiiSendData( u16 base_port, u32 data, unsigned num_bits ) | |||
3035 | * | 3035 | * |
3036 | **************************************************************/ | 3036 | **************************************************************/ |
3037 | 3037 | ||
3038 | void TLan_MiiSync( u16 base_port ) | 3038 | static void TLan_MiiSync( u16 base_port ) |
3039 | { | 3039 | { |
3040 | int i; | 3040 | int i; |
3041 | u16 sio; | 3041 | u16 sio; |
@@ -3074,7 +3074,7 @@ void TLan_MiiSync( u16 base_port ) | |||
3074 | * | 3074 | * |
3075 | **************************************************************/ | 3075 | **************************************************************/ |
3076 | 3076 | ||
3077 | void TLan_MiiWriteReg( struct net_device *dev, u16 phy, u16 reg, u16 val ) | 3077 | static void TLan_MiiWriteReg( struct net_device *dev, u16 phy, u16 reg, u16 val ) |
3078 | { | 3078 | { |
3079 | u16 sio; | 3079 | u16 sio; |
3080 | int minten; | 3080 | int minten; |
@@ -3144,7 +3144,7 @@ void TLan_MiiWriteReg( struct net_device *dev, u16 phy, u16 reg, u16 val ) | |||
3144 | * | 3144 | * |
3145 | **************************************************************/ | 3145 | **************************************************************/ |
3146 | 3146 | ||
3147 | void TLan_EeSendStart( u16 io_base ) | 3147 | static void TLan_EeSendStart( u16 io_base ) |
3148 | { | 3148 | { |
3149 | u16 sio; | 3149 | u16 sio; |
3150 | 3150 | ||
@@ -3184,7 +3184,7 @@ void TLan_EeSendStart( u16 io_base ) | |||
3184 | * | 3184 | * |
3185 | **************************************************************/ | 3185 | **************************************************************/ |
3186 | 3186 | ||
3187 | int TLan_EeSendByte( u16 io_base, u8 data, int stop ) | 3187 | static int TLan_EeSendByte( u16 io_base, u8 data, int stop ) |
3188 | { | 3188 | { |
3189 | int err; | 3189 | int err; |
3190 | u8 place; | 3190 | u8 place; |
@@ -3245,7 +3245,7 @@ int TLan_EeSendByte( u16 io_base, u8 data, int stop ) | |||
3245 | * | 3245 | * |
3246 | **************************************************************/ | 3246 | **************************************************************/ |
3247 | 3247 | ||
3248 | void TLan_EeReceiveByte( u16 io_base, u8 *data, int stop ) | 3248 | static void TLan_EeReceiveByte( u16 io_base, u8 *data, int stop ) |
3249 | { | 3249 | { |
3250 | u8 place; | 3250 | u8 place; |
3251 | u16 sio; | 3251 | u16 sio; |
@@ -3303,7 +3303,7 @@ void TLan_EeReceiveByte( u16 io_base, u8 *data, int stop ) | |||
3303 | * | 3303 | * |
3304 | **************************************************************/ | 3304 | **************************************************************/ |
3305 | 3305 | ||
3306 | int TLan_EeReadByte( struct net_device *dev, u8 ee_addr, u8 *data ) | 3306 | static int TLan_EeReadByte( struct net_device *dev, u8 ee_addr, u8 *data ) |
3307 | { | 3307 | { |
3308 | int err; | 3308 | int err; |
3309 | TLanPrivateInfo *priv = netdev_priv(dev); | 3309 | TLanPrivateInfo *priv = netdev_priv(dev); |
diff --git a/drivers/net/tulip/uli526x.c b/drivers/net/tulip/uli526x.c index a7afeea156bd..a59c1f224aa8 100644 --- a/drivers/net/tulip/uli526x.c +++ b/drivers/net/tulip/uli526x.c | |||
@@ -482,9 +482,11 @@ static void uli526x_init(struct net_device *dev) | |||
482 | struct uli526x_board_info *db = netdev_priv(dev); | 482 | struct uli526x_board_info *db = netdev_priv(dev); |
483 | unsigned long ioaddr = db->ioaddr; | 483 | unsigned long ioaddr = db->ioaddr; |
484 | u8 phy_tmp; | 484 | u8 phy_tmp; |
485 | u8 timeout; | ||
485 | u16 phy_value; | 486 | u16 phy_value; |
486 | u16 phy_reg_reset; | 487 | u16 phy_reg_reset; |
487 | 488 | ||
489 | |||
488 | ULI526X_DBUG(0, "uli526x_init()", 0); | 490 | ULI526X_DBUG(0, "uli526x_init()", 0); |
489 | 491 | ||
490 | /* Reset M526x MAC controller */ | 492 | /* Reset M526x MAC controller */ |
@@ -509,11 +511,19 @@ static void uli526x_init(struct net_device *dev) | |||
509 | /* Parser SROM and media mode */ | 511 | /* Parser SROM and media mode */ |
510 | db->media_mode = uli526x_media_mode; | 512 | db->media_mode = uli526x_media_mode; |
511 | 513 | ||
512 | /* Phyxcer capability setting */ | 514 | /* phyxcer capability setting */ |
513 | phy_reg_reset = phy_read(db->ioaddr, db->phy_addr, 0, db->chip_id); | 515 | phy_reg_reset = phy_read(db->ioaddr, db->phy_addr, 0, db->chip_id); |
514 | phy_reg_reset = (phy_reg_reset | 0x8000); | 516 | phy_reg_reset = (phy_reg_reset | 0x8000); |
515 | phy_write(db->ioaddr, db->phy_addr, 0, phy_reg_reset, db->chip_id); | 517 | phy_write(db->ioaddr, db->phy_addr, 0, phy_reg_reset, db->chip_id); |
518 | |||
519 | /* See IEEE 802.3-2002.pdf (Section 2, Chapter "22.2.4 Management | ||
520 | * functions") or phy data sheet for details on phy reset | ||
521 | */ | ||
516 | udelay(500); | 522 | udelay(500); |
523 | timeout = 10; | ||
524 | while (timeout-- && | ||
525 | phy_read(db->ioaddr, db->phy_addr, 0, db->chip_id) & 0x8000) | ||
526 | udelay(100); | ||
517 | 527 | ||
518 | /* Process Phyxcer Media Mode */ | 528 | /* Process Phyxcer Media Mode */ |
519 | uli526x_set_phyxcer(db); | 529 | uli526x_set_phyxcer(db); |
diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c index 7c851b1e6daa..8c9d6ae2bb31 100644 --- a/drivers/net/via-rhine.c +++ b/drivers/net/via-rhine.c | |||
@@ -1893,7 +1893,7 @@ static void rhine_shutdown (struct pci_dev *pdev) | |||
1893 | 1893 | ||
1894 | /* Make sure we use pattern 0, 1 and not 4, 5 */ | 1894 | /* Make sure we use pattern 0, 1 and not 4, 5 */ |
1895 | if (rp->quirks & rq6patterns) | 1895 | if (rp->quirks & rq6patterns) |
1896 | iowrite8(0x04, ioaddr + 0xA7); | 1896 | iowrite8(0x04, ioaddr + WOLcgClr); |
1897 | 1897 | ||
1898 | if (rp->wolopts & WAKE_MAGIC) { | 1898 | if (rp->wolopts & WAKE_MAGIC) { |
1899 | iowrite8(WOLmagic, ioaddr + WOLcrSet); | 1899 | iowrite8(WOLmagic, ioaddr + WOLcrSet); |
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index fdc23678117b..19fd4cb0ddf8 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -361,6 +361,7 @@ static int virtnet_probe(struct virtio_device *vdev) | |||
361 | netif_napi_add(dev, &vi->napi, virtnet_poll, napi_weight); | 361 | netif_napi_add(dev, &vi->napi, virtnet_poll, napi_weight); |
362 | vi->dev = dev; | 362 | vi->dev = dev; |
363 | vi->vdev = vdev; | 363 | vi->vdev = vdev; |
364 | vdev->priv = vi; | ||
364 | 365 | ||
365 | /* We expect two virtqueues, receive then send. */ | 366 | /* We expect two virtqueues, receive then send. */ |
366 | vi->rvq = vdev->config->find_vq(vdev, 0, skb_recv_done); | 367 | vi->rvq = vdev->config->find_vq(vdev, 0, skb_recv_done); |
@@ -395,7 +396,6 @@ static int virtnet_probe(struct virtio_device *vdev) | |||
395 | } | 396 | } |
396 | 397 | ||
397 | pr_debug("virtnet: registered device %s\n", dev->name); | 398 | pr_debug("virtnet: registered device %s\n", dev->name); |
398 | vdev->priv = vi; | ||
399 | return 0; | 399 | return 0; |
400 | 400 | ||
401 | unregister: | 401 | unregister: |
diff --git a/drivers/s390/net/claw.c b/drivers/s390/net/claw.c index c3076217871e..d8a5c229c5a7 100644 --- a/drivers/s390/net/claw.c +++ b/drivers/s390/net/claw.c | |||
@@ -1851,8 +1851,7 @@ claw_hw_tx(struct sk_buff *skb, struct net_device *dev, long linkid) | |||
1851 | } | 1851 | } |
1852 | } | 1852 | } |
1853 | /* See how many write buffers are required to hold this data */ | 1853 | /* See how many write buffers are required to hold this data */ |
1854 | numBuffers= ( skb->len + privptr->p_env->write_size - 1) / | 1854 | numBuffers = DIV_ROUND_UP(skb->len, privptr->p_env->write_size); |
1855 | ( privptr->p_env->write_size); | ||
1856 | 1855 | ||
1857 | /* If that number of buffers isn't available, give up for now */ | 1856 | /* If that number of buffers isn't available, give up for now */ |
1858 | if (privptr->write_free_count < numBuffers || | 1857 | if (privptr->write_free_count < numBuffers || |
@@ -2114,8 +2113,7 @@ init_ccw_bk(struct net_device *dev) | |||
2114 | */ | 2113 | */ |
2115 | ccw_blocks_perpage= PAGE_SIZE / CCWBK_SIZE; | 2114 | ccw_blocks_perpage= PAGE_SIZE / CCWBK_SIZE; |
2116 | ccw_pages_required= | 2115 | ccw_pages_required= |
2117 | (ccw_blocks_required+ccw_blocks_perpage -1) / | 2116 | DIV_ROUND_UP(ccw_blocks_required, ccw_blocks_perpage); |
2118 | ccw_blocks_perpage; | ||
2119 | 2117 | ||
2120 | #ifdef DEBUGMSG | 2118 | #ifdef DEBUGMSG |
2121 | printk(KERN_INFO "%s: %s() > ccw_blocks_perpage=%d\n", | 2119 | printk(KERN_INFO "%s: %s() > ccw_blocks_perpage=%d\n", |
@@ -2131,30 +2129,29 @@ init_ccw_bk(struct net_device *dev) | |||
2131 | * provide good performance. With packing buffers support 32k | 2129 | * provide good performance. With packing buffers support 32k |
2132 | * buffers are used. | 2130 | * buffers are used. |
2133 | */ | 2131 | */ |
2134 | if (privptr->p_env->read_size < PAGE_SIZE) { | 2132 | if (privptr->p_env->read_size < PAGE_SIZE) { |
2135 | claw_reads_perpage= PAGE_SIZE / privptr->p_env->read_size; | 2133 | claw_reads_perpage = PAGE_SIZE / privptr->p_env->read_size; |
2136 | claw_read_pages= (privptr->p_env->read_buffers + | 2134 | claw_read_pages = DIV_ROUND_UP(privptr->p_env->read_buffers, |
2137 | claw_reads_perpage -1) / claw_reads_perpage; | 2135 | claw_reads_perpage); |
2138 | } | 2136 | } |
2139 | else { /* > or equal */ | 2137 | else { /* > or equal */ |
2140 | privptr->p_buff_pages_perread= | 2138 | privptr->p_buff_pages_perread = |
2141 | (privptr->p_env->read_size + PAGE_SIZE - 1) / PAGE_SIZE; | 2139 | DIV_ROUND_UP(privptr->p_env->read_size, PAGE_SIZE); |
2142 | claw_read_pages= | 2140 | claw_read_pages = privptr->p_env->read_buffers * |
2143 | privptr->p_env->read_buffers * privptr->p_buff_pages_perread; | 2141 | privptr->p_buff_pages_perread; |
2144 | } | 2142 | } |
2145 | if (privptr->p_env->write_size < PAGE_SIZE) { | 2143 | if (privptr->p_env->write_size < PAGE_SIZE) { |
2146 | claw_writes_perpage= | 2144 | claw_writes_perpage = |
2147 | PAGE_SIZE / privptr->p_env->write_size; | 2145 | PAGE_SIZE / privptr->p_env->write_size; |
2148 | claw_write_pages= | 2146 | claw_write_pages = DIV_ROUND_UP(privptr->p_env->write_buffers, |
2149 | (privptr->p_env->write_buffers + claw_writes_perpage -1) / | 2147 | claw_writes_perpage); |
2150 | claw_writes_perpage; | ||
2151 | 2148 | ||
2152 | } | 2149 | } |
2153 | else { /* > or equal */ | 2150 | else { /* > or equal */ |
2154 | privptr->p_buff_pages_perwrite= | 2151 | privptr->p_buff_pages_perwrite = |
2155 | (privptr->p_env->read_size + PAGE_SIZE - 1) / PAGE_SIZE; | 2152 | DIV_ROUND_UP(privptr->p_env->read_size, PAGE_SIZE); |
2156 | claw_write_pages= | 2153 | claw_write_pages = privptr->p_env->write_buffers * |
2157 | privptr->p_env->write_buffers * privptr->p_buff_pages_perwrite; | 2154 | privptr->p_buff_pages_perwrite; |
2158 | } | 2155 | } |
2159 | #ifdef DEBUGMSG | 2156 | #ifdef DEBUGMSG |
2160 | if (privptr->p_env->read_size < PAGE_SIZE) { | 2157 | if (privptr->p_env->read_size < PAGE_SIZE) { |