aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/mips/Kconfig2
-rw-r--r--arch/mips/configs/rbhma4500_defconfig31
-rw-r--r--arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c19
-rw-r--r--arch/mips/tx4938/toshiba_rbtx4938/setup.c20
-rw-r--r--arch/powerpc/platforms/pasemi/pci.c13
-rw-r--r--arch/powerpc/platforms/pasemi/setup.c1
-rw-r--r--drivers/net/Kconfig3
-rw-r--r--drivers/net/arm/at91_ether.c49
-rw-r--r--drivers/net/arm/at91_ether.h49
-rw-r--r--drivers/net/atl1/atl1_ethtool.c19
-rw-r--r--drivers/net/atl1/atl1_hw.c44
-rw-r--r--drivers/net/atl1/atl1_main.c83
-rw-r--r--drivers/net/atl1/atl1_param.c32
-rw-r--r--drivers/net/dm9000.c15
-rw-r--r--drivers/net/ehea/ehea_main.c6
-rw-r--r--drivers/net/myri10ge/myri10ge.c261
-rw-r--r--drivers/net/myri10ge/myri10ge_mcp.h20
-rw-r--r--drivers/net/natsemi.c70
-rw-r--r--drivers/net/ne.c123
-rw-r--r--drivers/net/pasemi_mac.c404
-rw-r--r--drivers/net/pasemi_mac.h23
-rw-r--r--drivers/net/pcmcia/xirc2ps_cs.c14
-rw-r--r--drivers/net/skge.c9
-rw-r--r--drivers/net/sky2.c17
-rw-r--r--drivers/net/smc91x.h34
-rw-r--r--drivers/net/tc35815.c1
-rw-r--r--drivers/net/wireless/Kconfig2
-rw-r--r--drivers/s390/cio/qdio.c37
-rw-r--r--drivers/s390/cio/qdio.h4
-rw-r--r--drivers/s390/net/netiucv.c5
-rw-r--r--drivers/s390/net/qeth_eddp.c4
-rw-r--r--drivers/s390/net/qeth_eddp.h3
-rw-r--r--drivers/s390/net/qeth_main.c45
-rw-r--r--drivers/s390/net/qeth_mpc.c101
-rw-r--r--drivers/s390/net/qeth_mpc.h219
-rw-r--r--drivers/s390/net/qeth_sys.c2
-rw-r--r--include/asm-s390/qdio.h1
37 files changed, 1228 insertions, 557 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 7441a2cf523e..b7cb048bc771 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -784,7 +784,6 @@ config TOSHIBA_RBTX4927
784 select HAS_TXX9_SERIAL 784 select HAS_TXX9_SERIAL
785 select HW_HAS_PCI 785 select HW_HAS_PCI
786 select I8259 786 select I8259
787 select ISA
788 select SWAP_IO_SPACE 787 select SWAP_IO_SPACE
789 select SYS_HAS_CPU_TX49XX 788 select SYS_HAS_CPU_TX49XX
790 select SYS_SUPPORTS_32BIT_KERNEL 789 select SYS_SUPPORTS_32BIT_KERNEL
@@ -806,7 +805,6 @@ config TOSHIBA_RBTX4938
806 select HAS_TXX9_SERIAL 805 select HAS_TXX9_SERIAL
807 select HW_HAS_PCI 806 select HW_HAS_PCI
808 select I8259 807 select I8259
809 select ISA
810 select SWAP_IO_SPACE 808 select SWAP_IO_SPACE
811 select SYS_HAS_CPU_TX49XX 809 select SYS_HAS_CPU_TX49XX
812 select SYS_SUPPORTS_32BIT_KERNEL 810 select SYS_SUPPORTS_32BIT_KERNEL
diff --git a/arch/mips/configs/rbhma4500_defconfig b/arch/mips/configs/rbhma4500_defconfig
index 29e0df9f4be0..7d0f2174614e 100644
--- a/arch/mips/configs/rbhma4500_defconfig
+++ b/arch/mips/configs/rbhma4500_defconfig
@@ -245,7 +245,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
245# 245#
246CONFIG_HW_HAS_PCI=y 246CONFIG_HW_HAS_PCI=y
247CONFIG_PCI=y 247CONFIG_PCI=y
248CONFIG_ISA=y
249CONFIG_MMU=y 248CONFIG_MMU=y
250 249
251# 250#
@@ -573,7 +572,6 @@ CONFIG_MTD_CFI_UTIL=y
573# 572#
574# Plug and Play support 573# Plug and Play support
575# 574#
576# CONFIG_PNP is not set
577# CONFIG_PNPACPI is not set 575# CONFIG_PNPACPI is not set
578 576
579# 577#
@@ -658,7 +656,6 @@ CONFIG_BLK_DEV_IT8213=m
658# CONFIG_BLK_DEV_VIA82CXXX is not set 656# CONFIG_BLK_DEV_VIA82CXXX is not set
659CONFIG_BLK_DEV_TC86C001=m 657CONFIG_BLK_DEV_TC86C001=m
660# CONFIG_IDE_ARM is not set 658# CONFIG_IDE_ARM is not set
661# CONFIG_IDE_CHIPSETS is not set
662CONFIG_BLK_DEV_IDEDMA=y 659CONFIG_BLK_DEV_IDEDMA=y
663# CONFIG_IDEDMA_IVB is not set 660# CONFIG_IDEDMA_IVB is not set
664# CONFIG_IDEDMA_AUTO is not set 661# CONFIG_IDEDMA_AUTO is not set
@@ -677,11 +674,6 @@ CONFIG_RAID_ATTRS=m
677# CONFIG_ATA is not set 674# CONFIG_ATA is not set
678 675
679# 676#
680# Old CD-ROM drivers (not SCSI, not IDE)
681#
682# CONFIG_CD_NO_IDESCSI is not set
683
684#
685# Multi-device support (RAID and LVM) 677# Multi-device support (RAID and LVM)
686# 678#
687# CONFIG_MD is not set 679# CONFIG_MD is not set
@@ -742,37 +734,20 @@ CONFIG_NET_ETHERNET=y
742# CONFIG_SUNGEM is not set 734# CONFIG_SUNGEM is not set
743# CONFIG_CASSINI is not set 735# CONFIG_CASSINI is not set
744# CONFIG_NET_VENDOR_3COM is not set 736# CONFIG_NET_VENDOR_3COM is not set
745# CONFIG_NET_VENDOR_SMC is not set
746# CONFIG_DM9000 is not set 737# CONFIG_DM9000 is not set
747# CONFIG_NET_VENDOR_RACAL is not set
748 738
749# 739#
750# Tulip family network device support 740# Tulip family network device support
751# 741#
752# CONFIG_NET_TULIP is not set 742# CONFIG_NET_TULIP is not set
753# CONFIG_AT1700 is not set
754# CONFIG_DEPCA is not set
755# CONFIG_HP100 is not set 743# CONFIG_HP100 is not set
756CONFIG_NET_ISA=y
757# CONFIG_E2100 is not set
758# CONFIG_EWRK3 is not set
759# CONFIG_EEXPRESS is not set
760# CONFIG_EEXPRESS_PRO is not set
761# CONFIG_HPLAN_PLUS is not set
762# CONFIG_HPLAN is not set
763# CONFIG_LP486E is not set
764# CONFIG_ETH16I is not set
765CONFIG_NE2000=y 744CONFIG_NE2000=y
766# CONFIG_SEEQ8005 is not set
767CONFIG_NET_PCI=y 745CONFIG_NET_PCI=y
768# CONFIG_PCNET32 is not set 746# CONFIG_PCNET32 is not set
769# CONFIG_AMD8111_ETH is not set 747# CONFIG_AMD8111_ETH is not set
770# CONFIG_ADAPTEC_STARFIRE is not set 748# CONFIG_ADAPTEC_STARFIRE is not set
771# CONFIG_AC3200 is not set
772# CONFIG_APRICOT is not set
773# CONFIG_B44 is not set 749# CONFIG_B44 is not set
774# CONFIG_FORCEDETH is not set 750# CONFIG_FORCEDETH is not set
775# CONFIG_CS89x0 is not set
776# CONFIG_DGRS is not set 751# CONFIG_DGRS is not set
777# CONFIG_EEPRO100 is not set 752# CONFIG_EEPRO100 is not set
778# CONFIG_E100 is not set 753# CONFIG_E100 is not set
@@ -833,8 +808,6 @@ CONFIG_NET_RADIO=y
833# Obsolete Wireless cards support (pre-802.11) 808# Obsolete Wireless cards support (pre-802.11)
834# 809#
835# CONFIG_STRIP is not set 810# CONFIG_STRIP is not set
836# CONFIG_ARLAN is not set
837# CONFIG_WAVELAN is not set
838 811
839# 812#
840# Wireless 802.11b ISA/PCI cards support 813# Wireless 802.11b ISA/PCI cards support
@@ -920,9 +893,6 @@ CONFIG_KEYBOARD_ATKBD=y
920CONFIG_INPUT_MOUSE=y 893CONFIG_INPUT_MOUSE=y
921CONFIG_MOUSE_PS2=y 894CONFIG_MOUSE_PS2=y
922# CONFIG_MOUSE_SERIAL is not set 895# CONFIG_MOUSE_SERIAL is not set
923# CONFIG_MOUSE_INPORT is not set
924# CONFIG_MOUSE_LOGIBM is not set
925# CONFIG_MOUSE_PC110PAD is not set
926# CONFIG_MOUSE_VSXXXAA is not set 896# CONFIG_MOUSE_VSXXXAA is not set
927# CONFIG_INPUT_JOYSTICK is not set 897# CONFIG_INPUT_JOYSTICK is not set
928# CONFIG_INPUT_TOUCHSCREEN is not set 898# CONFIG_INPUT_TOUCHSCREEN is not set
@@ -1072,7 +1042,6 @@ CONFIG_FB_ATY_CT=y
1072# 1042#
1073CONFIG_VGA_CONSOLE=y 1043CONFIG_VGA_CONSOLE=y
1074# CONFIG_VGACON_SOFT_SCROLLBACK is not set 1044# CONFIG_VGACON_SOFT_SCROLLBACK is not set
1075# CONFIG_MDA_CONSOLE is not set
1076CONFIG_DUMMY_CONSOLE=y 1045CONFIG_DUMMY_CONSOLE=y
1077# CONFIG_FRAMEBUFFER_CONSOLE is not set 1046# CONFIG_FRAMEBUFFER_CONSOLE is not set
1078 1047
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
index 0f7576dfd141..a0c11efeaeeb 100644
--- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
+++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
@@ -1049,3 +1049,22 @@ static int __init toshiba_rbtx4927_rtc_init(void)
1049 return IS_ERR(dev) ? PTR_ERR(dev) : 0; 1049 return IS_ERR(dev) ? PTR_ERR(dev) : 0;
1050} 1050}
1051device_initcall(toshiba_rbtx4927_rtc_init); 1051device_initcall(toshiba_rbtx4927_rtc_init);
1052
1053static int __init rbtx4927_ne_init(void)
1054{
1055 static struct resource __initdata res[] = {
1056 {
1057 .start = RBTX4927_RTL_8019_BASE,
1058 .end = RBTX4927_RTL_8019_BASE + 0x20 - 1,
1059 .flags = IORESOURCE_IO,
1060 }, {
1061 .start = RBTX4927_RTL_8019_IRQ,
1062 .flags = IORESOURCE_IRQ,
1063 }
1064 };
1065 struct platform_device *dev =
1066 platform_device_register_simple("ne", -1,
1067 res, ARRAY_SIZE(res));
1068 return IS_ERR(dev) ? PTR_ERR(dev) : 0;
1069}
1070device_initcall(rbtx4927_ne_init);
diff --git a/arch/mips/tx4938/toshiba_rbtx4938/setup.c b/arch/mips/tx4938/toshiba_rbtx4938/setup.c
index 66163ba452c8..f5d1ce739fcc 100644
--- a/arch/mips/tx4938/toshiba_rbtx4938/setup.c
+++ b/arch/mips/tx4938/toshiba_rbtx4938/setup.c
@@ -20,6 +20,7 @@
20#include <linux/console.h> 20#include <linux/console.h>
21#include <linux/pci.h> 21#include <linux/pci.h>
22#include <linux/pm.h> 22#include <linux/pm.h>
23#include <linux/platform_device.h>
23 24
24#include <asm/wbflush.h> 25#include <asm/wbflush.h>
25#include <asm/reboot.h> 26#include <asm/reboot.h>
@@ -1037,3 +1038,22 @@ static int __init tx4938_spi_proc_setup(void)
1037 1038
1038__initcall(tx4938_spi_proc_setup); 1039__initcall(tx4938_spi_proc_setup);
1039#endif 1040#endif
1041
1042static int __init rbtx4938_ne_init(void)
1043{
1044 struct resource res[] = {
1045 {
1046 .start = RBTX4938_RTL_8019_BASE,
1047 .end = RBTX4938_RTL_8019_BASE + 0x20 - 1,
1048 .flags = IORESOURCE_IO,
1049 }, {
1050 .start = RBTX4938_RTL_8019_IRQ,
1051 .flags = IORESOURCE_IRQ,
1052 }
1053 };
1054 struct platform_device *dev =
1055 platform_device_register_simple("ne", -1,
1056 res, ARRAY_SIZE(res));
1057 return IS_ERR(dev) ? PTR_ERR(dev) : 0;
1058}
1059device_initcall(rbtx4938_ne_init);
diff --git a/arch/powerpc/platforms/pasemi/pci.c b/arch/powerpc/platforms/pasemi/pci.c
index 056243da360b..bbc6dfcfaa91 100644
--- a/arch/powerpc/platforms/pasemi/pci.c
+++ b/arch/powerpc/platforms/pasemi/pci.c
@@ -173,19 +173,6 @@ static void __init pas_fixup_phb_resources(void)
173} 173}
174 174
175 175
176void __devinit pas_pci_irq_fixup(struct pci_dev *dev)
177{
178 /* DMA is special, 84 interrupts (128 -> 211), all but 128
179 * need to be mapped by hand here.
180 */
181 if (dev->vendor == 0x1959 && dev->device == 0xa007) {
182 int i;
183 for (i = 129; i < 212; i++)
184 irq_create_mapping(NULL, i);
185 }
186}
187
188
189void __init pas_pci_init(void) 176void __init pas_pci_init(void)
190{ 177{
191 struct device_node *np, *root; 178 struct device_node *np, *root;
diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c
index 38f107b3c521..c5a3f61f8d85 100644
--- a/arch/powerpc/platforms/pasemi/setup.c
+++ b/arch/powerpc/platforms/pasemi/setup.c
@@ -251,5 +251,4 @@ define_machine(pas) {
251 .calibrate_decr = generic_calibrate_decr, 251 .calibrate_decr = generic_calibrate_decr,
252 .progress = pas_progress, 252 .progress = pas_progress,
253 .machine_check_exception = pas_machine_check_handler, 253 .machine_check_exception = pas_machine_check_handler,
254 .pci_irq_fixup = pas_pci_irq_fixup,
255}; 254};
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 279ec625cec4..b86ccd2ecd5b 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -1104,7 +1104,7 @@ config ETH16I
1104 1104
1105config NE2000 1105config NE2000
1106 tristate "NE2000/NE1000 support" 1106 tristate "NE2000/NE1000 support"
1107 depends on NET_ISA || (Q40 && m) || M32R 1107 depends on NET_ISA || (Q40 && m) || M32R || TOSHIBA_RBTX4927 || TOSHIBA_RBTX4938
1108 select CRC32 1108 select CRC32
1109 ---help--- 1109 ---help---
1110 If you have a network (Ethernet) card of this type, say Y and read 1110 If you have a network (Ethernet) card of this type, say Y and read
@@ -2488,6 +2488,7 @@ config NETXEN_NIC
2488config PASEMI_MAC 2488config PASEMI_MAC
2489 tristate "PA Semi 1/10Gbit MAC" 2489 tristate "PA Semi 1/10Gbit MAC"
2490 depends on PPC64 && PCI 2490 depends on PPC64 && PCI
2491 select PHYLIB
2491 help 2492 help
2492 This driver supports the on-chip 1/10Gbit Ethernet controller on 2493 This driver supports the on-chip 1/10Gbit Ethernet controller on
2493 PA Semi's PWRficient line of chips. 2494 PA Semi's PWRficient line of chips.
diff --git a/drivers/net/arm/at91_ether.c b/drivers/net/arm/at91_ether.c
index 152fa7a042b8..ef2cc80256a3 100644
--- a/drivers/net/arm/at91_ether.c
+++ b/drivers/net/arm/at91_ether.c
@@ -225,6 +225,16 @@ static irqreturn_t at91ether_phy_interrupt(int irq, void *dev_id)
225 if (!(phy & ((1 << 2) | 1))) 225 if (!(phy & ((1 << 2) | 1)))
226 goto done; 226 goto done;
227 } 227 }
228 else if (lp->phy_type == MII_T78Q21x3_ID) { /* ack interrupt in Teridian PHY */
229 read_phy(lp->phy_address, MII_T78Q21INT_REG, &phy);
230 if (!(phy & ((1 << 2) | 1)))
231 goto done;
232 }
233 else if (lp->phy_type == MII_DP83848_ID) {
234 read_phy(lp->phy_address, MII_DPPHYSTS_REG, &phy); /* ack interrupt in DP83848 PHY */
235 if (!(phy & (1 << 7)))
236 goto done;
237 }
228 238
229 update_linkspeed(dev, 0); 239 update_linkspeed(dev, 0);
230 240
@@ -280,6 +290,19 @@ static void enable_phyirq(struct net_device *dev)
280 dsintr = (1 << 10) | ( 1 << 8); 290 dsintr = (1 << 10) | ( 1 << 8);
281 write_phy(lp->phy_address, MII_TPISTATUS, dsintr); 291 write_phy(lp->phy_address, MII_TPISTATUS, dsintr);
282 } 292 }
293 else if (lp->phy_type == MII_T78Q21x3_ID) { /* for Teridian PHY */
294 read_phy(lp->phy_address, MII_T78Q21INT_REG, &dsintr);
295 dsintr = dsintr | 0x500; /* set bits 8, 10 */
296 write_phy(lp->phy_address, MII_T78Q21INT_REG, dsintr);
297 }
298 else if (lp->phy_type == MII_DP83848_ID) { /* National Semiconductor DP83848 PHY */
299 read_phy(lp->phy_address, MII_DPMISR_REG, &dsintr);
300 dsintr = dsintr | 0x3c; /* set bits 2..5 */
301 write_phy(lp->phy_address, MII_DPMISR_REG, dsintr);
302 read_phy(lp->phy_address, MII_DPMICR_REG, &dsintr);
303 dsintr = dsintr | 0x3; /* set bits 0,1 */
304 write_phy(lp->phy_address, MII_DPMICR_REG, dsintr);
305 }
283 306
284 disable_mdi(); 307 disable_mdi();
285 spin_unlock_irq(&lp->lock); 308 spin_unlock_irq(&lp->lock);
@@ -323,6 +346,19 @@ static void disable_phyirq(struct net_device *dev)
323 dsintr = ~((1 << 10) | (1 << 8)); 346 dsintr = ~((1 << 10) | (1 << 8));
324 write_phy(lp->phy_address, MII_TPISTATUS, dsintr); 347 write_phy(lp->phy_address, MII_TPISTATUS, dsintr);
325 } 348 }
349 else if (lp->phy_type == MII_T78Q21x3_ID) { /* for Teridian PHY */
350 read_phy(lp->phy_address, MII_T78Q21INT_REG, &dsintr);
351 dsintr = dsintr & ~0x500; /* clear bits 8, 10 */
352 write_phy(lp->phy_address, MII_T78Q21INT_REG, dsintr);
353 }
354 else if (lp->phy_type == MII_DP83848_ID) { /* National Semiconductor DP83848 PHY */
355 read_phy(lp->phy_address, MII_DPMICR_REG, &dsintr);
356 dsintr = dsintr & ~0x3; /* clear bits 0, 1 */
357 write_phy(lp->phy_address, MII_DPMICR_REG, dsintr);
358 read_phy(lp->phy_address, MII_DPMISR_REG, &dsintr);
359 dsintr = dsintr & ~0x3c; /* clear bits 2..5 */
360 write_phy(lp->phy_address, MII_DPMISR_REG, dsintr);
361 }
326 362
327 disable_mdi(); 363 disable_mdi();
328 spin_unlock_irq(&lp->lock); 364 spin_unlock_irq(&lp->lock);
@@ -535,8 +571,8 @@ static void at91ether_sethashtable(struct net_device *dev)
535 mc_filter[bitnr >> 5] |= 1 << (bitnr & 31); 571 mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);
536 } 572 }
537 573
538 at91_emac_write(AT91_EMAC_HSH, mc_filter[0]); 574 at91_emac_write(AT91_EMAC_HSL, mc_filter[0]);
539 at91_emac_write(AT91_EMAC_HSL, mc_filter[1]); 575 at91_emac_write(AT91_EMAC_HSH, mc_filter[1]);
540} 576}
541 577
542/* 578/*
@@ -1062,10 +1098,16 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
1062 printk(KERN_INFO "%s: Broadcom BCM5221 PHY\n", dev->name); 1098 printk(KERN_INFO "%s: Broadcom BCM5221 PHY\n", dev->name);
1063 else if (phy_type == MII_DP83847_ID) 1099 else if (phy_type == MII_DP83847_ID)
1064 printk(KERN_INFO "%s: National Semiconductor DP83847 PHY\n", dev->name); 1100 printk(KERN_INFO "%s: National Semiconductor DP83847 PHY\n", dev->name);
1101 else if (phy_type == MII_DP83848_ID)
1102 printk(KERN_INFO "%s: National Semiconductor DP83848 PHY\n", dev->name);
1065 else if (phy_type == MII_AC101L_ID) 1103 else if (phy_type == MII_AC101L_ID)
1066 printk(KERN_INFO "%s: Altima AC101L PHY\n", dev->name); 1104 printk(KERN_INFO "%s: Altima AC101L PHY\n", dev->name);
1067 else if (phy_type == MII_KS8721_ID) 1105 else if (phy_type == MII_KS8721_ID)
1068 printk(KERN_INFO "%s: Micrel KS8721 PHY\n", dev->name); 1106 printk(KERN_INFO "%s: Micrel KS8721 PHY\n", dev->name);
1107 else if (phy_type == MII_T78Q21x3_ID)
1108 printk(KERN_INFO "%s: Teridian 78Q21x3 PHY\n", dev->name);
1109 else if (phy_type == MII_LAN83C185_ID)
1110 printk(KERN_INFO "%s: SMSC LAN83C185 PHY\n", dev->name);
1069 1111
1070 return 0; 1112 return 0;
1071} 1113}
@@ -1103,8 +1145,11 @@ static int __init at91ether_probe(struct platform_device *pdev)
1103 case MII_RTL8201_ID: /* Realtek RTL8201: PHY_ID1 = 0, PHY_ID2 = 0x8201 */ 1145 case MII_RTL8201_ID: /* Realtek RTL8201: PHY_ID1 = 0, PHY_ID2 = 0x8201 */
1104 case MII_BCM5221_ID: /* Broadcom BCM5221: PHY_ID1 = 0x40, PHY_ID2 = 0x61e0 */ 1146 case MII_BCM5221_ID: /* Broadcom BCM5221: PHY_ID1 = 0x40, PHY_ID2 = 0x61e0 */
1105 case MII_DP83847_ID: /* National Semiconductor DP83847: */ 1147 case MII_DP83847_ID: /* National Semiconductor DP83847: */
1148 case MII_DP83848_ID: /* National Semiconductor DP83848: */
1106 case MII_AC101L_ID: /* Altima AC101L: PHY_ID1 = 0x22, PHY_ID2 = 0x5520 */ 1149 case MII_AC101L_ID: /* Altima AC101L: PHY_ID1 = 0x22, PHY_ID2 = 0x5520 */
1107 case MII_KS8721_ID: /* Micrel KS8721: PHY_ID1 = 0x22, PHY_ID2 = 0x1610 */ 1150 case MII_KS8721_ID: /* Micrel KS8721: PHY_ID1 = 0x22, PHY_ID2 = 0x1610 */
1151 case MII_T78Q21x3_ID: /* Teridian 78Q21x3: PHY_ID1 = 0x0E, PHY_ID2 = 7237 */
1152 case MII_LAN83C185_ID: /* SMSC LAN83C185: PHY_ID1 = 0x0007, PHY_ID2 = 0xC0A1 */
1108 detected = at91ether_setup(phy_id, phy_address, pdev, ether_clk); 1153 detected = at91ether_setup(phy_id, phy_address, pdev, ether_clk);
1109 break; 1154 break;
1110 } 1155 }
diff --git a/drivers/net/arm/at91_ether.h b/drivers/net/arm/at91_ether.h
index b6b665de2ea0..a38fd2d053a6 100644
--- a/drivers/net/arm/at91_ether.h
+++ b/drivers/net/arm/at91_ether.h
@@ -17,39 +17,46 @@
17 17
18 18
19/* Davicom 9161 PHY */ 19/* Davicom 9161 PHY */
20#define MII_DM9161_ID 0x0181b880 20#define MII_DM9161_ID 0x0181b880
21#define MII_DM9161A_ID 0x0181b8a0 21#define MII_DM9161A_ID 0x0181b8a0
22 22#define MII_DSCR_REG 16
23/* Davicom specific registers */ 23#define MII_DSCSR_REG 17
24#define MII_DSCR_REG 16 24#define MII_DSINTR_REG 21
25#define MII_DSCSR_REG 17
26#define MII_DSINTR_REG 21
27 25
28/* Intel LXT971A PHY */ 26/* Intel LXT971A PHY */
29#define MII_LXT971A_ID 0x001378E0 27#define MII_LXT971A_ID 0x001378E0
30 28#define MII_ISINTE_REG 18
31/* Intel specific registers */ 29#define MII_ISINTS_REG 19
32#define MII_ISINTE_REG 18 30#define MII_LEDCTRL_REG 20
33#define MII_ISINTS_REG 19
34#define MII_LEDCTRL_REG 20
35 31
36/* Realtek RTL8201 PHY */ 32/* Realtek RTL8201 PHY */
37#define MII_RTL8201_ID 0x00008200 33#define MII_RTL8201_ID 0x00008200
38 34
39/* Broadcom BCM5221 PHY */ 35/* Broadcom BCM5221 PHY */
40#define MII_BCM5221_ID 0x004061e0 36#define MII_BCM5221_ID 0x004061e0
41 37#define MII_BCMINTR_REG 26
42/* Broadcom specific registers */
43#define MII_BCMINTR_REG 26
44 38
45/* National Semiconductor DP83847 */ 39/* National Semiconductor DP83847 */
46#define MII_DP83847_ID 0x20005c30 40#define MII_DP83847_ID 0x20005c30
41
42/* National Semiconductor DP83848 */
43#define MII_DP83848_ID 0x20005c90
44#define MII_DPPHYSTS_REG 16
45#define MII_DPMICR_REG 17
46#define MII_DPMISR_REG 18
47 47
48/* Altima AC101L PHY */ 48/* Altima AC101L PHY */
49#define MII_AC101L_ID 0x00225520 49#define MII_AC101L_ID 0x00225520
50 50
51/* Micrel KS8721 PHY */ 51/* Micrel KS8721 PHY */
52#define MII_KS8721_ID 0x00221610 52#define MII_KS8721_ID 0x00221610
53
54/* Teridian 78Q2123/78Q2133 */
55#define MII_T78Q21x3_ID 0x000e7230
56#define MII_T78Q21INT_REG 17
57
58/* SMSC LAN83C185 */
59#define MII_LAN83C185_ID 0x0007C0A0
53 60
54/* ........................................................................ */ 61/* ........................................................................ */
55 62
diff --git a/drivers/net/atl1/atl1_ethtool.c b/drivers/net/atl1/atl1_ethtool.c
index c11c27798e5c..1f616c5c1473 100644
--- a/drivers/net/atl1/atl1_ethtool.c
+++ b/drivers/net/atl1/atl1_ethtool.c
@@ -156,8 +156,7 @@ static int atl1_set_settings(struct net_device *netdev,
156 u16 old_media_type = hw->media_type; 156 u16 old_media_type = hw->media_type;
157 157
158 if (netif_running(adapter->netdev)) { 158 if (netif_running(adapter->netdev)) {
159 printk(KERN_DEBUG "%s: ethtool shutting down adapter\n", 159 dev_dbg(&adapter->pdev->dev, "ethtool shutting down adapter\n");
160 atl1_driver_name);
161 atl1_down(adapter); 160 atl1_down(adapter);
162 } 161 }
163 162
@@ -166,9 +165,8 @@ static int atl1_set_settings(struct net_device *netdev,
166 else { 165 else {
167 if (ecmd->speed == SPEED_1000) { 166 if (ecmd->speed == SPEED_1000) {
168 if (ecmd->duplex != DUPLEX_FULL) { 167 if (ecmd->duplex != DUPLEX_FULL) {
169 printk(KERN_WARNING 168 dev_warn(&adapter->pdev->dev,
170 "%s: can't force to 1000M half duplex\n", 169 "can't force to 1000M half duplex\n");
171 atl1_driver_name);
172 ret_val = -EINVAL; 170 ret_val = -EINVAL;
173 goto exit_sset; 171 goto exit_sset;
174 } 172 }
@@ -206,9 +204,8 @@ static int atl1_set_settings(struct net_device *netdev,
206 } 204 }
207 if (atl1_phy_setup_autoneg_adv(hw)) { 205 if (atl1_phy_setup_autoneg_adv(hw)) {
208 ret_val = -EINVAL; 206 ret_val = -EINVAL;
209 printk(KERN_WARNING 207 dev_warn(&adapter->pdev->dev,
210 "%s: invalid ethtool speed/duplex setting\n", 208 "invalid ethtool speed/duplex setting\n");
211 atl1_driver_name);
212 goto exit_sset; 209 goto exit_sset;
213 } 210 }
214 if (hw->media_type == MEDIA_TYPE_AUTO_SENSOR || 211 if (hw->media_type == MEDIA_TYPE_AUTO_SENSOR ||
@@ -239,12 +236,10 @@ exit_sset:
239 hw->media_type = old_media_type; 236 hw->media_type = old_media_type;
240 237
241 if (netif_running(adapter->netdev)) { 238 if (netif_running(adapter->netdev)) {
242 printk(KERN_DEBUG "%s: ethtool starting adapter\n", 239 dev_dbg(&adapter->pdev->dev, "ethtool starting adapter\n");
243 atl1_driver_name);
244 atl1_up(adapter); 240 atl1_up(adapter);
245 } else if (!ret_val) { 241 } else if (!ret_val) {
246 printk(KERN_DEBUG "%s: ethtool resetting adapter\n", 242 dev_dbg(&adapter->pdev->dev, "ethtool resetting adapter\n");
247 atl1_driver_name);
248 atl1_reset(adapter); 243 atl1_reset(adapter);
249 } 244 }
250 return ret_val; 245 return ret_val;
diff --git a/drivers/net/atl1/atl1_hw.c b/drivers/net/atl1/atl1_hw.c
index 69482e0d849b..ef886bdeac13 100644
--- a/drivers/net/atl1/atl1_hw.c
+++ b/drivers/net/atl1/atl1_hw.c
@@ -2,20 +2,20 @@
2 * Copyright(c) 2005 - 2006 Attansic Corporation. All rights reserved. 2 * Copyright(c) 2005 - 2006 Attansic Corporation. All rights reserved.
3 * Copyright(c) 2006 Chris Snook <csnook@redhat.com> 3 * Copyright(c) 2006 Chris Snook <csnook@redhat.com>
4 * Copyright(c) 2006 Jay Cliburn <jcliburn@gmail.com> 4 * Copyright(c) 2006 Jay Cliburn <jcliburn@gmail.com>
5 * 5 *
6 * Derived from Intel e1000 driver 6 * Derived from Intel e1000 driver
7 * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. 7 * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved.
8 * 8 *
9 * This program is free software; you can redistribute it and/or modify it 9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the Free 10 * under the terms of the GNU General Public License as published by the Free
11 * Software Foundation; either version 2 of the License, or (at your option) 11 * Software Foundation; either version 2 of the License, or (at your option)
12 * any later version. 12 * any later version.
13 * 13 *
14 * This program is distributed in the hope that it will be useful, but WITHOUT 14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
17 * more details. 17 * more details.
18 * 18 *
19 * You should have received a copy of the GNU General Public License along with 19 * You should have received a copy of the GNU General Public License along with
20 * this program; if not, write to the Free Software Foundation, Inc., 59 20 * this program; if not, write to the Free Software Foundation, Inc., 59
21 * Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21 * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
@@ -38,12 +38,13 @@
38 */ 38 */
39s32 atl1_reset_hw(struct atl1_hw *hw) 39s32 atl1_reset_hw(struct atl1_hw *hw)
40{ 40{
41 struct pci_dev *pdev = hw->back->pdev;
41 u32 icr; 42 u32 icr;
42 int i; 43 int i;
43 44
44 /* 45 /*
45 * Clear Interrupt mask to stop board from generating 46 * Clear Interrupt mask to stop board from generating
46 * interrupts & Clear any pending interrupt events 47 * interrupts & Clear any pending interrupt events
47 */ 48 */
48 /* 49 /*
49 * iowrite32(0, hw->hw_addr + REG_IMR); 50 * iowrite32(0, hw->hw_addr + REG_IMR);
@@ -74,7 +75,7 @@ s32 atl1_reset_hw(struct atl1_hw *hw)
74 } 75 }
75 76
76 if (icr) { 77 if (icr) {
77 printk (KERN_DEBUG "icr = %x\n", icr); 78 dev_dbg(&pdev->dev, "ICR = 0x%x\n", icr);
78 return icr; 79 return icr;
79 } 80 }
80 81
@@ -136,8 +137,8 @@ s32 atl1_read_phy_reg(struct atl1_hw *hw, u16 reg_addr, u16 *phy_data)
136 int i; 137 int i;
137 138
138 val = ((u32) (reg_addr & MDIO_REG_ADDR_MASK)) << MDIO_REG_ADDR_SHIFT | 139 val = ((u32) (reg_addr & MDIO_REG_ADDR_MASK)) << MDIO_REG_ADDR_SHIFT |
139 MDIO_START | MDIO_SUP_PREAMBLE | MDIO_RW | MDIO_CLK_25_4 << 140 MDIO_START | MDIO_SUP_PREAMBLE | MDIO_RW | MDIO_CLK_25_4 <<
140 MDIO_CLK_SEL_SHIFT; 141 MDIO_CLK_SEL_SHIFT;
141 iowrite32(val, hw->hw_addr + REG_MDIO_CTRL); 142 iowrite32(val, hw->hw_addr + REG_MDIO_CTRL);
142 ioread32(hw->hw_addr + REG_MDIO_CTRL); 143 ioread32(hw->hw_addr + REG_MDIO_CTRL);
143 144
@@ -204,7 +205,7 @@ static bool atl1_spi_read(struct atl1_hw *hw, u32 addr, u32 *buf)
204 205
205/* 206/*
206 * get_permanent_address 207 * get_permanent_address
207 * return 0 if get valid mac address, 208 * return 0 if get valid mac address,
208 */ 209 */
209static int atl1_get_permanent_address(struct atl1_hw *hw) 210static int atl1_get_permanent_address(struct atl1_hw *hw)
210{ 211{
@@ -301,7 +302,7 @@ static int atl1_get_permanent_address(struct atl1_hw *hw)
301} 302}
302 303
303/* 304/*
304 * Reads the adapter's MAC address from the EEPROM 305 * Reads the adapter's MAC address from the EEPROM
305 * hw - Struct containing variables accessed by shared code 306 * hw - Struct containing variables accessed by shared code
306 */ 307 */
307s32 atl1_read_mac_addr(struct atl1_hw *hw) 308s32 atl1_read_mac_addr(struct atl1_hw *hw)
@@ -437,6 +438,7 @@ s32 atl1_phy_enter_power_saving(struct atl1_hw *hw)
437 */ 438 */
438static s32 atl1_phy_reset(struct atl1_hw *hw) 439static s32 atl1_phy_reset(struct atl1_hw *hw)
439{ 440{
441 struct pci_dev *pdev = hw->back->pdev;
440 s32 ret_val; 442 s32 ret_val;
441 u16 phy_data; 443 u16 phy_data;
442 444
@@ -468,8 +470,7 @@ static s32 atl1_phy_reset(struct atl1_hw *hw)
468 u32 val; 470 u32 val;
469 int i; 471 int i;
470 /* pcie serdes link may be down! */ 472 /* pcie serdes link may be down! */
471 printk(KERN_DEBUG "%s: autoneg caused pcie phy link down\n", 473 dev_dbg(&pdev->dev, "pcie phy link down\n");
472 atl1_driver_name);
473 474
474 for (i = 0; i < 25; i++) { 475 for (i = 0; i < 25; i++) {
475 msleep(1); 476 msleep(1);
@@ -479,9 +480,7 @@ static s32 atl1_phy_reset(struct atl1_hw *hw)
479 } 480 }
480 481
481 if ((val & (MDIO_START | MDIO_BUSY)) != 0) { 482 if ((val & (MDIO_START | MDIO_BUSY)) != 0) {
482 printk(KERN_WARNING 483 dev_warn(&pdev->dev, "pcie link down at least 25ms\n");
483 "%s: pcie link down at least for 25ms\n",
484 atl1_driver_name);
485 return ret_val; 484 return ret_val;
486 } 485 }
487 } 486 }
@@ -571,6 +570,7 @@ s32 atl1_phy_setup_autoneg_adv(struct atl1_hw *hw)
571 */ 570 */
572static s32 atl1_setup_link(struct atl1_hw *hw) 571static s32 atl1_setup_link(struct atl1_hw *hw)
573{ 572{
573 struct pci_dev *pdev = hw->back->pdev;
574 s32 ret_val; 574 s32 ret_val;
575 575
576 /* 576 /*
@@ -581,15 +581,13 @@ static s32 atl1_setup_link(struct atl1_hw *hw)
581 */ 581 */
582 ret_val = atl1_phy_setup_autoneg_adv(hw); 582 ret_val = atl1_phy_setup_autoneg_adv(hw);
583 if (ret_val) { 583 if (ret_val) {
584 printk(KERN_DEBUG "%s: error setting up autonegotiation\n", 584 dev_dbg(&pdev->dev, "error setting up autonegotiation\n");
585 atl1_driver_name);
586 return ret_val; 585 return ret_val;
587 } 586 }
588 /* SW.Reset , En-Auto-Neg if needed */ 587 /* SW.Reset , En-Auto-Neg if needed */
589 ret_val = atl1_phy_reset(hw); 588 ret_val = atl1_phy_reset(hw);
590 if (ret_val) { 589 if (ret_val) {
591 printk(KERN_DEBUG "%s: error resetting the phy\n", 590 dev_dbg(&pdev->dev, "error resetting phy\n");
592 atl1_driver_name);
593 return ret_val; 591 return ret_val;
594 } 592 }
595 hw->phy_configured = true; 593 hw->phy_configured = true;
@@ -631,7 +629,7 @@ static void atl1_init_flash_opcode(struct atl1_hw *hw)
631 * Performs basic configuration of the adapter. 629 * Performs basic configuration of the adapter.
632 * hw - Struct containing variables accessed by shared code 630 * hw - Struct containing variables accessed by shared code
633 * Assumes that the controller has previously been reset and is in a 631 * Assumes that the controller has previously been reset and is in a
634 * post-reset uninitialized state. Initializes multicast table, 632 * post-reset uninitialized state. Initializes multicast table,
635 * and Calls routines to setup link 633 * and Calls routines to setup link
636 * Leaves the transmit and receive units disabled and uninitialized. 634 * Leaves the transmit and receive units disabled and uninitialized.
637 */ 635 */
@@ -669,6 +667,7 @@ s32 atl1_init_hw(struct atl1_hw *hw)
669 */ 667 */
670s32 atl1_get_speed_and_duplex(struct atl1_hw *hw, u16 *speed, u16 *duplex) 668s32 atl1_get_speed_and_duplex(struct atl1_hw *hw, u16 *speed, u16 *duplex)
671{ 669{
670 struct pci_dev *pdev = hw->back->pdev;
672 s32 ret_val; 671 s32 ret_val;
673 u16 phy_data; 672 u16 phy_data;
674 673
@@ -691,8 +690,7 @@ s32 atl1_get_speed_and_duplex(struct atl1_hw *hw, u16 *speed, u16 *duplex)
691 *speed = SPEED_10; 690 *speed = SPEED_10;
692 break; 691 break;
693 default: 692 default:
694 printk(KERN_DEBUG "%s: error getting speed\n", 693 dev_dbg(&pdev->dev, "error getting speed\n");
695 atl1_driver_name);
696 return ATL1_ERR_PHY_SPEED; 694 return ATL1_ERR_PHY_SPEED;
697 break; 695 break;
698 } 696 }
diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c
index 4b1d4d153ecf..d28f88bbdd5f 100644
--- a/drivers/net/atl1/atl1_main.c
+++ b/drivers/net/atl1/atl1_main.c
@@ -188,8 +188,7 @@ s32 atl1_setup_ring_resources(struct atl1_adapter *adapter)
188 size = sizeof(struct atl1_buffer) * (tpd_ring->count + rfd_ring->count); 188 size = sizeof(struct atl1_buffer) * (tpd_ring->count + rfd_ring->count);
189 tpd_ring->buffer_info = kzalloc(size, GFP_KERNEL); 189 tpd_ring->buffer_info = kzalloc(size, GFP_KERNEL);
190 if (unlikely(!tpd_ring->buffer_info)) { 190 if (unlikely(!tpd_ring->buffer_info)) {
191 printk(KERN_WARNING "%s: kzalloc failed , size = D%d\n", 191 dev_err(&pdev->dev, "kzalloc failed , size = D%d\n", size);
192 atl1_driver_name, size);
193 goto err_nomem; 192 goto err_nomem;
194 } 193 }
195 rfd_ring->buffer_info = 194 rfd_ring->buffer_info =
@@ -207,9 +206,7 @@ s32 atl1_setup_ring_resources(struct atl1_adapter *adapter)
207 ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, 206 ring_header->desc = pci_alloc_consistent(pdev, ring_header->size,
208 &ring_header->dma); 207 &ring_header->dma);
209 if (unlikely(!ring_header->desc)) { 208 if (unlikely(!ring_header->desc)) {
210 printk(KERN_WARNING 209 dev_err(&pdev->dev, "pci_alloc_consistent failed\n");
211 "%s: pci_alloc_consistent failed, size = D%d\n",
212 atl1_driver_name, size);
213 goto err_nomem; 210 goto err_nomem;
214 } 211 }
215 212
@@ -373,8 +370,7 @@ static void atl1_rx_checksum(struct atl1_adapter *adapter,
373 if (rrd->err_flg & (ERR_FLAG_CRC | ERR_FLAG_TRUNC | 370 if (rrd->err_flg & (ERR_FLAG_CRC | ERR_FLAG_TRUNC |
374 ERR_FLAG_CODE | ERR_FLAG_OV)) { 371 ERR_FLAG_CODE | ERR_FLAG_OV)) {
375 adapter->hw_csum_err++; 372 adapter->hw_csum_err++;
376 printk(KERN_DEBUG "%s: rx checksum error\n", 373 dev_dbg(&adapter->pdev->dev, "rx checksum error\n");
377 atl1_driver_name);
378 return; 374 return;
379 } 375 }
380 } 376 }
@@ -393,8 +389,9 @@ static void atl1_rx_checksum(struct atl1_adapter *adapter,
393 } 389 }
394 390
395 /* IPv4, but hardware thinks its checksum is wrong */ 391 /* IPv4, but hardware thinks its checksum is wrong */
396 printk(KERN_DEBUG "%s: hw csum wrong pkt_flag:%x, err_flag:%x\n", 392 dev_dbg(&adapter->pdev->dev,
397 atl1_driver_name, rrd->pkt_flg, rrd->err_flg); 393 "hw csum wrong, pkt_flag:%x, err_flag:%x\n",
394 rrd->pkt_flg, rrd->err_flg);
398 skb->ip_summed = CHECKSUM_COMPLETE; 395 skb->ip_summed = CHECKSUM_COMPLETE;
399 skb->csum = htons(rrd->xsz.xsum_sz.rx_chksum); 396 skb->csum = htons(rrd->xsz.xsum_sz.rx_chksum);
400 adapter->hw_csum_err++; 397 adapter->hw_csum_err++;
@@ -507,14 +504,13 @@ chk_rrd:
507 /* rrd seems to be bad */ 504 /* rrd seems to be bad */
508 if (unlikely(i-- > 0)) { 505 if (unlikely(i-- > 0)) {
509 /* rrd may not be DMAed completely */ 506 /* rrd may not be DMAed completely */
510 printk(KERN_DEBUG 507 dev_dbg(&adapter->pdev->dev,
511 "%s: RRD may not be DMAed completely\n", 508 "incomplete RRD DMA transfer\n");
512 atl1_driver_name);
513 udelay(1); 509 udelay(1);
514 goto chk_rrd; 510 goto chk_rrd;
515 } 511 }
516 /* bad rrd */ 512 /* bad rrd */
517 printk(KERN_DEBUG "%s: bad RRD\n", atl1_driver_name); 513 dev_dbg(&adapter->pdev->dev, "bad RRD\n");
518 /* see if update RFD index */ 514 /* see if update RFD index */
519 if (rrd->num_buf > 1) { 515 if (rrd->num_buf > 1) {
520 u16 num_buf; 516 u16 num_buf;
@@ -685,8 +681,8 @@ static void atl1_check_for_link(struct atl1_adapter *adapter)
685 /* notify upper layer link down ASAP */ 681 /* notify upper layer link down ASAP */
686 if (!(phy_data & BMSR_LSTATUS)) { /* Link Down */ 682 if (!(phy_data & BMSR_LSTATUS)) { /* Link Down */
687 if (netif_carrier_ok(netdev)) { /* old link state: Up */ 683 if (netif_carrier_ok(netdev)) { /* old link state: Up */
688 printk(KERN_INFO "%s: %s link is down\n", 684 dev_info(&adapter->pdev->dev, "%s link is down\n",
689 atl1_driver_name, netdev->name); 685 netdev->name);
690 adapter->link_speed = SPEED_0; 686 adapter->link_speed = SPEED_0;
691 netif_carrier_off(netdev); 687 netif_carrier_off(netdev);
692 netif_stop_queue(netdev); 688 netif_stop_queue(netdev);
@@ -731,8 +727,8 @@ static irqreturn_t atl1_intr(int irq, void *data)
731 727
732 /* check if PCIE PHY Link down */ 728 /* check if PCIE PHY Link down */
733 if (status & ISR_PHY_LINKDOWN) { 729 if (status & ISR_PHY_LINKDOWN) {
734 printk(KERN_DEBUG "%s: pcie phy link down %x\n", 730 dev_dbg(&adapter->pdev->dev, "pcie phy link down %x\n",
735 atl1_driver_name, status); 731 status);
736 if (netif_running(adapter->netdev)) { /* reset MAC */ 732 if (netif_running(adapter->netdev)) { /* reset MAC */
737 iowrite32(0, adapter->hw.hw_addr + REG_IMR); 733 iowrite32(0, adapter->hw.hw_addr + REG_IMR);
738 schedule_work(&adapter->pcie_dma_to_rst_task); 734 schedule_work(&adapter->pcie_dma_to_rst_task);
@@ -742,9 +738,9 @@ static irqreturn_t atl1_intr(int irq, void *data)
742 738
743 /* check if DMA read/write error ? */ 739 /* check if DMA read/write error ? */
744 if (status & (ISR_DMAR_TO_RST | ISR_DMAW_TO_RST)) { 740 if (status & (ISR_DMAR_TO_RST | ISR_DMAW_TO_RST)) {
745 printk(KERN_DEBUG 741 dev_dbg(&adapter->pdev->dev,
746 "%s: pcie DMA r/w error (status = 0x%x)\n", 742 "pcie DMA r/w error (status = 0x%x)\n",
747 atl1_driver_name, status); 743 status);
748 iowrite32(0, adapter->hw.hw_addr + REG_IMR); 744 iowrite32(0, adapter->hw.hw_addr + REG_IMR);
749 schedule_work(&adapter->pcie_dma_to_rst_task); 745 schedule_work(&adapter->pcie_dma_to_rst_task);
750 return IRQ_HANDLED; 746 return IRQ_HANDLED;
@@ -762,14 +758,13 @@ static irqreturn_t atl1_intr(int irq, void *data)
762 758
763 /* rx exception */ 759 /* rx exception */
764 if (unlikely(status & (ISR_RXF_OV | ISR_RFD_UNRUN | 760 if (unlikely(status & (ISR_RXF_OV | ISR_RFD_UNRUN |
761 ISR_RRD_OV | ISR_HOST_RFD_UNRUN |
762 ISR_HOST_RRD_OV | ISR_CMB_RX))) {
763 if (status & (ISR_RXF_OV | ISR_RFD_UNRUN |
765 ISR_RRD_OV | ISR_HOST_RFD_UNRUN | 764 ISR_RRD_OV | ISR_HOST_RFD_UNRUN |
766 ISR_HOST_RRD_OV | ISR_CMB_RX))) { 765 ISR_HOST_RRD_OV))
767 if (status & 766 dev_dbg(&adapter->pdev->dev,
768 (ISR_RXF_OV | ISR_RFD_UNRUN | ISR_RRD_OV | 767 "rx exception, ISR = 0x%x\n", status);
769 ISR_HOST_RFD_UNRUN | ISR_HOST_RRD_OV))
770 printk(KERN_INFO
771 "%s: rx exception: status = 0x%x\n",
772 atl1_driver_name, status);
773 atl1_intr_rx(adapter); 768 atl1_intr_rx(adapter);
774 } 769 }
775 770
@@ -874,8 +869,7 @@ static u32 atl1_check_link(struct atl1_adapter *adapter)
874 atl1_read_phy_reg(hw, MII_BMSR, &phy_data); 869 atl1_read_phy_reg(hw, MII_BMSR, &phy_data);
875 if (!(phy_data & BMSR_LSTATUS)) { /* link down */ 870 if (!(phy_data & BMSR_LSTATUS)) { /* link down */
876 if (netif_carrier_ok(netdev)) { /* old link state: Up */ 871 if (netif_carrier_ok(netdev)) { /* old link state: Up */
877 printk(KERN_INFO "%s: link is down\n", 872 dev_info(&adapter->pdev->dev, "link is down\n");
878 atl1_driver_name);
879 adapter->link_speed = SPEED_0; 873 adapter->link_speed = SPEED_0;
880 netif_carrier_off(netdev); 874 netif_carrier_off(netdev);
881 netif_stop_queue(netdev); 875 netif_stop_queue(netdev);
@@ -918,11 +912,11 @@ static u32 atl1_check_link(struct atl1_adapter *adapter)
918 adapter->link_speed = speed; 912 adapter->link_speed = speed;
919 adapter->link_duplex = duplex; 913 adapter->link_duplex = duplex;
920 atl1_setup_mac_ctrl(adapter); 914 atl1_setup_mac_ctrl(adapter);
921 printk(KERN_INFO "%s: %s link is up %d Mbps %s\n", 915 dev_info(&adapter->pdev->dev,
922 atl1_driver_name, netdev->name, 916 "%s link is up %d Mbps %s\n",
923 adapter->link_speed, 917 netdev->name, adapter->link_speed,
924 adapter->link_duplex == 918 adapter->link_duplex == FULL_DUPLEX ?
925 FULL_DUPLEX ? "full duplex" : "half duplex"); 919 "full duplex" : "half duplex");
926 } 920 }
927 if (!netif_carrier_ok(netdev)) { /* Link down -> Up */ 921 if (!netif_carrier_ok(netdev)) { /* Link down -> Up */
928 netif_carrier_on(netdev); 922 netif_carrier_on(netdev);
@@ -1330,8 +1324,8 @@ static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb,
1330 cso = skb_transport_offset(skb); 1324 cso = skb_transport_offset(skb);
1331 css = cso + skb->csum_offset; 1325 css = cso + skb->csum_offset;
1332 if (unlikely(cso & 0x1)) { 1326 if (unlikely(cso & 0x1)) {
1333 printk(KERN_DEBUG "%s: payload offset != even number\n", 1327 dev_dbg(&adapter->pdev->dev,
1334 atl1_driver_name); 1328 "payload offset not an even number\n");
1335 return -1; 1329 return -1;
1336 } 1330 }
1337 csum->csumpl |= (cso & CSUM_PARAM_PLOADOFFSET_MASK) << 1331 csum->csumpl |= (cso & CSUM_PARAM_PLOADOFFSET_MASK) <<
@@ -1579,7 +1573,7 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1579 if (!spin_trylock(&adapter->lock)) { 1573 if (!spin_trylock(&adapter->lock)) {
1580 /* Can't get lock - tell upper layer to requeue */ 1574 /* Can't get lock - tell upper layer to requeue */
1581 local_irq_restore(flags); 1575 local_irq_restore(flags);
1582 printk(KERN_DEBUG "%s: TX locked\n", atl1_driver_name); 1576 dev_dbg(&adapter->pdev->dev, "tx locked\n");
1583 return NETDEV_TX_LOCKED; 1577 return NETDEV_TX_LOCKED;
1584 } 1578 }
1585 1579
@@ -1587,7 +1581,7 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1587 /* not enough descriptors */ 1581 /* not enough descriptors */
1588 netif_stop_queue(netdev); 1582 netif_stop_queue(netdev);
1589 spin_unlock_irqrestore(&adapter->lock, flags); 1583 spin_unlock_irqrestore(&adapter->lock, flags);
1590 printk(KERN_DEBUG "%s: TX busy\n", atl1_driver_name); 1584 dev_dbg(&adapter->pdev->dev, "tx busy\n");
1591 return NETDEV_TX_BUSY; 1585 return NETDEV_TX_BUSY;
1592 } 1586 }
1593 1587
@@ -1841,8 +1835,7 @@ static int atl1_change_mtu(struct net_device *netdev, int new_mtu)
1841 1835
1842 if ((max_frame < MINIMUM_ETHERNET_FRAME_SIZE) || 1836 if ((max_frame < MINIMUM_ETHERNET_FRAME_SIZE) ||
1843 (max_frame > MAX_JUMBO_FRAME_SIZE)) { 1837 (max_frame > MAX_JUMBO_FRAME_SIZE)) {
1844 printk(KERN_WARNING "%s: invalid MTU setting\n", 1838 dev_warn(&adapter->pdev->dev, "invalid MTU setting\n");
1845 atl1_driver_name);
1846 return -EINVAL; 1839 return -EINVAL;
1847 } 1840 }
1848 1841
@@ -2136,9 +2129,7 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
2136 if (err) { 2129 if (err) {
2137 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 2130 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
2138 if (err) { 2131 if (err) {
2139 printk(KERN_DEBUG 2132 dev_err(&pdev->dev, "no usable DMA configuration\n");
2140 "%s: no usable DMA configuration, aborting\n",
2141 atl1_driver_name);
2142 goto err_dma; 2133 goto err_dma;
2143 } 2134 }
2144 pci_using_64 = false; 2135 pci_using_64 = false;
@@ -2175,7 +2166,9 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
2175 goto err_pci_iomap; 2166 goto err_pci_iomap;
2176 } 2167 }
2177 /* get device revision number */ 2168 /* get device revision number */
2178 adapter->hw.dev_rev = ioread16(adapter->hw.hw_addr + (REG_MASTER_CTRL + 2)); 2169 adapter->hw.dev_rev = ioread16(adapter->hw.hw_addr +
2170 (REG_MASTER_CTRL + 2));
2171 dev_info(&pdev->dev, "version %s\n", DRIVER_VERSION);
2179 2172
2180 /* set default ring resource counts */ 2173 /* set default ring resource counts */
2181 adapter->rfd_ring.count = adapter->rrd_ring.count = ATL1_DEFAULT_RFD; 2174 adapter->rfd_ring.count = adapter->rrd_ring.count = ATL1_DEFAULT_RFD;
@@ -2466,8 +2459,6 @@ static void __exit atl1_exit_module(void)
2466 */ 2459 */
2467static int __init atl1_init_module(void) 2460static int __init atl1_init_module(void)
2468{ 2461{
2469 printk(KERN_INFO "%s - version %s\n", atl1_driver_string, DRIVER_VERSION);
2470 printk(KERN_INFO "%s\n", atl1_copyright);
2471 return pci_register_driver(&atl1_driver); 2462 return pci_register_driver(&atl1_driver);
2472} 2463}
2473 2464
diff --git a/drivers/net/atl1/atl1_param.c b/drivers/net/atl1/atl1_param.c
index bcd0bd891722..4246bb9bd50e 100644
--- a/drivers/net/atl1/atl1_param.c
+++ b/drivers/net/atl1/atl1_param.c
@@ -23,6 +23,7 @@
23 23
24#include <linux/types.h> 24#include <linux/types.h>
25#include <linux/moduleparam.h> 25#include <linux/moduleparam.h>
26#include <linux/pci.h>
26#include "atl1.h" 27#include "atl1.h"
27 28
28/* 29/*
@@ -93,7 +94,7 @@ struct atl1_option {
93 } arg; 94 } arg;
94}; 95};
95 96
96static int __devinit atl1_validate_option(int *value, struct atl1_option *opt) 97static int __devinit atl1_validate_option(int *value, struct atl1_option *opt, struct pci_dev *pdev)
97{ 98{
98 if (*value == OPTION_UNSET) { 99 if (*value == OPTION_UNSET) {
99 *value = opt->def; 100 *value = opt->def;
@@ -104,19 +105,17 @@ static int __devinit atl1_validate_option(int *value, struct atl1_option *opt)
104 case enable_option: 105 case enable_option:
105 switch (*value) { 106 switch (*value) {
106 case OPTION_ENABLED: 107 case OPTION_ENABLED:
107 printk(KERN_INFO "%s: %s Enabled\n", atl1_driver_name, 108 dev_info(&pdev->dev, "%s enabled\n", opt->name);
108 opt->name);
109 return 0; 109 return 0;
110 case OPTION_DISABLED: 110 case OPTION_DISABLED:
111 printk(KERN_INFO "%s: %s Disabled\n", atl1_driver_name, 111 dev_info(&pdev->dev, "%s disabled\n", opt->name);
112 opt->name);
113 return 0; 112 return 0;
114 } 113 }
115 break; 114 break;
116 case range_option: 115 case range_option:
117 if (*value >= opt->arg.r.min && *value <= opt->arg.r.max) { 116 if (*value >= opt->arg.r.min && *value <= opt->arg.r.max) {
118 printk(KERN_INFO "%s: %s set to %i\n", 117 dev_info(&pdev->dev, "%s set to %i\n", opt->name,
119 atl1_driver_name, opt->name, *value); 118 *value);
120 return 0; 119 return 0;
121 } 120 }
122 break; 121 break;
@@ -128,8 +127,8 @@ static int __devinit atl1_validate_option(int *value, struct atl1_option *opt)
128 ent = &opt->arg.l.p[i]; 127 ent = &opt->arg.l.p[i];
129 if (*value == ent->i) { 128 if (*value == ent->i) {
130 if (ent->str[0] != '\0') 129 if (ent->str[0] != '\0')
131 printk(KERN_INFO "%s: %s\n", 130 dev_info(&pdev->dev, "%s\n",
132 atl1_driver_name, ent->str); 131 ent->str);
133 return 0; 132 return 0;
134 } 133 }
135 } 134 }
@@ -140,8 +139,8 @@ static int __devinit atl1_validate_option(int *value, struct atl1_option *opt)
140 break; 139 break;
141 } 140 }
142 141
143 printk(KERN_INFO "%s: invalid %s specified (%i) %s\n", 142 dev_info(&pdev->dev, "invalid %s specified (%i) %s\n",
144 atl1_driver_name, opt->name, *value, opt->err); 143 opt->name, *value, opt->err);
145 *value = opt->def; 144 *value = opt->def;
146 return -1; 145 return -1;
147} 146}
@@ -157,12 +156,11 @@ static int __devinit atl1_validate_option(int *value, struct atl1_option *opt)
157 */ 156 */
158void __devinit atl1_check_options(struct atl1_adapter *adapter) 157void __devinit atl1_check_options(struct atl1_adapter *adapter)
159{ 158{
159 struct pci_dev *pdev = adapter->pdev;
160 int bd = adapter->bd_number; 160 int bd = adapter->bd_number;
161 if (bd >= ATL1_MAX_NIC) { 161 if (bd >= ATL1_MAX_NIC) {
162 printk(KERN_NOTICE "%s: warning: no configuration for board #%i\n", 162 dev_notice(&pdev->dev, "no configuration for board#%i\n", bd);
163 atl1_driver_name, bd); 163 dev_notice(&pdev->dev, "using defaults for all values\n");
164 printk(KERN_NOTICE "%s: using defaults for all values\n",
165 atl1_driver_name);
166 } 164 }
167 { /* Interrupt Moderate Timer */ 165 { /* Interrupt Moderate Timer */
168 struct atl1_option opt = { 166 struct atl1_option opt = {
@@ -177,7 +175,7 @@ void __devinit atl1_check_options(struct atl1_adapter *adapter)
177 int val; 175 int val;
178 if (num_int_mod_timer > bd) { 176 if (num_int_mod_timer > bd) {
179 val = int_mod_timer[bd]; 177 val = int_mod_timer[bd];
180 atl1_validate_option(&val, &opt); 178 atl1_validate_option(&val, &opt, pdev);
181 adapter->imt = (u16) val; 179 adapter->imt = (u16) val;
182 } else 180 } else
183 adapter->imt = (u16) (opt.def); 181 adapter->imt = (u16) (opt.def);
@@ -197,7 +195,7 @@ void __devinit atl1_check_options(struct atl1_adapter *adapter)
197 int val; 195 int val;
198 if (num_flash_vendor > bd) { 196 if (num_flash_vendor > bd) {
199 val = flash_vendor[bd]; 197 val = flash_vendor[bd];
200 atl1_validate_option(&val, &opt); 198 atl1_validate_option(&val, &opt, pdev);
201 adapter->hw.flash_vendor = (u8) val; 199 adapter->hw.flash_vendor = (u8) val;
202 } else 200 } else
203 adapter->hw.flash_vendor = (u8) (opt.def); 201 adapter->hw.flash_vendor = (u8) (opt.def);
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
index 8cc1174e7f64..264fa0e2e075 100644
--- a/drivers/net/dm9000.c
+++ b/drivers/net/dm9000.c
@@ -77,9 +77,6 @@
77 77
78#define DM9000_PHY 0x40 /* PHY address 0x01 */ 78#define DM9000_PHY 0x40 /* PHY address 0x01 */
79 79
80#define TRUE 1
81#define FALSE 0
82
83#define CARDNAME "dm9000" 80#define CARDNAME "dm9000"
84#define PFX CARDNAME ": " 81#define PFX CARDNAME ": "
85 82
@@ -601,7 +598,7 @@ dm9000_probe(struct platform_device *pdev)
601 printk("%s: not found (%d).\n", CARDNAME, ret); 598 printk("%s: not found (%d).\n", CARDNAME, ret);
602 599
603 dm9000_release_board(pdev, db); 600 dm9000_release_board(pdev, db);
604 kfree(ndev); 601 free_netdev(ndev);
605 602
606 return ret; 603 return ret;
607} 604}
@@ -896,7 +893,7 @@ dm9000_rx(struct net_device *dev)
896 struct dm9000_rxhdr rxhdr; 893 struct dm9000_rxhdr rxhdr;
897 struct sk_buff *skb; 894 struct sk_buff *skb;
898 u8 rxbyte, *rdptr; 895 u8 rxbyte, *rdptr;
899 int GoodPacket; 896 bool GoodPacket;
900 int RxLen; 897 int RxLen;
901 898
902 /* Check packet ready or not */ 899 /* Check packet ready or not */
@@ -918,7 +915,7 @@ dm9000_rx(struct net_device *dev)
918 return; 915 return;
919 916
920 /* A packet ready now & Get status/length */ 917 /* A packet ready now & Get status/length */
921 GoodPacket = TRUE; 918 GoodPacket = true;
922 writeb(DM9000_MRCMD, db->io_addr); 919 writeb(DM9000_MRCMD, db->io_addr);
923 920
924 (db->inblk)(db->io_data, &rxhdr, sizeof(rxhdr)); 921 (db->inblk)(db->io_data, &rxhdr, sizeof(rxhdr));
@@ -927,7 +924,7 @@ dm9000_rx(struct net_device *dev)
927 924
928 /* Packet Status check */ 925 /* Packet Status check */
929 if (RxLen < 0x40) { 926 if (RxLen < 0x40) {
930 GoodPacket = FALSE; 927 GoodPacket = false;
931 PRINTK1("Bad Packet received (runt)\n"); 928 PRINTK1("Bad Packet received (runt)\n");
932 } 929 }
933 930
@@ -936,7 +933,7 @@ dm9000_rx(struct net_device *dev)
936 } 933 }
937 934
938 if (rxhdr.RxStatus & 0xbf00) { 935 if (rxhdr.RxStatus & 0xbf00) {
939 GoodPacket = FALSE; 936 GoodPacket = false;
940 if (rxhdr.RxStatus & 0x100) { 937 if (rxhdr.RxStatus & 0x100) {
941 PRINTK1("fifo error\n"); 938 PRINTK1("fifo error\n");
942 db->stats.rx_fifo_errors++; 939 db->stats.rx_fifo_errors++;
@@ -1193,7 +1190,7 @@ dm9000_drv_remove(struct platform_device *pdev)
1193 1190
1194 unregister_netdev(ndev); 1191 unregister_netdev(ndev);
1195 dm9000_release_board(pdev, (board_info_t *) ndev->priv); 1192 dm9000_release_board(pdev, (board_info_t *) ndev->priv);
1196 kfree(ndev); /* free device structure */ 1193 free_netdev(ndev); /* free device structure */
1197 1194
1198 PRINTK1("clean_module() exit\n"); 1195 PRINTK1("clean_module() exit\n");
1199 1196
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c
index a1bd2d861d92..f6e0cb1ada1f 100644
--- a/drivers/net/ehea/ehea_main.c
+++ b/drivers/net/ehea/ehea_main.c
@@ -1803,10 +1803,10 @@ static inline int ehea_hash_skb(struct sk_buff *skb, int num_qps)
1803 u32 tmp; 1803 u32 tmp;
1804 1804
1805 if ((skb->protocol == htons(ETH_P_IP)) && 1805 if ((skb->protocol == htons(ETH_P_IP)) &&
1806 (skb->nh.iph->protocol == IPPROTO_TCP)) { 1806 (ip_hdr(skb)->protocol == IPPROTO_TCP)) {
1807 tcp = (struct tcphdr*)(skb->nh.raw + (skb->nh.iph->ihl * 4)); 1807 tcp = (struct tcphdr*)(skb_network_header(skb) + (ip_hdr(skb)->ihl * 4));
1808 tmp = (tcp->source + (tcp->dest << 16)) % 31; 1808 tmp = (tcp->source + (tcp->dest << 16)) % 31;
1809 tmp += skb->nh.iph->daddr % 31; 1809 tmp += ip_hdr(skb)->daddr % 31;
1810 return tmp % num_qps; 1810 return tmp % num_qps;
1811 } 1811 }
1812 else 1812 else
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index 16e3c4315e82..5d14be7405a3 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -290,6 +290,8 @@ MODULE_PARM_DESC(myri10ge_wcfifo, "Enable WC Fifo when WC is enabled\n");
290 290
291#define myri10ge_pio_copy(to,from,size) __iowrite64_copy(to,from,size/8) 291#define myri10ge_pio_copy(to,from,size) __iowrite64_copy(to,from,size/8)
292 292
293static void myri10ge_set_multicast_list(struct net_device *dev);
294
293static inline void put_be32(__be32 val, __be32 __iomem * p) 295static inline void put_be32(__be32 val, __be32 __iomem * p)
294{ 296{
295 __raw_writel((__force __u32) val, (__force void __iomem *)p); 297 __raw_writel((__force __u32) val, (__force void __iomem *)p);
@@ -353,6 +355,8 @@ myri10ge_send_cmd(struct myri10ge_priv *mgp, u32 cmd,
353 return 0; 355 return 0;
354 } else if (result == MXGEFW_CMD_UNKNOWN) { 356 } else if (result == MXGEFW_CMD_UNKNOWN) {
355 return -ENOSYS; 357 return -ENOSYS;
358 } else if (result == MXGEFW_CMD_ERROR_UNALIGNED) {
359 return -E2BIG;
356 } else { 360 } else {
357 dev_err(&mgp->pdev->dev, 361 dev_err(&mgp->pdev->dev,
358 "command %d failed, result = %d\n", 362 "command %d failed, result = %d\n",
@@ -712,14 +716,78 @@ myri10ge_change_promisc(struct myri10ge_priv *mgp, int promisc, int atomic)
712 mgp->dev->name); 716 mgp->dev->name);
713} 717}
714 718
715static int myri10ge_reset(struct myri10ge_priv *mgp) 719static int myri10ge_dma_test(struct myri10ge_priv *mgp, int test_type)
716{ 720{
717 struct myri10ge_cmd cmd; 721 struct myri10ge_cmd cmd;
718 int status; 722 int status;
719 size_t bytes;
720 u32 len; 723 u32 len;
721 struct page *dmatest_page; 724 struct page *dmatest_page;
722 dma_addr_t dmatest_bus; 725 dma_addr_t dmatest_bus;
726 char *test = " ";
727
728 dmatest_page = alloc_page(GFP_KERNEL);
729 if (!dmatest_page)
730 return -ENOMEM;
731 dmatest_bus = pci_map_page(mgp->pdev, dmatest_page, 0, PAGE_SIZE,
732 DMA_BIDIRECTIONAL);
733
734 /* Run a small DMA test.
735 * The magic multipliers to the length tell the firmware
736 * to do DMA read, write, or read+write tests. The
737 * results are returned in cmd.data0. The upper 16
738 * bits or the return is the number of transfers completed.
739 * The lower 16 bits is the time in 0.5us ticks that the
740 * transfers took to complete.
741 */
742
743 len = mgp->tx.boundary;
744
745 cmd.data0 = MYRI10GE_LOWPART_TO_U32(dmatest_bus);
746 cmd.data1 = MYRI10GE_HIGHPART_TO_U32(dmatest_bus);
747 cmd.data2 = len * 0x10000;
748 status = myri10ge_send_cmd(mgp, test_type, &cmd, 0);
749 if (status != 0) {
750 test = "read";
751 goto abort;
752 }
753 mgp->read_dma = ((cmd.data0 >> 16) * len * 2) / (cmd.data0 & 0xffff);
754 cmd.data0 = MYRI10GE_LOWPART_TO_U32(dmatest_bus);
755 cmd.data1 = MYRI10GE_HIGHPART_TO_U32(dmatest_bus);
756 cmd.data2 = len * 0x1;
757 status = myri10ge_send_cmd(mgp, test_type, &cmd, 0);
758 if (status != 0) {
759 test = "write";
760 goto abort;
761 }
762 mgp->write_dma = ((cmd.data0 >> 16) * len * 2) / (cmd.data0 & 0xffff);
763
764 cmd.data0 = MYRI10GE_LOWPART_TO_U32(dmatest_bus);
765 cmd.data1 = MYRI10GE_HIGHPART_TO_U32(dmatest_bus);
766 cmd.data2 = len * 0x10001;
767 status = myri10ge_send_cmd(mgp, test_type, &cmd, 0);
768 if (status != 0) {
769 test = "read/write";
770 goto abort;
771 }
772 mgp->read_write_dma = ((cmd.data0 >> 16) * len * 2 * 2) /
773 (cmd.data0 & 0xffff);
774
775abort:
776 pci_unmap_page(mgp->pdev, dmatest_bus, PAGE_SIZE, DMA_BIDIRECTIONAL);
777 put_page(dmatest_page);
778
779 if (status != 0 && test_type != MXGEFW_CMD_UNALIGNED_TEST)
780 dev_warn(&mgp->pdev->dev, "DMA %s benchmark failed: %d\n",
781 test, status);
782
783 return status;
784}
785
786static int myri10ge_reset(struct myri10ge_priv *mgp)
787{
788 struct myri10ge_cmd cmd;
789 int status;
790 size_t bytes;
723 791
724 /* try to send a reset command to the card to see if it 792 /* try to send a reset command to the card to see if it
725 * is alive */ 793 * is alive */
@@ -729,11 +797,8 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
729 dev_err(&mgp->pdev->dev, "failed reset\n"); 797 dev_err(&mgp->pdev->dev, "failed reset\n");
730 return -ENXIO; 798 return -ENXIO;
731 } 799 }
732 dmatest_page = alloc_page(GFP_KERNEL); 800
733 if (!dmatest_page) 801 (void)myri10ge_dma_test(mgp, MXGEFW_DMA_TEST);
734 return -ENOMEM;
735 dmatest_bus = pci_map_page(mgp->pdev, dmatest_page, 0, PAGE_SIZE,
736 DMA_BIDIRECTIONAL);
737 802
738 /* Now exchange information about interrupts */ 803 /* Now exchange information about interrupts */
739 804
@@ -761,52 +826,6 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
761 } 826 }
762 put_be32(htonl(mgp->intr_coal_delay), mgp->intr_coal_delay_ptr); 827 put_be32(htonl(mgp->intr_coal_delay), mgp->intr_coal_delay_ptr);
763 828
764 /* Run a small DMA test.
765 * The magic multipliers to the length tell the firmware
766 * to do DMA read, write, or read+write tests. The
767 * results are returned in cmd.data0. The upper 16
768 * bits or the return is the number of transfers completed.
769 * The lower 16 bits is the time in 0.5us ticks that the
770 * transfers took to complete.
771 */
772
773 len = mgp->tx.boundary;
774
775 cmd.data0 = MYRI10GE_LOWPART_TO_U32(dmatest_bus);
776 cmd.data1 = MYRI10GE_HIGHPART_TO_U32(dmatest_bus);
777 cmd.data2 = len * 0x10000;
778 status = myri10ge_send_cmd(mgp, MXGEFW_DMA_TEST, &cmd, 0);
779 if (status == 0)
780 mgp->read_dma = ((cmd.data0 >> 16) * len * 2) /
781 (cmd.data0 & 0xffff);
782 else
783 dev_warn(&mgp->pdev->dev, "DMA read benchmark failed: %d\n",
784 status);
785 cmd.data0 = MYRI10GE_LOWPART_TO_U32(dmatest_bus);
786 cmd.data1 = MYRI10GE_HIGHPART_TO_U32(dmatest_bus);
787 cmd.data2 = len * 0x1;
788 status = myri10ge_send_cmd(mgp, MXGEFW_DMA_TEST, &cmd, 0);
789 if (status == 0)
790 mgp->write_dma = ((cmd.data0 >> 16) * len * 2) /
791 (cmd.data0 & 0xffff);
792 else
793 dev_warn(&mgp->pdev->dev, "DMA write benchmark failed: %d\n",
794 status);
795
796 cmd.data0 = MYRI10GE_LOWPART_TO_U32(dmatest_bus);
797 cmd.data1 = MYRI10GE_HIGHPART_TO_U32(dmatest_bus);
798 cmd.data2 = len * 0x10001;
799 status = myri10ge_send_cmd(mgp, MXGEFW_DMA_TEST, &cmd, 0);
800 if (status == 0)
801 mgp->read_write_dma = ((cmd.data0 >> 16) * len * 2 * 2) /
802 (cmd.data0 & 0xffff);
803 else
804 dev_warn(&mgp->pdev->dev,
805 "DMA read/write benchmark failed: %d\n", status);
806
807 pci_unmap_page(mgp->pdev, dmatest_bus, PAGE_SIZE, DMA_BIDIRECTIONAL);
808 put_page(dmatest_page);
809
810 memset(mgp->rx_done.entry, 0, bytes); 829 memset(mgp->rx_done.entry, 0, bytes);
811 830
812 /* reset mcp/driver shared state back to 0 */ 831 /* reset mcp/driver shared state back to 0 */
@@ -820,10 +839,8 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
820 mgp->rx_done.cnt = 0; 839 mgp->rx_done.cnt = 0;
821 mgp->link_changes = 0; 840 mgp->link_changes = 0;
822 status = myri10ge_update_mac_address(mgp, mgp->dev->dev_addr); 841 status = myri10ge_update_mac_address(mgp, mgp->dev->dev_addr);
823 myri10ge_change_promisc(mgp, 0, 0);
824 myri10ge_change_pause(mgp, mgp->pause); 842 myri10ge_change_pause(mgp, mgp->pause);
825 if (mgp->adopted_rx_filter_bug) 843 myri10ge_set_multicast_list(mgp->dev);
826 (void)myri10ge_send_cmd(mgp, MXGEFW_ENABLE_ALLMULTI, &cmd, 1);
827 return status; 844 return status;
828} 845}
829 846
@@ -1355,7 +1372,9 @@ static const char myri10ge_gstrings_stats[][ETH_GSTRING_LEN] = {
1355 "tx_req", "tx_done", "rx_small_cnt", "rx_big_cnt", 1372 "tx_req", "tx_done", "rx_small_cnt", "rx_big_cnt",
1356 "wake_queue", "stop_queue", "watchdog_resets", "tx_linearized", 1373 "wake_queue", "stop_queue", "watchdog_resets", "tx_linearized",
1357 "link_changes", "link_up", "dropped_link_overflow", 1374 "link_changes", "link_up", "dropped_link_overflow",
1358 "dropped_link_error_or_filtered", "dropped_multicast_filtered", 1375 "dropped_link_error_or_filtered",
1376 "dropped_pause", "dropped_bad_phy", "dropped_bad_crc32",
1377 "dropped_unicast_filtered", "dropped_multicast_filtered",
1359 "dropped_runt", "dropped_overrun", "dropped_no_small_buffer", 1378 "dropped_runt", "dropped_overrun", "dropped_no_small_buffer",
1360 "dropped_no_big_buffer" 1379 "dropped_no_big_buffer"
1361}; 1380};
@@ -1412,6 +1431,11 @@ myri10ge_get_ethtool_stats(struct net_device *netdev,
1412 data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_link_overflow); 1431 data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_link_overflow);
1413 data[i++] = 1432 data[i++] =
1414 (unsigned int)ntohl(mgp->fw_stats->dropped_link_error_or_filtered); 1433 (unsigned int)ntohl(mgp->fw_stats->dropped_link_error_or_filtered);
1434 data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_pause);
1435 data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_bad_phy);
1436 data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_bad_crc32);
1437 data[i++] =
1438 (unsigned int)ntohl(mgp->fw_stats->dropped_unicast_filtered);
1415 data[i++] = 1439 data[i++] =
1416 (unsigned int)ntohl(mgp->fw_stats->dropped_multicast_filtered); 1440 (unsigned int)ntohl(mgp->fw_stats->dropped_multicast_filtered);
1417 data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_runt); 1441 data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_runt);
@@ -2276,7 +2300,7 @@ static void myri10ge_set_multicast_list(struct net_device *dev)
2276 myri10ge_change_promisc(mgp, dev->flags & IFF_PROMISC, 1); 2300 myri10ge_change_promisc(mgp, dev->flags & IFF_PROMISC, 1);
2277 2301
2278 /* This firmware is known to not support multicast */ 2302 /* This firmware is known to not support multicast */
2279 if (!mgp->fw_multicast_support || mgp->adopted_rx_filter_bug) 2303 if (!mgp->fw_multicast_support)
2280 return; 2304 return;
2281 2305
2282 /* Disable multicast filtering */ 2306 /* Disable multicast filtering */
@@ -2288,7 +2312,7 @@ static void myri10ge_set_multicast_list(struct net_device *dev)
2288 goto abort; 2312 goto abort;
2289 } 2313 }
2290 2314
2291 if (dev->flags & IFF_ALLMULTI) { 2315 if ((dev->flags & IFF_ALLMULTI) || mgp->adopted_rx_filter_bug) {
2292 /* request to disable multicast filtering, so quit here */ 2316 /* request to disable multicast filtering, so quit here */
2293 return; 2317 return;
2294 } 2318 }
@@ -2461,8 +2485,6 @@ static void myri10ge_enable_ecrc(struct myri10ge_priv *mgp)
2461 err_cap |= PCI_ERR_CAP_ECRC_GENE; 2485 err_cap |= PCI_ERR_CAP_ECRC_GENE;
2462 pci_write_config_dword(bridge, cap + PCI_ERR_CAP, err_cap); 2486 pci_write_config_dword(bridge, cap + PCI_ERR_CAP, err_cap);
2463 dev_info(dev, "Enabled ECRC on upstream bridge %s\n", pci_name(bridge)); 2487 dev_info(dev, "Enabled ECRC on upstream bridge %s\n", pci_name(bridge));
2464 mgp->tx.boundary = 4096;
2465 mgp->fw_name = myri10ge_fw_aligned;
2466} 2488}
2467 2489
2468/* 2490/*
@@ -2484,22 +2506,70 @@ static void myri10ge_enable_ecrc(struct myri10ge_priv *mgp)
2484 * firmware image, and set tx.boundary to 4KB. 2506 * firmware image, and set tx.boundary to 4KB.
2485 */ 2507 */
2486 2508
2487#define PCI_DEVICE_ID_INTEL_E5000_PCIE23 0x25f7 2509static void myri10ge_firmware_probe(struct myri10ge_priv *mgp)
2488#define PCI_DEVICE_ID_INTEL_E5000_PCIE47 0x25fa
2489#define PCI_DEVICE_ID_INTEL_6300ESB_PCIEE1 0x3510
2490#define PCI_DEVICE_ID_INTEL_6300ESB_PCIEE4 0x351b
2491#define PCI_DEVICE_ID_INTEL_E3000_PCIE 0x2779
2492#define PCI_DEVICE_ID_INTEL_E3010_PCIE 0x277a
2493#define PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_FIRST 0x140
2494#define PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_LAST 0x142
2495
2496static void myri10ge_select_firmware(struct myri10ge_priv *mgp)
2497{ 2510{
2498 struct pci_dev *bridge = mgp->pdev->bus->self; 2511 struct pci_dev *pdev = mgp->pdev;
2512 struct device *dev = &pdev->dev;
2513 int cap, status;
2514 u16 val;
2515
2516 mgp->tx.boundary = 4096;
2517 /*
2518 * Verify the max read request size was set to 4KB
2519 * before trying the test with 4KB.
2520 */
2521 cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
2522 if (cap < 64) {
2523 dev_err(dev, "Bad PCI_CAP_ID_EXP location %d\n", cap);
2524 goto abort;
2525 }
2526 status = pci_read_config_word(pdev, cap + PCI_EXP_DEVCTL, &val);
2527 if (status != 0) {
2528 dev_err(dev, "Couldn't read max read req size: %d\n", status);
2529 goto abort;
2530 }
2531 if ((val & (5 << 12)) != (5 << 12)) {
2532 dev_warn(dev, "Max Read Request size != 4096 (0x%x)\n", val);
2533 mgp->tx.boundary = 2048;
2534 }
2535 /*
2536 * load the optimized firmware (which assumes aligned PCIe
2537 * completions) in order to see if it works on this host.
2538 */
2539 mgp->fw_name = myri10ge_fw_aligned;
2540 status = myri10ge_load_firmware(mgp);
2541 if (status != 0) {
2542 goto abort;
2543 }
2544
2545 /*
2546 * Enable ECRC if possible
2547 */
2548 myri10ge_enable_ecrc(mgp);
2549
2550 /*
2551 * Run a DMA test which watches for unaligned completions and
2552 * aborts on the first one seen.
2553 */
2499 2554
2555 status = myri10ge_dma_test(mgp, MXGEFW_CMD_UNALIGNED_TEST);
2556 if (status == 0)
2557 return; /* keep the aligned firmware */
2558
2559 if (status != -E2BIG)
2560 dev_warn(dev, "DMA test failed: %d\n", status);
2561 if (status == -ENOSYS)
2562 dev_warn(dev, "Falling back to ethp! "
2563 "Please install up to date fw\n");
2564abort:
2565 /* fall back to using the unaligned firmware */
2500 mgp->tx.boundary = 2048; 2566 mgp->tx.boundary = 2048;
2501 mgp->fw_name = myri10ge_fw_unaligned; 2567 mgp->fw_name = myri10ge_fw_unaligned;
2502 2568
2569}
2570
2571static void myri10ge_select_firmware(struct myri10ge_priv *mgp)
2572{
2503 if (myri10ge_force_firmware == 0) { 2573 if (myri10ge_force_firmware == 0) {
2504 int link_width, exp_cap; 2574 int link_width, exp_cap;
2505 u16 lnk; 2575 u16 lnk;
@@ -2508,8 +2578,6 @@ static void myri10ge_select_firmware(struct myri10ge_priv *mgp)
2508 pci_read_config_word(mgp->pdev, exp_cap + PCI_EXP_LNKSTA, &lnk); 2578 pci_read_config_word(mgp->pdev, exp_cap + PCI_EXP_LNKSTA, &lnk);
2509 link_width = (lnk >> 4) & 0x3f; 2579 link_width = (lnk >> 4) & 0x3f;
2510 2580
2511 myri10ge_enable_ecrc(mgp);
2512
2513 /* Check to see if Link is less than 8 or if the 2581 /* Check to see if Link is less than 8 or if the
2514 * upstream bridge is known to provide aligned 2582 * upstream bridge is known to provide aligned
2515 * completions */ 2583 * completions */
@@ -2518,46 +2586,8 @@ static void myri10ge_select_firmware(struct myri10ge_priv *mgp)
2518 link_width); 2586 link_width);
2519 mgp->tx.boundary = 4096; 2587 mgp->tx.boundary = 4096;
2520 mgp->fw_name = myri10ge_fw_aligned; 2588 mgp->fw_name = myri10ge_fw_aligned;
2521 } else if (bridge && 2589 } else {
2522 /* ServerWorks HT2000/HT1000 */ 2590 myri10ge_firmware_probe(mgp);
2523 ((bridge->vendor == PCI_VENDOR_ID_SERVERWORKS
2524 && bridge->device ==
2525 PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE)
2526 /* ServerWorks HT2100 */
2527 || (bridge->vendor == PCI_VENDOR_ID_SERVERWORKS
2528 && bridge->device >=
2529 PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_FIRST
2530 && bridge->device <=
2531 PCI_DEVICE_ID_SERVERWORKS_HT2100_PCIE_LAST)
2532 /* All Intel E3000/E3010 PCIE ports */
2533 || (bridge->vendor == PCI_VENDOR_ID_INTEL
2534 && (bridge->device ==
2535 PCI_DEVICE_ID_INTEL_E3000_PCIE
2536 || bridge->device ==
2537 PCI_DEVICE_ID_INTEL_E3010_PCIE))
2538 /* All Intel 6310/6311/6321ESB PCIE ports */
2539 || (bridge->vendor == PCI_VENDOR_ID_INTEL
2540 && bridge->device >=
2541 PCI_DEVICE_ID_INTEL_6300ESB_PCIEE1
2542 && bridge->device <=
2543 PCI_DEVICE_ID_INTEL_6300ESB_PCIEE4)
2544 /* All Intel E5000 PCIE ports */
2545 || (bridge->vendor == PCI_VENDOR_ID_INTEL
2546 && bridge->device >=
2547 PCI_DEVICE_ID_INTEL_E5000_PCIE23
2548 && bridge->device <=
2549 PCI_DEVICE_ID_INTEL_E5000_PCIE47))) {
2550 dev_info(&mgp->pdev->dev,
2551 "Assuming aligned completions (0x%x:0x%x)\n",
2552 bridge->vendor, bridge->device);
2553 mgp->tx.boundary = 4096;
2554 mgp->fw_name = myri10ge_fw_aligned;
2555 } else if (bridge &&
2556 bridge->vendor == PCI_VENDOR_ID_SGI &&
2557 bridge->device == 0x4002 /* TIOCE pcie-port */ ) {
2558 /* this pcie bridge does not support 4K rdma request */
2559 mgp->tx.boundary = 2048;
2560 mgp->fw_name = myri10ge_fw_aligned;
2561 } 2591 }
2562 } else { 2592 } else {
2563 if (myri10ge_force_firmware == 1) { 2593 if (myri10ge_force_firmware == 1) {
@@ -2825,7 +2855,6 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2825 status = -ENODEV; 2855 status = -ENODEV;
2826 goto abort_with_netdev; 2856 goto abort_with_netdev;
2827 } 2857 }
2828 myri10ge_select_firmware(mgp);
2829 2858
2830 /* Find the vendor-specific cap so we can check 2859 /* Find the vendor-specific cap so we can check
2831 * the reboot register later on */ 2860 * the reboot register later on */
@@ -2919,6 +2948,8 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2919 goto abort_with_ioremap; 2948 goto abort_with_ioremap;
2920 memset(mgp->rx_done.entry, 0, bytes); 2949 memset(mgp->rx_done.entry, 0, bytes);
2921 2950
2951 myri10ge_select_firmware(mgp);
2952
2922 status = myri10ge_load_firmware(mgp); 2953 status = myri10ge_load_firmware(mgp);
2923 if (status != 0) { 2954 if (status != 0) {
2924 dev_err(&pdev->dev, "failed to load firmware\n"); 2955 dev_err(&pdev->dev, "failed to load firmware\n");
diff --git a/drivers/net/myri10ge/myri10ge_mcp.h b/drivers/net/myri10ge/myri10ge_mcp.h
index 29463b301a84..a1d2a22296a9 100644
--- a/drivers/net/myri10ge/myri10ge_mcp.h
+++ b/drivers/net/myri10ge/myri10ge_mcp.h
@@ -200,6 +200,13 @@ enum myri10ge_mcp_cmd_type {
200 /* data0, data1 = bus addr, 200 /* data0, data1 = bus addr,
201 * data2 = sizeof(struct mcp_irq_data) from driver point of view, allows 201 * data2 = sizeof(struct mcp_irq_data) from driver point of view, allows
202 * adding new stuff to mcp_irq_data without changing the ABI */ 202 * adding new stuff to mcp_irq_data without changing the ABI */
203
204 MXGEFW_CMD_UNALIGNED_TEST,
205 /* same than DMA_TEST (same args) but abort with UNALIGNED on unaligned
206 * chipset */
207
208 MXGEFW_CMD_UNALIGNED_STATUS
209 /* return data = boolean, true if the chipset is known to be unaligned */
203}; 210};
204 211
205enum myri10ge_mcp_cmd_status { 212enum myri10ge_mcp_cmd_status {
@@ -212,18 +219,27 @@ enum myri10ge_mcp_cmd_status {
212 MXGEFW_CMD_ERROR_HASH_ERROR, 219 MXGEFW_CMD_ERROR_HASH_ERROR,
213 MXGEFW_CMD_ERROR_BAD_PORT, 220 MXGEFW_CMD_ERROR_BAD_PORT,
214 MXGEFW_CMD_ERROR_RESOURCES, 221 MXGEFW_CMD_ERROR_RESOURCES,
215 MXGEFW_CMD_ERROR_MULTICAST 222 MXGEFW_CMD_ERROR_MULTICAST,
223 MXGEFW_CMD_ERROR_UNALIGNED
216}; 224};
217 225
218#define MXGEFW_OLD_IRQ_DATA_LEN 40 226#define MXGEFW_OLD_IRQ_DATA_LEN 40
219 227
220struct mcp_irq_data { 228struct mcp_irq_data {
221 /* add new counters at the beginning */ 229 /* add new counters at the beginning */
222 __be32 future_use[5]; 230 __be32 future_use[1];
231 __be32 dropped_pause;
232 __be32 dropped_unicast_filtered;
233 __be32 dropped_bad_crc32;
234 __be32 dropped_bad_phy;
223 __be32 dropped_multicast_filtered; 235 __be32 dropped_multicast_filtered;
224 /* 40 Bytes */ 236 /* 40 Bytes */
225 __be32 send_done_count; 237 __be32 send_done_count;
226 238
239#define MXGEFW_LINK_DOWN 0
240#define MXGEFW_LINK_UP 1
241#define MXGEFW_LINK_MYRINET 2
242#define MXGEFW_LINK_UNKNOWN 3
227 __be32 link_up; 243 __be32 link_up;
228 __be32 dropped_link_overflow; 244 __be32 dropped_link_overflow;
229 __be32 dropped_link_error_or_filtered; 245 __be32 dropped_link_error_or_filtered;
diff --git a/drivers/net/natsemi.c b/drivers/net/natsemi.c
index a8d7ff2c96ac..223e0e6264ba 100644
--- a/drivers/net/natsemi.c
+++ b/drivers/net/natsemi.c
@@ -81,6 +81,8 @@ static const int multicast_filter_limit = 100;
81 Setting to > 1518 effectively disables this feature. */ 81 Setting to > 1518 effectively disables this feature. */
82static int rx_copybreak; 82static int rx_copybreak;
83 83
84static int dspcfg_workaround = 1;
85
84/* Used to pass the media type, etc. 86/* Used to pass the media type, etc.
85 Both 'options[]' and 'full_duplex[]' should exist for driver 87 Both 'options[]' and 'full_duplex[]' should exist for driver
86 interoperability. 88 interoperability.
@@ -139,12 +141,14 @@ MODULE_LICENSE("GPL");
139module_param(mtu, int, 0); 141module_param(mtu, int, 0);
140module_param(debug, int, 0); 142module_param(debug, int, 0);
141module_param(rx_copybreak, int, 0); 143module_param(rx_copybreak, int, 0);
144module_param(dspcfg_workaround, int, 1);
142module_param_array(options, int, NULL, 0); 145module_param_array(options, int, NULL, 0);
143module_param_array(full_duplex, int, NULL, 0); 146module_param_array(full_duplex, int, NULL, 0);
144MODULE_PARM_DESC(mtu, "DP8381x MTU (all boards)"); 147MODULE_PARM_DESC(mtu, "DP8381x MTU (all boards)");
145MODULE_PARM_DESC(debug, "DP8381x default debug level"); 148MODULE_PARM_DESC(debug, "DP8381x default debug level");
146MODULE_PARM_DESC(rx_copybreak, 149MODULE_PARM_DESC(rx_copybreak,
147 "DP8381x copy breakpoint for copy-only-tiny-frames"); 150 "DP8381x copy breakpoint for copy-only-tiny-frames");
151MODULE_PARM_DESC(dspcfg_workaround, "DP8381x: control DspCfg workaround");
148MODULE_PARM_DESC(options, 152MODULE_PARM_DESC(options,
149 "DP8381x: Bits 0-3: media type, bit 17: full duplex"); 153 "DP8381x: Bits 0-3: media type, bit 17: full duplex");
150MODULE_PARM_DESC(full_duplex, "DP8381x full duplex setting(s) (1)"); 154MODULE_PARM_DESC(full_duplex, "DP8381x full duplex setting(s) (1)");
@@ -590,6 +594,7 @@ struct netdev_private {
590 u32 srr; 594 u32 srr;
591 /* expected DSPCFG value */ 595 /* expected DSPCFG value */
592 u16 dspcfg; 596 u16 dspcfg;
597 int dspcfg_workaround;
593 /* parms saved in ethtool format */ 598 /* parms saved in ethtool format */
594 u16 speed; /* The forced speed, 10Mb, 100Mb, gigabit */ 599 u16 speed; /* The forced speed, 10Mb, 100Mb, gigabit */
595 u8 duplex; /* Duplex, half or full */ 600 u8 duplex; /* Duplex, half or full */
@@ -656,6 +661,56 @@ static int netdev_get_regs(struct net_device *dev, u8 *buf);
656static int netdev_get_eeprom(struct net_device *dev, u8 *buf); 661static int netdev_get_eeprom(struct net_device *dev, u8 *buf);
657static const struct ethtool_ops ethtool_ops; 662static const struct ethtool_ops ethtool_ops;
658 663
664#define NATSEMI_ATTR(_name) \
665static ssize_t natsemi_show_##_name(struct device *dev, \
666 struct device_attribute *attr, char *buf); \
667 static ssize_t natsemi_set_##_name(struct device *dev, \
668 struct device_attribute *attr, \
669 const char *buf, size_t count); \
670 static DEVICE_ATTR(_name, 0644, natsemi_show_##_name, natsemi_set_##_name)
671
672#define NATSEMI_CREATE_FILE(_dev, _name) \
673 device_create_file(&_dev->dev, &dev_attr_##_name)
674#define NATSEMI_REMOVE_FILE(_dev, _name) \
675 device_create_file(&_dev->dev, &dev_attr_##_name)
676
677NATSEMI_ATTR(dspcfg_workaround);
678
679static ssize_t natsemi_show_dspcfg_workaround(struct device *dev,
680 struct device_attribute *attr,
681 char *buf)
682{
683 struct netdev_private *np = netdev_priv(to_net_dev(dev));
684
685 return sprintf(buf, "%s\n", np->dspcfg_workaround ? "on" : "off");
686}
687
688static ssize_t natsemi_set_dspcfg_workaround(struct device *dev,
689 struct device_attribute *attr,
690 const char *buf, size_t count)
691{
692 struct netdev_private *np = netdev_priv(to_net_dev(dev));
693 int new_setting;
694 u32 flags;
695
696 /* Find out the new setting */
697 if (!strncmp("on", buf, count - 1) || !strncmp("1", buf, count - 1))
698 new_setting = 1;
699 else if (!strncmp("off", buf, count - 1)
700 || !strncmp("0", buf, count - 1))
701 new_setting = 0;
702 else
703 return count;
704
705 spin_lock_irqsave(&np->lock, flags);
706
707 np->dspcfg_workaround = new_setting;
708
709 spin_unlock_irqrestore(&np->lock, flags);
710
711 return count;
712}
713
659static inline void __iomem *ns_ioaddr(struct net_device *dev) 714static inline void __iomem *ns_ioaddr(struct net_device *dev)
660{ 715{
661 return (void __iomem *) dev->base_addr; 716 return (void __iomem *) dev->base_addr;
@@ -820,6 +875,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
820 np->ignore_phy = 1; 875 np->ignore_phy = 1;
821 else 876 else
822 np->ignore_phy = 0; 877 np->ignore_phy = 0;
878 np->dspcfg_workaround = dspcfg_workaround;
823 879
824 /* Initial port: 880 /* Initial port:
825 * - If configured to ignore the PHY set up for external. 881 * - If configured to ignore the PHY set up for external.
@@ -899,6 +955,9 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
899 if (i) 955 if (i)
900 goto err_register_netdev; 956 goto err_register_netdev;
901 957
958 if (NATSEMI_CREATE_FILE(pdev, dspcfg_workaround))
959 goto err_create_file;
960
902 if (netif_msg_drv(np)) { 961 if (netif_msg_drv(np)) {
903 printk(KERN_INFO "natsemi %s: %s at %#08lx (%s), ", 962 printk(KERN_INFO "natsemi %s: %s at %#08lx (%s), ",
904 dev->name, natsemi_pci_info[chip_idx].name, iostart, 963 dev->name, natsemi_pci_info[chip_idx].name, iostart,
@@ -915,6 +974,9 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
915 } 974 }
916 return 0; 975 return 0;
917 976
977 err_create_file:
978 unregister_netdev(dev);
979
918 err_register_netdev: 980 err_register_netdev:
919 iounmap(ioaddr); 981 iounmap(ioaddr);
920 982
@@ -1727,7 +1789,8 @@ static void init_registers(struct net_device *dev)
1727 * It seems that a reference set for this chip went out with incorrect info, 1789 * It seems that a reference set for this chip went out with incorrect info,
1728 * and there exist boards that aren't quite right. An unexpected voltage 1790 * and there exist boards that aren't quite right. An unexpected voltage
1729 * drop can cause the PHY to get itself in a weird state (basically reset). 1791 * drop can cause the PHY to get itself in a weird state (basically reset).
1730 * NOTE: this only seems to affect revC chips. 1792 * NOTE: this only seems to affect revC chips. The user can disable
1793 * this check via dspcfg_workaround sysfs option.
1731 * 3) check of death of the RX path due to OOM 1794 * 3) check of death of the RX path due to OOM
1732 */ 1795 */
1733static void netdev_timer(unsigned long data) 1796static void netdev_timer(unsigned long data)
@@ -1753,10 +1816,10 @@ static void netdev_timer(unsigned long data)
1753 writew(1, ioaddr+PGSEL); 1816 writew(1, ioaddr+PGSEL);
1754 dspcfg = readw(ioaddr+DSPCFG); 1817 dspcfg = readw(ioaddr+DSPCFG);
1755 writew(0, ioaddr+PGSEL); 1818 writew(0, ioaddr+PGSEL);
1756 if (dspcfg != np->dspcfg) { 1819 if (np->dspcfg_workaround && dspcfg != np->dspcfg) {
1757 if (!netif_queue_stopped(dev)) { 1820 if (!netif_queue_stopped(dev)) {
1758 spin_unlock_irq(&np->lock); 1821 spin_unlock_irq(&np->lock);
1759 if (netif_msg_hw(np)) 1822 if (netif_msg_drv(np))
1760 printk(KERN_NOTICE "%s: possible phy reset: " 1823 printk(KERN_NOTICE "%s: possible phy reset: "
1761 "re-initializing\n", dev->name); 1824 "re-initializing\n", dev->name);
1762 disable_irq(dev->irq); 1825 disable_irq(dev->irq);
@@ -3157,6 +3220,7 @@ static void __devexit natsemi_remove1 (struct pci_dev *pdev)
3157 struct net_device *dev = pci_get_drvdata(pdev); 3220 struct net_device *dev = pci_get_drvdata(pdev);
3158 void __iomem * ioaddr = ns_ioaddr(dev); 3221 void __iomem * ioaddr = ns_ioaddr(dev);
3159 3222
3223 NATSEMI_REMOVE_FILE(pdev, dspcfg_workaround);
3160 unregister_netdev (dev); 3224 unregister_netdev (dev);
3161 pci_release_regions (pdev); 3225 pci_release_regions (pdev);
3162 iounmap(ioaddr); 3226 iounmap(ioaddr);
diff --git a/drivers/net/ne.c b/drivers/net/ne.c
index a5c4199e2754..c9f74bf5f491 100644
--- a/drivers/net/ne.c
+++ b/drivers/net/ne.c
@@ -51,14 +51,11 @@ static const char version2[] =
51#include <linux/netdevice.h> 51#include <linux/netdevice.h>
52#include <linux/etherdevice.h> 52#include <linux/etherdevice.h>
53#include <linux/jiffies.h> 53#include <linux/jiffies.h>
54#include <linux/platform_device.h>
54 55
55#include <asm/system.h> 56#include <asm/system.h>
56#include <asm/io.h> 57#include <asm/io.h>
57 58
58#if defined(CONFIG_TOSHIBA_RBTX4927) || defined(CONFIG_TOSHIBA_RBTX4938)
59#include <asm/tx4938/rbtx4938.h>
60#endif
61
62#include "8390.h" 59#include "8390.h"
63 60
64#define DRV_NAME "ne" 61#define DRV_NAME "ne"
@@ -77,8 +74,13 @@ static const char version2[] =
77/* Do we have a non std. amount of memory? (in units of 256 byte pages) */ 74/* Do we have a non std. amount of memory? (in units of 256 byte pages) */
78/* #define PACKETBUF_MEMSIZE 0x40 */ 75/* #define PACKETBUF_MEMSIZE 0x40 */
79 76
77#if !defined(MODULE) && (defined(CONFIG_ISA) || defined(CONFIG_M32R))
78/* Do we need a portlist for the ISA auto-probe ? */
79#define NEEDS_PORTLIST
80#endif
81
80/* A zero-terminated list of I/O addresses to be probed at boot. */ 82/* A zero-terminated list of I/O addresses to be probed at boot. */
81#ifndef MODULE 83#ifdef NEEDS_PORTLIST
82static unsigned int netcard_portlist[] __initdata = { 84static unsigned int netcard_portlist[] __initdata = {
83 0x300, 0x280, 0x320, 0x340, 0x360, 0x380, 0 85 0x300, 0x280, 0x320, 0x340, 0x360, 0x380, 0
84}; 86};
@@ -146,7 +148,7 @@ bad_clone_list[] __initdata = {
146# define DCR_VAL 0x49 148# define DCR_VAL 0x49
147#endif 149#endif
148 150
149static int ne_probe1(struct net_device *dev, int ioaddr); 151static int ne_probe1(struct net_device *dev, unsigned long ioaddr);
150static int ne_probe_isapnp(struct net_device *dev); 152static int ne_probe_isapnp(struct net_device *dev);
151 153
152static int ne_open(struct net_device *dev); 154static int ne_open(struct net_device *dev);
@@ -184,8 +186,8 @@ static void ne_block_output(struct net_device *dev, const int count,
184 186
185static int __init do_ne_probe(struct net_device *dev) 187static int __init do_ne_probe(struct net_device *dev)
186{ 188{
187 unsigned int base_addr = dev->base_addr; 189 unsigned long base_addr = dev->base_addr;
188#ifndef MODULE 190#ifdef NEEDS_PORTLIST
189 int orig_irq = dev->irq; 191 int orig_irq = dev->irq;
190#endif 192#endif
191 193
@@ -201,7 +203,7 @@ static int __init do_ne_probe(struct net_device *dev)
201 if (isapnp_present() && (ne_probe_isapnp(dev) == 0)) 203 if (isapnp_present() && (ne_probe_isapnp(dev) == 0))
202 return 0; 204 return 0;
203 205
204#ifndef MODULE 206#ifdef NEEDS_PORTLIST
205 /* Last resort. The semi-risky ISA auto-probe. */ 207 /* Last resort. The semi-risky ISA auto-probe. */
206 for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) { 208 for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
207 int ioaddr = netcard_portlist[base_addr]; 209 int ioaddr = netcard_portlist[base_addr];
@@ -226,10 +228,6 @@ struct net_device * __init ne_probe(int unit)
226 sprintf(dev->name, "eth%d", unit); 228 sprintf(dev->name, "eth%d", unit);
227 netdev_boot_setup_check(dev); 229 netdev_boot_setup_check(dev);
228 230
229#ifdef CONFIG_TOSHIBA_RBTX4938
230 dev->base_addr = RBTX4938_RTL_8019_BASE;
231 dev->irq = RBTX4938_RTL_8019_IRQ;
232#endif
233 err = do_ne_probe(dev); 231 err = do_ne_probe(dev);
234 if (err) 232 if (err)
235 goto out; 233 goto out;
@@ -285,7 +283,7 @@ static int __init ne_probe_isapnp(struct net_device *dev)
285 return -ENODEV; 283 return -ENODEV;
286} 284}
287 285
288static int __init ne_probe1(struct net_device *dev, int ioaddr) 286static int __init ne_probe1(struct net_device *dev, unsigned long ioaddr)
289{ 287{
290 int i; 288 int i;
291 unsigned char SA_prom[32]; 289 unsigned char SA_prom[32];
@@ -324,7 +322,7 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
324 if (ei_debug && version_printed++ == 0) 322 if (ei_debug && version_printed++ == 0)
325 printk(KERN_INFO "%s" KERN_INFO "%s", version1, version2); 323 printk(KERN_INFO "%s" KERN_INFO "%s", version1, version2);
326 324
327 printk(KERN_INFO "NE*000 ethercard probe at %#3x:", ioaddr); 325 printk(KERN_INFO "NE*000 ethercard probe at %#3lx:", ioaddr);
328 326
329 /* A user with a poor card that fails to ack the reset, or that 327 /* A user with a poor card that fails to ack the reset, or that
330 does not have a valid 0x57,0x57 signature can still use this 328 does not have a valid 0x57,0x57 signature can still use this
@@ -516,8 +514,7 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
516 } 514 }
517#endif 515#endif
518 516
519 printk("\n%s: %s found at %#x, using IRQ %d.\n", 517 printk("\n");
520 dev->name, name, ioaddr, dev->irq);
521 518
522 ei_status.name = name; 519 ei_status.name = name;
523 ei_status.tx_start_page = start_page; 520 ei_status.tx_start_page = start_page;
@@ -547,6 +544,8 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
547 ret = register_netdev(dev); 544 ret = register_netdev(dev);
548 if (ret) 545 if (ret)
549 goto out_irq; 546 goto out_irq;
547 printk(KERN_INFO "%s: %s found at %#lx, using IRQ %d.\n",
548 dev->name, name, ioaddr, dev->irq);
550 return 0; 549 return 0;
551 550
552out_irq: 551out_irq:
@@ -807,6 +806,87 @@ retry:
807 return; 806 return;
808} 807}
809 808
809static int __init ne_drv_probe(struct platform_device *pdev)
810{
811 struct net_device *dev;
812 struct resource *res;
813 int err, irq;
814
815 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
816 irq = platform_get_irq(pdev, 0);
817 if (!res || irq < 0)
818 return -ENODEV;
819
820 dev = alloc_ei_netdev();
821 if (!dev)
822 return -ENOMEM;
823 dev->irq = irq;
824 dev->base_addr = res->start;
825 err = do_ne_probe(dev);
826 if (err) {
827 free_netdev(dev);
828 return err;
829 }
830 platform_set_drvdata(pdev, dev);
831 return 0;
832}
833
834static int __exit ne_drv_remove(struct platform_device *pdev)
835{
836 struct net_device *dev = platform_get_drvdata(pdev);
837
838 unregister_netdev(dev);
839 free_irq(dev->irq, dev);
840 release_region(dev->base_addr, NE_IO_EXTENT);
841 free_netdev(dev);
842 return 0;
843}
844
845#ifdef CONFIG_PM
846static int ne_drv_suspend(struct platform_device *pdev, pm_message_t state)
847{
848 struct net_device *dev = platform_get_drvdata(pdev);
849
850 if (netif_running(dev))
851 netif_device_detach(dev);
852 return 0;
853}
854
855static int ne_drv_resume(struct platform_device *pdev)
856{
857 struct net_device *dev = platform_get_drvdata(pdev);
858
859 if (netif_running(dev)) {
860 ne_reset_8390(dev);
861 NS8390_init(dev, 1);
862 netif_device_attach(dev);
863 }
864 return 0;
865}
866#else
867#define ne_drv_suspend NULL
868#define ne_drv_resume NULL
869#endif
870
871static struct platform_driver ne_driver = {
872 .remove = __exit_p(ne_drv_remove),
873 .suspend = ne_drv_suspend,
874 .resume = ne_drv_resume,
875 .driver = {
876 .name = DRV_NAME,
877 .owner = THIS_MODULE,
878 },
879};
880
881static int __init ne_init(void)
882{
883 return platform_driver_probe(&ne_driver, ne_drv_probe);
884}
885
886static void __exit ne_exit(void)
887{
888 platform_driver_unregister(&ne_driver);
889}
810 890
811#ifdef MODULE 891#ifdef MODULE
812#define MAX_NE_CARDS 4 /* Max number of NE cards per module */ 892#define MAX_NE_CARDS 4 /* Max number of NE cards per module */
@@ -832,6 +912,7 @@ ISA device autoprobes on a running machine are not recommended anyway. */
832int __init init_module(void) 912int __init init_module(void)
833{ 913{
834 int this_dev, found = 0; 914 int this_dev, found = 0;
915 int plat_found = !ne_init();
835 916
836 for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) { 917 for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
837 struct net_device *dev = alloc_ei_netdev(); 918 struct net_device *dev = alloc_ei_netdev();
@@ -845,7 +926,7 @@ int __init init_module(void)
845 continue; 926 continue;
846 } 927 }
847 free_netdev(dev); 928 free_netdev(dev);
848 if (found) 929 if (found || plat_found)
849 break; 930 break;
850 if (io[this_dev] != 0) 931 if (io[this_dev] != 0)
851 printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]); 932 printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]);
@@ -853,7 +934,7 @@ int __init init_module(void)
853 printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n"); 934 printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n");
854 return -ENXIO; 935 return -ENXIO;
855 } 936 }
856 if (found) 937 if (found || plat_found)
857 return 0; 938 return 0;
858 return -ENODEV; 939 return -ENODEV;
859} 940}
@@ -871,6 +952,7 @@ void __exit cleanup_module(void)
871{ 952{
872 int this_dev; 953 int this_dev;
873 954
955 ne_exit();
874 for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) { 956 for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
875 struct net_device *dev = dev_ne[this_dev]; 957 struct net_device *dev = dev_ne[this_dev];
876 if (dev) { 958 if (dev) {
@@ -880,4 +962,7 @@ void __exit cleanup_module(void)
880 } 962 }
881 } 963 }
882} 964}
965#else /* MODULE */
966module_init(ne_init);
967module_exit(ne_exit);
883#endif /* MODULE */ 968#endif /* MODULE */
diff --git a/drivers/net/pasemi_mac.c b/drivers/net/pasemi_mac.c
index 07eb9b24a97f..bc7f3dee6e5b 100644
--- a/drivers/net/pasemi_mac.c
+++ b/drivers/net/pasemi_mac.c
@@ -33,6 +33,8 @@
33#include <linux/tcp.h> 33#include <linux/tcp.h>
34#include <net/checksum.h> 34#include <net/checksum.h>
35 35
36#include <asm/irq.h>
37
36#include "pasemi_mac.h" 38#include "pasemi_mac.h"
37 39
38 40
@@ -51,6 +53,16 @@
51#define RX_RING_SIZE 512 53#define RX_RING_SIZE 512
52#define TX_RING_SIZE 512 54#define TX_RING_SIZE 512
53 55
56#define DEFAULT_MSG_ENABLE \
57 (NETIF_MSG_DRV | \
58 NETIF_MSG_PROBE | \
59 NETIF_MSG_LINK | \
60 NETIF_MSG_TIMER | \
61 NETIF_MSG_IFDOWN | \
62 NETIF_MSG_IFUP | \
63 NETIF_MSG_RX_ERR | \
64 NETIF_MSG_TX_ERR)
65
54#define TX_DESC(mac, num) ((mac)->tx->desc[(num) & (TX_RING_SIZE-1)]) 66#define TX_DESC(mac, num) ((mac)->tx->desc[(num) & (TX_RING_SIZE-1)])
55#define TX_DESC_INFO(mac, num) ((mac)->tx->desc_info[(num) & (TX_RING_SIZE-1)]) 67#define TX_DESC_INFO(mac, num) ((mac)->tx->desc_info[(num) & (TX_RING_SIZE-1)])
56#define RX_DESC(mac, num) ((mac)->rx->desc[(num) & (RX_RING_SIZE-1)]) 68#define RX_DESC(mac, num) ((mac)->rx->desc[(num) & (RX_RING_SIZE-1)])
@@ -59,11 +71,13 @@
59 71
60#define BUF_SIZE 1646 /* 1500 MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */ 72#define BUF_SIZE 1646 /* 1500 MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */
61 73
62/* XXXOJN these should come out of the device tree some day */ 74MODULE_LICENSE("GPL");
63#define PAS_DMA_CAP_BASE 0xe00d0040 75MODULE_AUTHOR ("Olof Johansson <olof@lixom.net>");
64#define PAS_DMA_CAP_SIZE 0x100 76MODULE_DESCRIPTION("PA Semi PWRficient Ethernet driver");
65#define PAS_DMA_COM_BASE 0xe00d0100 77
66#define PAS_DMA_COM_SIZE 0x100 78static int debug = -1; /* -1 == use DEFAULT_MSG_ENABLE as value */
79module_param(debug, int, 0);
80MODULE_PARM_DESC(debug, "PA Semi MAC bitmapped debugging message enable value");
67 81
68static struct pasdma_status *dma_status; 82static struct pasdma_status *dma_status;
69 83
@@ -80,7 +94,12 @@ static int pasemi_get_mac_addr(struct pasemi_mac *mac)
80 return -ENOENT; 94 return -ENOENT;
81 } 95 }
82 96
83 maddr = of_get_property(dn, "mac-address", NULL); 97 maddr = of_get_property(dn, "local-mac-address", NULL);
98
99 /* Fall back to mac-address for older firmware */
100 if (maddr == NULL)
101 maddr = of_get_property(dn, "mac-address", NULL);
102
84 if (maddr == NULL) { 103 if (maddr == NULL) {
85 dev_warn(&pdev->dev, 104 dev_warn(&pdev->dev,
86 "no mac address in device tree, not configuring\n"); 105 "no mac address in device tree, not configuring\n");
@@ -277,8 +296,8 @@ static void pasemi_mac_free_rx_resources(struct net_device *dev)
277 for (i = 0; i < RX_RING_SIZE; i++) { 296 for (i = 0; i < RX_RING_SIZE; i++) {
278 info = &RX_DESC_INFO(mac, i); 297 info = &RX_DESC_INFO(mac, i);
279 dp = &RX_DESC(mac, i); 298 dp = &RX_DESC(mac, i);
280 if (info->dma) { 299 if (info->skb) {
281 if (info->skb) { 300 if (info->dma) {
282 pci_unmap_single(mac->dma_pdev, 301 pci_unmap_single(mac->dma_pdev,
283 info->dma, 302 info->dma,
284 info->skb->len, 303 info->skb->len,
@@ -309,82 +328,120 @@ static void pasemi_mac_replenish_rx_ring(struct net_device *dev)
309 struct pasemi_mac *mac = netdev_priv(dev); 328 struct pasemi_mac *mac = netdev_priv(dev);
310 unsigned int i; 329 unsigned int i;
311 int start = mac->rx->next_to_fill; 330 int start = mac->rx->next_to_fill;
312 unsigned int count; 331 unsigned int limit, count;
313 332
314 count = (mac->rx->next_to_clean + RX_RING_SIZE - 333 limit = (mac->rx->next_to_clean + RX_RING_SIZE -
315 mac->rx->next_to_fill) & (RX_RING_SIZE - 1); 334 mac->rx->next_to_fill) & (RX_RING_SIZE - 1);
316 335
317 /* Check to see if we're doing first-time setup */ 336 /* Check to see if we're doing first-time setup */
318 if (unlikely(mac->rx->next_to_clean == 0 && mac->rx->next_to_fill == 0)) 337 if (unlikely(mac->rx->next_to_clean == 0 && mac->rx->next_to_fill == 0))
319 count = RX_RING_SIZE; 338 limit = RX_RING_SIZE;
320 339
321 if (count <= 0) 340 if (limit <= 0)
322 return; 341 return;
323 342
324 for (i = start; i < start + count; i++) { 343 i = start;
344 for (count = limit; count; count--) {
325 struct pasemi_mac_buffer *info = &RX_DESC_INFO(mac, i); 345 struct pasemi_mac_buffer *info = &RX_DESC_INFO(mac, i);
326 u64 *buff = &RX_BUFF(mac, i); 346 u64 *buff = &RX_BUFF(mac, i);
327 struct sk_buff *skb; 347 struct sk_buff *skb;
328 dma_addr_t dma; 348 dma_addr_t dma;
329 349
330 skb = dev_alloc_skb(BUF_SIZE); 350 /* skb might still be in there for recycle on short receives */
351 if (info->skb)
352 skb = info->skb;
353 else
354 skb = dev_alloc_skb(BUF_SIZE);
331 355
332 if (!skb) { 356 if (unlikely(!skb))
333 count = i - start;
334 break; 357 break;
335 }
336 358
337 dma = pci_map_single(mac->dma_pdev, skb->data, skb->len, 359 dma = pci_map_single(mac->dma_pdev, skb->data, skb->len,
338 PCI_DMA_FROMDEVICE); 360 PCI_DMA_FROMDEVICE);
339 361
340 if (dma_mapping_error(dma)) { 362 if (unlikely(dma_mapping_error(dma))) {
341 dev_kfree_skb_irq(info->skb); 363 dev_kfree_skb_irq(info->skb);
342 count = i - start;
343 break; 364 break;
344 } 365 }
345 366
346 info->skb = skb; 367 info->skb = skb;
347 info->dma = dma; 368 info->dma = dma;
348 *buff = XCT_RXB_LEN(BUF_SIZE) | XCT_RXB_ADDR(dma); 369 *buff = XCT_RXB_LEN(BUF_SIZE) | XCT_RXB_ADDR(dma);
370 i++;
349 } 371 }
350 372
351 wmb(); 373 wmb();
352 374
353 pci_write_config_dword(mac->dma_pdev, 375 pci_write_config_dword(mac->dma_pdev,
354 PAS_DMA_RXCHAN_INCR(mac->dma_rxch), 376 PAS_DMA_RXCHAN_INCR(mac->dma_rxch),
355 count); 377 limit - count);
356 pci_write_config_dword(mac->dma_pdev, 378 pci_write_config_dword(mac->dma_pdev,
357 PAS_DMA_RXINT_INCR(mac->dma_if), 379 PAS_DMA_RXINT_INCR(mac->dma_if),
358 count); 380 limit - count);
359 381
360 mac->rx->next_to_fill += count; 382 mac->rx->next_to_fill += limit - count;
361} 383}
362 384
385static void pasemi_mac_restart_rx_intr(struct pasemi_mac *mac)
386{
387 unsigned int reg, stat;
388 /* Re-enable packet count interrupts: finally
389 * ack the packet count interrupt we got in rx_intr.
390 */
391
392 pci_read_config_dword(mac->iob_pdev,
393 PAS_IOB_DMA_RXCH_STAT(mac->dma_rxch),
394 &stat);
395
396 reg = PAS_IOB_DMA_RXCH_RESET_PCNT(stat & PAS_IOB_DMA_RXCH_STAT_CNTDEL_M)
397 | PAS_IOB_DMA_RXCH_RESET_PINTC;
398
399 pci_write_config_dword(mac->iob_pdev,
400 PAS_IOB_DMA_RXCH_RESET(mac->dma_rxch),
401 reg);
402}
403
404static void pasemi_mac_restart_tx_intr(struct pasemi_mac *mac)
405{
406 unsigned int reg, stat;
407
408 /* Re-enable packet count interrupts */
409 pci_read_config_dword(mac->iob_pdev,
410 PAS_IOB_DMA_TXCH_STAT(mac->dma_txch), &stat);
411
412 reg = PAS_IOB_DMA_TXCH_RESET_PCNT(stat & PAS_IOB_DMA_TXCH_STAT_CNTDEL_M)
413 | PAS_IOB_DMA_TXCH_RESET_PINTC;
414
415 pci_write_config_dword(mac->iob_pdev,
416 PAS_IOB_DMA_TXCH_RESET(mac->dma_txch), reg);
417}
418
419
363static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit) 420static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit)
364{ 421{
365 unsigned int i; 422 unsigned int n;
366 int start, count; 423 int count;
424 struct pas_dma_xct_descr *dp;
425 struct pasemi_mac_buffer *info;
426 struct sk_buff *skb;
427 unsigned int i, len;
428 u64 macrx;
429 dma_addr_t dma;
367 430
368 spin_lock(&mac->rx->lock); 431 spin_lock(&mac->rx->lock);
369 432
370 start = mac->rx->next_to_clean; 433 n = mac->rx->next_to_clean;
371 count = 0;
372 434
373 for (i = start; i < (start + RX_RING_SIZE) && count < limit; i++) { 435 for (count = limit; count; count--) {
374 struct pas_dma_xct_descr *dp;
375 struct pasemi_mac_buffer *info;
376 struct sk_buff *skb;
377 unsigned int j, len;
378 dma_addr_t dma;
379 436
380 rmb(); 437 rmb();
381 438
382 dp = &RX_DESC(mac, i); 439 dp = &RX_DESC(mac, n);
440 macrx = dp->macrx;
383 441
384 if (!(dp->macrx & XCT_MACRX_O)) 442 if (!(macrx & XCT_MACRX_O))
385 break; 443 break;
386 444
387 count++;
388 445
389 info = NULL; 446 info = NULL;
390 447
@@ -396,29 +453,42 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit)
396 */ 453 */
397 454
398 dma = (dp->ptr & XCT_PTR_ADDR_M); 455 dma = (dp->ptr & XCT_PTR_ADDR_M);
399 for (j = start; j < (start + RX_RING_SIZE); j++) { 456 for (i = n; i < (n + RX_RING_SIZE); i++) {
400 info = &RX_DESC_INFO(mac, j); 457 info = &RX_DESC_INFO(mac, i);
401 if (info->dma == dma) 458 if (info->dma == dma)
402 break; 459 break;
403 } 460 }
404 461
405 BUG_ON(!info); 462 skb = info->skb;
406 BUG_ON(info->dma != dma); 463 info->dma = 0;
407 464
408 pci_unmap_single(mac->dma_pdev, info->dma, info->skb->len, 465 pci_unmap_single(mac->dma_pdev, dma, skb->len,
409 PCI_DMA_FROMDEVICE); 466 PCI_DMA_FROMDEVICE);
410 467
411 skb = info->skb; 468 len = (macrx & XCT_MACRX_LLEN_M) >> XCT_MACRX_LLEN_S;
412 469
413 len = (dp->macrx & XCT_MACRX_LLEN_M) >> XCT_MACRX_LLEN_S; 470 if (len < 256) {
471 struct sk_buff *new_skb =
472 netdev_alloc_skb(mac->netdev, len + NET_IP_ALIGN);
473 if (new_skb) {
474 skb_reserve(new_skb, NET_IP_ALIGN);
475 memcpy(new_skb->data - NET_IP_ALIGN,
476 skb->data - NET_IP_ALIGN,
477 len + NET_IP_ALIGN);
478 /* save the skb in buffer_info as good */
479 skb = new_skb;
480 }
481 /* else just continue with the old one */
482 } else
483 info->skb = NULL;
414 484
415 skb_put(skb, len); 485 skb_put(skb, len);
416 486
417 skb->protocol = eth_type_trans(skb, mac->netdev); 487 skb->protocol = eth_type_trans(skb, mac->netdev);
418 488
419 if ((dp->macrx & XCT_MACRX_HTY_M) == XCT_MACRX_HTY_IPV4_OK) { 489 if ((macrx & XCT_MACRX_HTY_M) == XCT_MACRX_HTY_IPV4_OK) {
420 skb->ip_summed = CHECKSUM_COMPLETE; 490 skb->ip_summed = CHECKSUM_COMPLETE;
421 skb->csum = (dp->macrx & XCT_MACRX_CSUM_M) >> 491 skb->csum = (macrx & XCT_MACRX_CSUM_M) >>
422 XCT_MACRX_CSUM_S; 492 XCT_MACRX_CSUM_S;
423 } else 493 } else
424 skb->ip_summed = CHECKSUM_NONE; 494 skb->ip_summed = CHECKSUM_NONE;
@@ -428,13 +498,13 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit)
428 498
429 netif_receive_skb(skb); 499 netif_receive_skb(skb);
430 500
431 info->dma = 0;
432 info->skb = NULL;
433 dp->ptr = 0; 501 dp->ptr = 0;
434 dp->macrx = 0; 502 dp->macrx = 0;
503
504 n++;
435 } 505 }
436 506
437 mac->rx->next_to_clean += count; 507 mac->rx->next_to_clean += limit - count;
438 pasemi_mac_replenish_rx_ring(mac->netdev); 508 pasemi_mac_replenish_rx_ring(mac->netdev);
439 509
440 spin_unlock(&mac->rx->lock); 510 spin_unlock(&mac->rx->lock);
@@ -476,6 +546,8 @@ static int pasemi_mac_clean_tx(struct pasemi_mac *mac)
476 mac->tx->next_to_clean += count; 546 mac->tx->next_to_clean += count;
477 spin_unlock_irqrestore(&mac->tx->lock, flags); 547 spin_unlock_irqrestore(&mac->tx->lock, flags);
478 548
549 netif_wake_queue(mac->netdev);
550
479 return count; 551 return count;
480} 552}
481 553
@@ -486,18 +558,28 @@ static irqreturn_t pasemi_mac_rx_intr(int irq, void *data)
486 struct pasemi_mac *mac = netdev_priv(dev); 558 struct pasemi_mac *mac = netdev_priv(dev);
487 unsigned int reg; 559 unsigned int reg;
488 560
489 if (!(*mac->rx_status & PAS_STATUS_INT)) 561 if (!(*mac->rx_status & PAS_STATUS_CAUSE_M))
490 return IRQ_NONE; 562 return IRQ_NONE;
491 563
492 netif_rx_schedule(dev); 564 if (*mac->rx_status & PAS_STATUS_ERROR)
493 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_COM_TIMEOUTCFG, 565 printk("rx_status reported error\n");
494 PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(0)); 566
567 /* Don't reset packet count so it won't fire again but clear
568 * all others.
569 */
570
571 pci_read_config_dword(mac->dma_pdev, PAS_DMA_RXINT_RCMDSTA(mac->dma_if), &reg);
495 572
496 reg = PAS_IOB_DMA_RXCH_RESET_PINTC | PAS_IOB_DMA_RXCH_RESET_SINTC | 573 reg = 0;
497 PAS_IOB_DMA_RXCH_RESET_DINTC; 574 if (*mac->rx_status & PAS_STATUS_SOFT)
575 reg |= PAS_IOB_DMA_RXCH_RESET_SINTC;
576 if (*mac->rx_status & PAS_STATUS_ERROR)
577 reg |= PAS_IOB_DMA_RXCH_RESET_DINTC;
498 if (*mac->rx_status & PAS_STATUS_TIMER) 578 if (*mac->rx_status & PAS_STATUS_TIMER)
499 reg |= PAS_IOB_DMA_RXCH_RESET_TINTC; 579 reg |= PAS_IOB_DMA_RXCH_RESET_TINTC;
500 580
581 netif_rx_schedule(dev);
582
501 pci_write_config_dword(mac->iob_pdev, 583 pci_write_config_dword(mac->iob_pdev,
502 PAS_IOB_DMA_RXCH_RESET(mac->dma_rxch), reg); 584 PAS_IOB_DMA_RXCH_RESET(mac->dma_rxch), reg);
503 585
@@ -510,31 +592,137 @@ static irqreturn_t pasemi_mac_tx_intr(int irq, void *data)
510 struct net_device *dev = data; 592 struct net_device *dev = data;
511 struct pasemi_mac *mac = netdev_priv(dev); 593 struct pasemi_mac *mac = netdev_priv(dev);
512 unsigned int reg; 594 unsigned int reg;
513 int was_full;
514 595
515 was_full = mac->tx->next_to_clean - mac->tx->next_to_use == TX_RING_SIZE; 596 if (!(*mac->tx_status & PAS_STATUS_CAUSE_M))
516
517 if (!(*mac->tx_status & PAS_STATUS_INT))
518 return IRQ_NONE; 597 return IRQ_NONE;
519 598
520 pasemi_mac_clean_tx(mac); 599 pasemi_mac_clean_tx(mac);
521 600
522 reg = PAS_IOB_DMA_TXCH_RESET_PINTC | PAS_IOB_DMA_TXCH_RESET_SINTC; 601 reg = PAS_IOB_DMA_TXCH_RESET_PINTC;
523 if (*mac->tx_status & PAS_STATUS_TIMER) 602
524 reg |= PAS_IOB_DMA_TXCH_RESET_TINTC; 603 if (*mac->tx_status & PAS_STATUS_SOFT)
604 reg |= PAS_IOB_DMA_TXCH_RESET_SINTC;
605 if (*mac->tx_status & PAS_STATUS_ERROR)
606 reg |= PAS_IOB_DMA_TXCH_RESET_DINTC;
525 607
526 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_TXCH_RESET(mac->dma_txch), 608 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_TXCH_RESET(mac->dma_txch),
527 reg); 609 reg);
528 610
529 if (was_full)
530 netif_wake_queue(dev);
531
532 return IRQ_HANDLED; 611 return IRQ_HANDLED;
533} 612}
534 613
614static void pasemi_adjust_link(struct net_device *dev)
615{
616 struct pasemi_mac *mac = netdev_priv(dev);
617 int msg;
618 unsigned int flags;
619 unsigned int new_flags;
620
621 if (!mac->phydev->link) {
622 /* If no link, MAC speed settings don't matter. Just report
623 * link down and return.
624 */
625 if (mac->link && netif_msg_link(mac))
626 printk(KERN_INFO "%s: Link is down.\n", dev->name);
627
628 netif_carrier_off(dev);
629 mac->link = 0;
630
631 return;
632 } else
633 netif_carrier_on(dev);
634
635 pci_read_config_dword(mac->pdev, PAS_MAC_CFG_PCFG, &flags);
636 new_flags = flags & ~(PAS_MAC_CFG_PCFG_HD | PAS_MAC_CFG_PCFG_SPD_M |
637 PAS_MAC_CFG_PCFG_TSR_M);
638
639 if (!mac->phydev->duplex)
640 new_flags |= PAS_MAC_CFG_PCFG_HD;
641
642 switch (mac->phydev->speed) {
643 case 1000:
644 new_flags |= PAS_MAC_CFG_PCFG_SPD_1G |
645 PAS_MAC_CFG_PCFG_TSR_1G;
646 break;
647 case 100:
648 new_flags |= PAS_MAC_CFG_PCFG_SPD_100M |
649 PAS_MAC_CFG_PCFG_TSR_100M;
650 break;
651 case 10:
652 new_flags |= PAS_MAC_CFG_PCFG_SPD_10M |
653 PAS_MAC_CFG_PCFG_TSR_10M;
654 break;
655 default:
656 printk("Unsupported speed %d\n", mac->phydev->speed);
657 }
658
659 /* Print on link or speed/duplex change */
660 msg = mac->link != mac->phydev->link || flags != new_flags;
661
662 mac->duplex = mac->phydev->duplex;
663 mac->speed = mac->phydev->speed;
664 mac->link = mac->phydev->link;
665
666 if (new_flags != flags)
667 pci_write_config_dword(mac->pdev, PAS_MAC_CFG_PCFG, new_flags);
668
669 if (msg && netif_msg_link(mac))
670 printk(KERN_INFO "%s: Link is up at %d Mbps, %s duplex.\n",
671 dev->name, mac->speed, mac->duplex ? "full" : "half");
672}
673
674static int pasemi_mac_phy_init(struct net_device *dev)
675{
676 struct pasemi_mac *mac = netdev_priv(dev);
677 struct device_node *dn, *phy_dn;
678 struct phy_device *phydev;
679 unsigned int phy_id;
680 const phandle *ph;
681 const unsigned int *prop;
682 struct resource r;
683 int ret;
684
685 dn = pci_device_to_OF_node(mac->pdev);
686 ph = of_get_property(dn, "phy-handle", NULL);
687 if (!ph)
688 return -ENODEV;
689 phy_dn = of_find_node_by_phandle(*ph);
690
691 prop = of_get_property(phy_dn, "reg", NULL);
692 ret = of_address_to_resource(phy_dn->parent, 0, &r);
693 if (ret)
694 goto err;
695
696 phy_id = *prop;
697 snprintf(mac->phy_id, BUS_ID_SIZE, PHY_ID_FMT, (int)r.start, phy_id);
698
699 of_node_put(phy_dn);
700
701 mac->link = 0;
702 mac->speed = 0;
703 mac->duplex = -1;
704
705 phydev = phy_connect(dev, mac->phy_id, &pasemi_adjust_link, 0, PHY_INTERFACE_MODE_SGMII);
706
707 if (IS_ERR(phydev)) {
708 printk(KERN_ERR "%s: Could not attach to phy\n", dev->name);
709 return PTR_ERR(phydev);
710 }
711
712 mac->phydev = phydev;
713
714 return 0;
715
716err:
717 of_node_put(phy_dn);
718 return -ENODEV;
719}
720
721
535static int pasemi_mac_open(struct net_device *dev) 722static int pasemi_mac_open(struct net_device *dev)
536{ 723{
537 struct pasemi_mac *mac = netdev_priv(dev); 724 struct pasemi_mac *mac = netdev_priv(dev);
725 int base_irq;
538 unsigned int flags; 726 unsigned int flags;
539 int ret; 727 int ret;
540 728
@@ -558,10 +746,18 @@ static int pasemi_mac_open(struct net_device *dev)
558 flags |= PAS_MAC_CFG_PCFG_TSR_1G | PAS_MAC_CFG_PCFG_SPD_1G; 746 flags |= PAS_MAC_CFG_PCFG_TSR_1G | PAS_MAC_CFG_PCFG_SPD_1G;
559 747
560 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_RXCH_CFG(mac->dma_rxch), 748 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_RXCH_CFG(mac->dma_rxch),
561 PAS_IOB_DMA_RXCH_CFG_CNTTH(30)); 749 PAS_IOB_DMA_RXCH_CFG_CNTTH(1));
562 750
751 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_TXCH_CFG(mac->dma_txch),
752 PAS_IOB_DMA_TXCH_CFG_CNTTH(32));
753
754 /* Clear out any residual packet count state from firmware */
755 pasemi_mac_restart_rx_intr(mac);
756 pasemi_mac_restart_tx_intr(mac);
757
758 /* 0xffffff is max value, about 16ms */
563 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_COM_TIMEOUTCFG, 759 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_COM_TIMEOUTCFG,
564 PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(1000000)); 760 PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(0xffffff));
565 761
566 pci_write_config_dword(mac->pdev, PAS_MAC_CFG_PCFG, flags); 762 pci_write_config_dword(mac->pdev, PAS_MAC_CFG_PCFG, flags);
567 763
@@ -595,31 +791,50 @@ static int pasemi_mac_open(struct net_device *dev)
595 791
596 pasemi_mac_replenish_rx_ring(dev); 792 pasemi_mac_replenish_rx_ring(dev);
597 793
794 ret = pasemi_mac_phy_init(dev);
795 /* Some configs don't have PHYs (XAUI etc), so don't complain about
796 * failed init due to -ENODEV.
797 */
798 if (ret && ret != -ENODEV)
799 dev_warn(&mac->pdev->dev, "phy init failed: %d\n", ret);
800
598 netif_start_queue(dev); 801 netif_start_queue(dev);
599 netif_poll_enable(dev); 802 netif_poll_enable(dev);
600 803
601 ret = request_irq(mac->dma_pdev->irq + mac->dma_txch, 804 /* Interrupts are a bit different for our DMA controller: While
602 &pasemi_mac_tx_intr, IRQF_DISABLED, 805 * it's got one a regular PCI device header, the interrupt there
806 * is really the base of the range it's using. Each tx and rx
807 * channel has it's own interrupt source.
808 */
809
810 base_irq = virq_to_hw(mac->dma_pdev->irq);
811
812 mac->tx_irq = irq_create_mapping(NULL, base_irq + mac->dma_txch);
813 mac->rx_irq = irq_create_mapping(NULL, base_irq + 20 + mac->dma_txch);
814
815 ret = request_irq(mac->tx_irq, &pasemi_mac_tx_intr, IRQF_DISABLED,
603 mac->tx->irq_name, dev); 816 mac->tx->irq_name, dev);
604 if (ret) { 817 if (ret) {
605 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", 818 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n",
606 mac->dma_pdev->irq + mac->dma_txch, ret); 819 base_irq + mac->dma_txch, ret);
607 goto out_tx_int; 820 goto out_tx_int;
608 } 821 }
609 822
610 ret = request_irq(mac->dma_pdev->irq + 20 + mac->dma_rxch, 823 ret = request_irq(mac->rx_irq, &pasemi_mac_rx_intr, IRQF_DISABLED,
611 &pasemi_mac_rx_intr, IRQF_DISABLED,
612 mac->rx->irq_name, dev); 824 mac->rx->irq_name, dev);
613 if (ret) { 825 if (ret) {
614 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", 826 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n",
615 mac->dma_pdev->irq + 20 + mac->dma_rxch, ret); 827 base_irq + 20 + mac->dma_rxch, ret);
616 goto out_rx_int; 828 goto out_rx_int;
617 } 829 }
618 830
831 if (mac->phydev)
832 phy_start(mac->phydev);
833
619 return 0; 834 return 0;
620 835
621out_rx_int: 836out_rx_int:
622 free_irq(mac->dma_pdev->irq + mac->dma_txch, dev); 837 free_irq(mac->tx_irq, dev);
623out_tx_int: 838out_tx_int:
624 netif_poll_disable(dev); 839 netif_poll_disable(dev);
625 netif_stop_queue(dev); 840 netif_stop_queue(dev);
@@ -639,6 +854,11 @@ static int pasemi_mac_close(struct net_device *dev)
639 unsigned int stat; 854 unsigned int stat;
640 int retries; 855 int retries;
641 856
857 if (mac->phydev) {
858 phy_stop(mac->phydev);
859 phy_disconnect(mac->phydev);
860 }
861
642 netif_stop_queue(dev); 862 netif_stop_queue(dev);
643 863
644 /* Clean out any pending buffers */ 864 /* Clean out any pending buffers */
@@ -660,40 +880,37 @@ static int pasemi_mac_close(struct net_device *dev)
660 pci_read_config_dword(mac->dma_pdev, 880 pci_read_config_dword(mac->dma_pdev,
661 PAS_DMA_TXCHAN_TCMDSTA(mac->dma_txch), 881 PAS_DMA_TXCHAN_TCMDSTA(mac->dma_txch),
662 &stat); 882 &stat);
663 if (stat & PAS_DMA_TXCHAN_TCMDSTA_ACT) 883 if (!(stat & PAS_DMA_TXCHAN_TCMDSTA_ACT))
664 break; 884 break;
665 cond_resched(); 885 cond_resched();
666 } 886 }
667 887
668 if (!(stat & PAS_DMA_TXCHAN_TCMDSTA_ACT)) { 888 if (stat & PAS_DMA_TXCHAN_TCMDSTA_ACT)
669 dev_err(&mac->dma_pdev->dev, "Failed to stop tx channel\n"); 889 dev_err(&mac->dma_pdev->dev, "Failed to stop tx channel\n");
670 }
671 890
672 for (retries = 0; retries < MAX_RETRIES; retries++) { 891 for (retries = 0; retries < MAX_RETRIES; retries++) {
673 pci_read_config_dword(mac->dma_pdev, 892 pci_read_config_dword(mac->dma_pdev,
674 PAS_DMA_RXCHAN_CCMDSTA(mac->dma_rxch), 893 PAS_DMA_RXCHAN_CCMDSTA(mac->dma_rxch),
675 &stat); 894 &stat);
676 if (stat & PAS_DMA_RXCHAN_CCMDSTA_ACT) 895 if (!(stat & PAS_DMA_RXCHAN_CCMDSTA_ACT))
677 break; 896 break;
678 cond_resched(); 897 cond_resched();
679 } 898 }
680 899
681 if (!(stat & PAS_DMA_RXCHAN_CCMDSTA_ACT)) { 900 if (stat & PAS_DMA_RXCHAN_CCMDSTA_ACT)
682 dev_err(&mac->dma_pdev->dev, "Failed to stop rx channel\n"); 901 dev_err(&mac->dma_pdev->dev, "Failed to stop rx channel\n");
683 }
684 902
685 for (retries = 0; retries < MAX_RETRIES; retries++) { 903 for (retries = 0; retries < MAX_RETRIES; retries++) {
686 pci_read_config_dword(mac->dma_pdev, 904 pci_read_config_dword(mac->dma_pdev,
687 PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 905 PAS_DMA_RXINT_RCMDSTA(mac->dma_if),
688 &stat); 906 &stat);
689 if (stat & PAS_DMA_RXINT_RCMDSTA_ACT) 907 if (!(stat & PAS_DMA_RXINT_RCMDSTA_ACT))
690 break; 908 break;
691 cond_resched(); 909 cond_resched();
692 } 910 }
693 911
694 if (!(stat & PAS_DMA_RXINT_RCMDSTA_ACT)) { 912 if (stat & PAS_DMA_RXINT_RCMDSTA_ACT)
695 dev_err(&mac->dma_pdev->dev, "Failed to stop rx interface\n"); 913 dev_err(&mac->dma_pdev->dev, "Failed to stop rx interface\n");
696 }
697 914
698 /* Then, disable the channel. This must be done separately from 915 /* Then, disable the channel. This must be done separately from
699 * stopping, since you can't disable when active. 916 * stopping, since you can't disable when active.
@@ -706,8 +923,8 @@ static int pasemi_mac_close(struct net_device *dev)
706 pci_write_config_dword(mac->dma_pdev, 923 pci_write_config_dword(mac->dma_pdev,
707 PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 0); 924 PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 0);
708 925
709 free_irq(mac->dma_pdev->irq + mac->dma_txch, dev); 926 free_irq(mac->tx_irq, dev);
710 free_irq(mac->dma_pdev->irq + 20 + mac->dma_rxch, dev); 927 free_irq(mac->rx_irq, dev);
711 928
712 /* Free resources */ 929 /* Free resources */
713 pasemi_mac_free_rx_resources(dev); 930 pasemi_mac_free_rx_resources(dev);
@@ -802,6 +1019,7 @@ static struct net_device_stats *pasemi_mac_get_stats(struct net_device *dev)
802 return &mac->stats; 1019 return &mac->stats;
803} 1020}
804 1021
1022
805static void pasemi_mac_set_rx_mode(struct net_device *dev) 1023static void pasemi_mac_set_rx_mode(struct net_device *dev)
806{ 1024{
807 struct pasemi_mac *mac = netdev_priv(dev); 1025 struct pasemi_mac *mac = netdev_priv(dev);
@@ -826,18 +1044,17 @@ static int pasemi_mac_poll(struct net_device *dev, int *budget)
826 1044
827 pkts = pasemi_mac_clean_rx(mac, limit); 1045 pkts = pasemi_mac_clean_rx(mac, limit);
828 1046
1047 dev->quota -= pkts;
1048 *budget -= pkts;
1049
829 if (pkts < limit) { 1050 if (pkts < limit) {
830 /* all done, no more packets present */ 1051 /* all done, no more packets present */
831 netif_rx_complete(dev); 1052 netif_rx_complete(dev);
832 1053
833 /* re-enable receive interrupts */ 1054 pasemi_mac_restart_rx_intr(mac);
834 pci_write_config_dword(mac->iob_pdev, PAS_IOB_DMA_COM_TIMEOUTCFG,
835 PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(1000000));
836 return 0; 1055 return 0;
837 } else { 1056 } else {
838 /* used up our quantum, so reschedule */ 1057 /* used up our quantum, so reschedule */
839 dev->quota -= pkts;
840 *budget -= pkts;
841 return 1; 1058 return 1;
842 } 1059 }
843} 1060}
@@ -937,6 +1154,11 @@ pasemi_mac_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
937 mac->rx_status = &dma_status->rx_sta[mac->dma_rxch]; 1154 mac->rx_status = &dma_status->rx_sta[mac->dma_rxch];
938 mac->tx_status = &dma_status->tx_sta[mac->dma_txch]; 1155 mac->tx_status = &dma_status->tx_sta[mac->dma_txch];
939 1156
1157 mac->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
1158
1159 /* Enable most messages by default */
1160 mac->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1;
1161
940 err = register_netdev(dev); 1162 err = register_netdev(dev);
941 1163
942 if (err) { 1164 if (err) {
@@ -1011,9 +1233,5 @@ int pasemi_mac_init_module(void)
1011 return pci_register_driver(&pasemi_mac_driver); 1233 return pci_register_driver(&pasemi_mac_driver);
1012} 1234}
1013 1235
1014MODULE_LICENSE("GPL");
1015MODULE_AUTHOR ("Olof Johansson <olof@lixom.net>");
1016MODULE_DESCRIPTION("PA Semi PWRficient Ethernet driver");
1017
1018module_init(pasemi_mac_init_module); 1236module_init(pasemi_mac_init_module);
1019module_exit(pasemi_mac_cleanup_module); 1237module_exit(pasemi_mac_cleanup_module);
diff --git a/drivers/net/pasemi_mac.h b/drivers/net/pasemi_mac.h
index c3e37e46a18a..8bc0cea8b145 100644
--- a/drivers/net/pasemi_mac.h
+++ b/drivers/net/pasemi_mac.h
@@ -24,6 +24,7 @@
24#include <linux/ethtool.h> 24#include <linux/ethtool.h>
25#include <linux/netdevice.h> 25#include <linux/netdevice.h>
26#include <linux/spinlock.h> 26#include <linux/spinlock.h>
27#include <linux/phy.h>
27 28
28struct pasemi_mac_txring { 29struct pasemi_mac_txring {
29 spinlock_t lock; 30 spinlock_t lock;
@@ -54,6 +55,7 @@ struct pasemi_mac {
54 struct pci_dev *pdev; 55 struct pci_dev *pdev;
55 struct pci_dev *dma_pdev; 56 struct pci_dev *dma_pdev;
56 struct pci_dev *iob_pdev; 57 struct pci_dev *iob_pdev;
58 struct phy_device *phydev;
57 struct net_device_stats stats; 59 struct net_device_stats stats;
58 60
59 /* Pointer to the cacheable per-channel status registers */ 61 /* Pointer to the cacheable per-channel status registers */
@@ -73,6 +75,14 @@ struct pasemi_mac {
73 75
74 struct pasemi_mac_txring *tx; 76 struct pasemi_mac_txring *tx;
75 struct pasemi_mac_rxring *rx; 77 struct pasemi_mac_rxring *rx;
78 unsigned long tx_irq;
79 unsigned long rx_irq;
80 int link;
81 int speed;
82 int duplex;
83
84 unsigned int msg_enable;
85 char phy_id[BUS_ID_SIZE];
76}; 86};
77 87
78/* Software status descriptor (desc_info) */ 88/* Software status descriptor (desc_info) */
@@ -193,11 +203,15 @@ enum {
193#define PAS_DMA_RXINT_RCMDSTA(i) (0x200+(i)*_PAS_DMA_RXINT_STRIDE) 203#define PAS_DMA_RXINT_RCMDSTA(i) (0x200+(i)*_PAS_DMA_RXINT_STRIDE)
194#define PAS_DMA_RXINT_RCMDSTA_EN 0x00000001 204#define PAS_DMA_RXINT_RCMDSTA_EN 0x00000001
195#define PAS_DMA_RXINT_RCMDSTA_ST 0x00000002 205#define PAS_DMA_RXINT_RCMDSTA_ST 0x00000002
196#define PAS_DMA_RXINT_RCMDSTA_OO 0x00000100 206#define PAS_DMA_RXINT_RCMDSTA_MBT 0x00000008
197#define PAS_DMA_RXINT_RCMDSTA_BP 0x00000200 207#define PAS_DMA_RXINT_RCMDSTA_MDR 0x00000010
198#define PAS_DMA_RXINT_RCMDSTA_DR 0x00000400 208#define PAS_DMA_RXINT_RCMDSTA_MOO 0x00000020
209#define PAS_DMA_RXINT_RCMDSTA_MBP 0x00000040
199#define PAS_DMA_RXINT_RCMDSTA_BT 0x00000800 210#define PAS_DMA_RXINT_RCMDSTA_BT 0x00000800
200#define PAS_DMA_RXINT_RCMDSTA_TB 0x00001000 211#define PAS_DMA_RXINT_RCMDSTA_DR 0x00001000
212#define PAS_DMA_RXINT_RCMDSTA_OO 0x00002000
213#define PAS_DMA_RXINT_RCMDSTA_BP 0x00004000
214#define PAS_DMA_RXINT_RCMDSTA_TB 0x00008000
201#define PAS_DMA_RXINT_RCMDSTA_ACT 0x00010000 215#define PAS_DMA_RXINT_RCMDSTA_ACT 0x00010000
202#define PAS_DMA_RXINT_RCMDSTA_DROPS_M 0xfffe0000 216#define PAS_DMA_RXINT_RCMDSTA_DROPS_M 0xfffe0000
203#define PAS_DMA_RXINT_RCMDSTA_DROPS_S 17 217#define PAS_DMA_RXINT_RCMDSTA_DROPS_S 17
@@ -297,6 +311,7 @@ enum {
297#define PAS_STATUS_DCNT_S 16 311#define PAS_STATUS_DCNT_S 16
298#define PAS_STATUS_BPCNT_M 0x0000ffff00000000ull 312#define PAS_STATUS_BPCNT_M 0x0000ffff00000000ull
299#define PAS_STATUS_BPCNT_S 32 313#define PAS_STATUS_BPCNT_S 32
314#define PAS_STATUS_CAUSE_M 0xf000000000000000ull
300#define PAS_STATUS_TIMER 0x1000000000000000ull 315#define PAS_STATUS_TIMER 0x1000000000000000ull
301#define PAS_STATUS_ERROR 0x2000000000000000ull 316#define PAS_STATUS_ERROR 0x2000000000000000ull
302#define PAS_STATUS_SOFT 0x4000000000000000ull 317#define PAS_STATUS_SOFT 0x4000000000000000ull
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c
index 809ec440b8eb..258d6f396186 100644
--- a/drivers/net/pcmcia/xirc2ps_cs.c
+++ b/drivers/net/pcmcia/xirc2ps_cs.c
@@ -1420,7 +1420,7 @@ set_addresses(struct net_device *dev)
1420 kio_addr_t ioaddr = dev->base_addr; 1420 kio_addr_t ioaddr = dev->base_addr;
1421 local_info_t *lp = netdev_priv(dev); 1421 local_info_t *lp = netdev_priv(dev);
1422 struct dev_mc_list *dmi = dev->mc_list; 1422 struct dev_mc_list *dmi = dev->mc_list;
1423 char *addr; 1423 unsigned char *addr;
1424 int i,j,k,n; 1424 int i,j,k,n;
1425 1425
1426 SelectPage(k=0x50); 1426 SelectPage(k=0x50);
@@ -1429,6 +1429,9 @@ set_addresses(struct net_device *dev)
1429 if (++n > 9) 1429 if (++n > 9)
1430 break; 1430 break;
1431 i = 0; 1431 i = 0;
1432 if (n > 1 && n <= dev->mc_count && dmi) {
1433 dmi = dmi->next;
1434 }
1432 } 1435 }
1433 if (j > 15) { 1436 if (j > 15) {
1434 j = 8; 1437 j = 8;
@@ -1436,10 +1439,9 @@ set_addresses(struct net_device *dev)
1436 SelectPage(k); 1439 SelectPage(k);
1437 } 1440 }
1438 1441
1439 if (n && n <= dev->mc_count && dmi) { 1442 if (n && n <= dev->mc_count && dmi)
1440 addr = dmi->dmi_addr; 1443 addr = dmi->dmi_addr;
1441 dmi = dmi->next; 1444 else
1442 } else
1443 addr = dev->dev_addr; 1445 addr = dev->dev_addr;
1444 1446
1445 if (lp->mohawk) 1447 if (lp->mohawk)
@@ -1465,10 +1467,10 @@ set_multicast_list(struct net_device *dev)
1465 if (dev->flags & IFF_PROMISC) { /* snoop */ 1467 if (dev->flags & IFF_PROMISC) { /* snoop */
1466 PutByte(XIRCREG42_SWC1, 0x06); /* set MPE and PME */ 1468 PutByte(XIRCREG42_SWC1, 0x06); /* set MPE and PME */
1467 } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) { 1469 } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) {
1468 PutByte(XIRCREG42_SWC1, 0x06); /* set MPE */ 1470 PutByte(XIRCREG42_SWC1, 0x02); /* set MPE */
1469 } else if (dev->mc_count) { 1471 } else if (dev->mc_count) {
1470 /* the chip can filter 9 addresses perfectly */ 1472 /* the chip can filter 9 addresses perfectly */
1471 PutByte(XIRCREG42_SWC1, 0x00); 1473 PutByte(XIRCREG42_SWC1, 0x01);
1472 SelectPage(0x40); 1474 SelectPage(0x40);
1473 PutByte(XIRCREG40_CMD0, Offline); 1475 PutByte(XIRCREG40_CMD0, Offline);
1474 set_addresses(dev); 1476 set_addresses(dev);
diff --git a/drivers/net/skge.c b/drivers/net/skge.c
index 21afe108d3cb..b07da1054add 100644
--- a/drivers/net/skge.c
+++ b/drivers/net/skge.c
@@ -135,10 +135,13 @@ static void skge_get_regs(struct net_device *dev, struct ethtool_regs *regs,
135/* Wake on Lan only supported on Yukon chips with rev 1 or above */ 135/* Wake on Lan only supported on Yukon chips with rev 1 or above */
136static u32 wol_supported(const struct skge_hw *hw) 136static u32 wol_supported(const struct skge_hw *hw)
137{ 137{
138 if (hw->chip_id == CHIP_ID_YUKON && hw->chip_rev != 0) 138 if (hw->chip_id == CHIP_ID_GENESIS)
139 return WAKE_MAGIC | WAKE_PHY;
140 else
141 return 0; 139 return 0;
140
141 if (hw->chip_id == CHIP_ID_YUKON && hw->chip_rev == 0)
142 return 0;
143
144 return WAKE_MAGIC | WAKE_PHY;
142} 145}
143 146
144static u32 pci_wake_enabled(struct pci_dev *dev) 147static u32 pci_wake_enabled(struct pci_dev *dev)
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 238c2ca34da6..a307310f13f5 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -124,10 +124,7 @@ static const struct pci_device_id sky2_id_table[] = {
124 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4361) }, /* 88E8050 */ 124 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4361) }, /* 88E8050 */
125 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4362) }, /* 88E8053 */ 125 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4362) }, /* 88E8053 */
126 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4363) }, /* 88E8055 */ 126 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4363) }, /* 88E8055 */
127#ifdef broken
128 /* This device causes data corruption problems that are not resolved */
129 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4364) }, /* 88E8056 */ 127 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4364) }, /* 88E8056 */
130#endif
131 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4366) }, /* 88EC036 */ 128 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4366) }, /* 88EC036 */
132 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4367) }, /* 88EC032 */ 129 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4367) }, /* 88EC032 */
133 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4368) }, /* 88EC034 */ 130 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4368) }, /* 88EC034 */
@@ -3581,10 +3578,21 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
3581 goto err_out; 3578 goto err_out;
3582 } 3579 }
3583 3580
3581 /* Some Gigabyte motherboards have 88e8056 but cause problems
3582 * There is some unresolved hardware related problem that causes
3583 * descriptor errors and receive data corruption.
3584 */
3585 if (pdev->vendor == PCI_VENDOR_ID_MARVELL &&
3586 pdev->device == 0x4364 && pdev->subsystem_vendor == 0x1458) {
3587 dev_err(&pdev->dev,
3588 "88E8056 on Gigabyte motherboards not supported\n");
3589 goto err_out_disable;
3590 }
3591
3584 err = pci_request_regions(pdev, DRV_NAME); 3592 err = pci_request_regions(pdev, DRV_NAME);
3585 if (err) { 3593 if (err) {
3586 dev_err(&pdev->dev, "cannot obtain PCI resources\n"); 3594 dev_err(&pdev->dev, "cannot obtain PCI resources\n");
3587 goto err_out; 3595 goto err_out_disable;
3588 } 3596 }
3589 3597
3590 pci_set_master(pdev); 3598 pci_set_master(pdev);
@@ -3721,6 +3729,7 @@ err_out_free_hw:
3721 kfree(hw); 3729 kfree(hw);
3722err_out_free_regions: 3730err_out_free_regions:
3723 pci_release_regions(pdev); 3731 pci_release_regions(pdev);
3732err_out_disable:
3724 pci_disable_device(pdev); 3733 pci_disable_device(pdev);
3725err_out: 3734err_out:
3726 return err; 3735 return err;
diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h
index 7053026d6c76..111f23d05764 100644
--- a/drivers/net/smc91x.h
+++ b/drivers/net/smc91x.h
@@ -279,6 +279,40 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg)
279#define SMC_insw(a, r, p, l) insw((a) + (r), p, l) 279#define SMC_insw(a, r, p, l) insw((a) + (r), p, l)
280#define SMC_outsw(a, r, p, l) outsw((a) + (r), p, l) 280#define SMC_outsw(a, r, p, l) outsw((a) + (r), p, l)
281 281
282#elif defined(CONFIG_SUPERH)
283
284#if defined(CONFIG_SH_7780_SOLUTION_ENGINE) || defined(CONFIG_SH_7722_SOLUTION_ENGINE)
285#define SMC_CAN_USE_8BIT 0
286#define SMC_CAN_USE_16BIT 1
287#define SMC_CAN_USE_32BIT 0
288#define SMC_IO_SHIFT 0
289#define SMC_NOWAIT 1
290
291#define SMC_inb(a, r) (inw((a) + ((r)&~1)) >> (8*(r%2)))&0xff
292#define SMC_inw(a, r) inw((a) + (r))
293#define SMC_outb(v, a, r) outw(((inw((a)+((r)&~1))*(0xff<<8*(r%2)))) | ((v)<<(8*(r&2)))), (a) + ((r)&~1))
294
295#define SMC_outw(v, a, r) outw(v, (a) + (r))
296#define SMC_insw(a, r, p, l) insw((a) + (r), p, l)
297#define SMC_outsw(a, r, p, l) outsw((a) + (r), p, l)
298
299#else /* BOARDS */
300
301#define SMC_CAN_USE_8BIT 1
302#define SMC_CAN_USE_16BIT 1
303#define SMC_CAN_USE_32BIT 1
304
305#define SMC_inb(a, r) inb((a) + (r))
306#define SMC_inw(a, r) inw((a) + (r))
307#define SMC_outb(v, a, r) outb(v, (a) + (r))
308#define SMC_outw(v, a, r) outw(v, (a) + (r))
309#define SMC_insw(a, r, p, l) insw((a) + (r), p, l)
310#define SMC_outsw(a, r, p, l) outsw((a) + (r), p, l)
311
312#endif /* BOARDS */
313
314#define set_irq_type(irq, type) do {} while (0)
315
282#elif defined(CONFIG_M32R) 316#elif defined(CONFIG_M32R)
283 317
284#define SMC_CAN_USE_8BIT 0 318#define SMC_CAN_USE_8BIT 0
diff --git a/drivers/net/tc35815.c b/drivers/net/tc35815.c
index f1e2dfc795a2..463d600ed83d 100644
--- a/drivers/net/tc35815.c
+++ b/drivers/net/tc35815.c
@@ -540,7 +540,6 @@ static struct sk_buff *alloc_rxbuf_skb(struct net_device *dev,
540 skb = dev_alloc_skb(RX_BUF_SIZE); 540 skb = dev_alloc_skb(RX_BUF_SIZE);
541 if (!skb) 541 if (!skb)
542 return NULL; 542 return NULL;
543 skb->dev = dev;
544 *dma_handle = pci_map_single(hwdev, skb->data, RX_BUF_SIZE, 543 *dma_handle = pci_map_single(hwdev, skb->data, RX_BUF_SIZE,
545 PCI_DMA_FROMDEVICE); 544 PCI_DMA_FROMDEVICE);
546 if (pci_dma_mapping_error(*dma_handle)) { 545 if (pci_dma_mapping_error(*dma_handle)) {
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
index 0184614517f9..e273347dc606 100644
--- a/drivers/net/wireless/Kconfig
+++ b/drivers/net/wireless/Kconfig
@@ -267,7 +267,7 @@ config IPW2200_DEBUG
267 267
268config LIBERTAS_USB 268config LIBERTAS_USB
269 tristate "Marvell Libertas 8388 802.11a/b/g cards" 269 tristate "Marvell Libertas 8388 802.11a/b/g cards"
270 depends on NET_RADIO && USB 270 depends on USB && WLAN_80211
271 select FW_LOADER 271 select FW_LOADER
272 ---help--- 272 ---help---
273 A driver for Marvell Libertas 8388 USB devices. 273 A driver for Marvell Libertas 8388 USB devices.
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c
index cba64e4cfcd4..f770018fe1d5 100644
--- a/drivers/s390/cio/qdio.c
+++ b/drivers/s390/cio/qdio.c
@@ -996,18 +996,25 @@ __qdio_outbound_processing(struct qdio_q *q)
996 if (qdio_has_outbound_q_moved(q)) 996 if (qdio_has_outbound_q_moved(q))
997 qdio_kick_outbound_handler(q); 997 qdio_kick_outbound_handler(q);
998 998
999 if (q->is_iqdio_q) { 999 if (q->queue_type == QDIO_ZFCP_QFMT) {
1000 if ((!q->hydra_gives_outbound_pcis) &&
1001 (!qdio_is_outbound_q_done(q)))
1002 qdio_mark_q(q);
1003 }
1004 else if (((!q->is_iqdio_q) && (!q->is_pci_out)) ||
1005 (q->queue_type == QDIO_IQDIO_QFMT_ASYNCH)) {
1000 /* 1006 /*
1001 * for asynchronous queues, we better check, if the sent 1007 * make sure buffer switch from PRIMED to EMPTY is noticed
1002 * buffer is already switched from PRIMED to EMPTY. 1008 * and outbound_handler is called
1003 */ 1009 */
1004 if ((q->queue_type == QDIO_IQDIO_QFMT_ASYNCH) && 1010 if (qdio_is_outbound_q_done(q)) {
1005 !qdio_is_outbound_q_done(q)) 1011 del_timer(&q->timer);
1006 qdio_mark_q(q); 1012 } else {
1007 1013 if (!timer_pending(&q->timer))
1008 } else if (!q->hydra_gives_outbound_pcis) 1014 mod_timer(&q->timer, jiffies +
1009 if (!qdio_is_outbound_q_done(q)) 1015 QDIO_FORCE_CHECK_TIMEOUT);
1010 qdio_mark_q(q); 1016 }
1017 }
1011 1018
1012 qdio_release_q(q); 1019 qdio_release_q(q);
1013} 1020}
@@ -1826,6 +1833,7 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev,
1826 q->queue_type = QDIO_IQDIO_QFMT_ASYNCH; 1833 q->queue_type = QDIO_IQDIO_QFMT_ASYNCH;
1827 q->int_parm=int_parm; 1834 q->int_parm=int_parm;
1828 q->is_input_q=0; 1835 q->is_input_q=0;
1836 q->is_pci_out = 0;
1829 q->schid = irq_ptr->schid; 1837 q->schid = irq_ptr->schid;
1830 q->cdev = cdev; 1838 q->cdev = cdev;
1831 q->irq_ptr = irq_ptr; 1839 q->irq_ptr = irq_ptr;
@@ -1838,6 +1846,10 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev,
1838 q->tasklet.data=(unsigned long)q; 1846 q->tasklet.data=(unsigned long)q;
1839 q->tasklet.func=(void(*)(unsigned long)) 1847 q->tasklet.func=(void(*)(unsigned long))
1840 &qdio_outbound_processing; 1848 &qdio_outbound_processing;
1849 q->timer.function=(void(*)(unsigned long))
1850 &qdio_outbound_processing;
1851 q->timer.data = (long)q;
1852 init_timer(&q->timer);
1841 1853
1842 atomic_set(&q->busy_siga_counter,0); 1854 atomic_set(&q->busy_siga_counter,0);
1843 q->timing.busy_start=0; 1855 q->timing.busy_start=0;
@@ -2635,6 +2647,7 @@ qdio_shutdown(struct ccw_device *cdev, int how)
2635 2647
2636 for (i=0;i<irq_ptr->no_output_qs;i++) { 2648 for (i=0;i<irq_ptr->no_output_qs;i++) {
2637 tasklet_kill(&irq_ptr->output_qs[i]->tasklet); 2649 tasklet_kill(&irq_ptr->output_qs[i]->tasklet);
2650 del_timer(&irq_ptr->output_qs[i]->timer);
2638 wait_event_interruptible_timeout(cdev->private->wait_q, 2651 wait_event_interruptible_timeout(cdev->private->wait_q,
2639 !atomic_read(&irq_ptr-> 2652 !atomic_read(&irq_ptr->
2640 output_qs[i]-> 2653 output_qs[i]->
@@ -3458,6 +3471,10 @@ do_qdio_handle_outbound(struct qdio_q *q, unsigned int callflags,
3458 qdio_perf_stat_inc(&perf_stats.outbound_cnt); 3471 qdio_perf_stat_inc(&perf_stats.outbound_cnt);
3459 return; 3472 return;
3460 } 3473 }
3474 if (callflags & QDIO_FLAG_PCI_OUT)
3475 q->is_pci_out = 1;
3476 else
3477 q->is_pci_out = 0;
3461 if (q->is_iqdio_q) { 3478 if (q->is_iqdio_q) {
3462 /* one siga for every sbal */ 3479 /* one siga for every sbal */
3463 while (count--) 3480 while (count--)
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
index 2895392eaae4..6d7aad18f6f0 100644
--- a/drivers/s390/cio/qdio.h
+++ b/drivers/s390/cio/qdio.h
@@ -60,6 +60,7 @@
60#define QDIO_ACTIVATE_TIMEOUT ((5*HZ)>>10) 60#define QDIO_ACTIVATE_TIMEOUT ((5*HZ)>>10)
61#define QDIO_CLEANUP_CLEAR_TIMEOUT (20*HZ) 61#define QDIO_CLEANUP_CLEAR_TIMEOUT (20*HZ)
62#define QDIO_CLEANUP_HALT_TIMEOUT (10*HZ) 62#define QDIO_CLEANUP_HALT_TIMEOUT (10*HZ)
63#define QDIO_FORCE_CHECK_TIMEOUT (10*HZ)
63 64
64enum qdio_irq_states { 65enum qdio_irq_states {
65 QDIO_IRQ_STATE_INACTIVE, 66 QDIO_IRQ_STATE_INACTIVE,
@@ -511,8 +512,8 @@ struct qdio_q {
511 512
512 void *irq_ptr; 513 void *irq_ptr;
513 514
514#ifdef QDIO_USE_TIMERS_FOR_POLLING
515 struct timer_list timer; 515 struct timer_list timer;
516#ifdef QDIO_USE_TIMERS_FOR_POLLING
516 atomic_t timer_already_set; 517 atomic_t timer_already_set;
517 spinlock_t timer_lock; 518 spinlock_t timer_lock;
518#else /* QDIO_USE_TIMERS_FOR_POLLING */ 519#else /* QDIO_USE_TIMERS_FOR_POLLING */
@@ -558,6 +559,7 @@ struct qdio_q {
558 } timing; 559 } timing;
559 atomic_t busy_siga_counter; 560 atomic_t busy_siga_counter;
560 unsigned int queue_type; 561 unsigned int queue_type;
562 unsigned int is_pci_out;
561 563
562 /* leave this member at the end. won't be cleared in qdio_fill_qs */ 564 /* leave this member at the end. won't be cleared in qdio_fill_qs */
563 struct slib *slib; /* a page is allocated under this pointer, 565 struct slib *slib; /* a page is allocated under this pointer,
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
index e10e85e85c84..c358764f3264 100644
--- a/drivers/s390/net/netiucv.c
+++ b/drivers/s390/net/netiucv.c
@@ -1862,12 +1862,14 @@ static void netiucv_remove_connection(struct iucv_connection *conn)
1862 write_lock_bh(&iucv_connection_rwlock); 1862 write_lock_bh(&iucv_connection_rwlock);
1863 list_del_init(&conn->list); 1863 list_del_init(&conn->list);
1864 write_unlock_bh(&iucv_connection_rwlock); 1864 write_unlock_bh(&iucv_connection_rwlock);
1865 fsm_deltimer(&conn->timer);
1866 netiucv_purge_skb_queue(&conn->collect_queue);
1865 if (conn->path) { 1867 if (conn->path) {
1866 iucv_path_sever(conn->path, iucvMagic); 1868 iucv_path_sever(conn->path, iucvMagic);
1867 kfree(conn->path); 1869 kfree(conn->path);
1868 conn->path = NULL; 1870 conn->path = NULL;
1869 } 1871 }
1870 fsm_deltimer(&conn->timer); 1872 netiucv_purge_skb_queue(&conn->commit_queue);
1871 kfree_fsm(conn->fsm); 1873 kfree_fsm(conn->fsm);
1872 kfree_skb(conn->rx_buff); 1874 kfree_skb(conn->rx_buff);
1873 kfree_skb(conn->tx_buff); 1875 kfree_skb(conn->tx_buff);
@@ -2115,7 +2117,6 @@ static void __exit netiucv_exit(void)
2115 while (!list_empty(&iucv_connection_list)) { 2117 while (!list_empty(&iucv_connection_list)) {
2116 cp = list_entry(iucv_connection_list.next, 2118 cp = list_entry(iucv_connection_list.next,
2117 struct iucv_connection, list); 2119 struct iucv_connection, list);
2118 list_del(&cp->list);
2119 ndev = cp->netdev; 2120 ndev = cp->netdev;
2120 priv = netdev_priv(ndev); 2121 priv = netdev_priv(ndev);
2121 dev = priv->dev; 2122 dev = priv->dev;
diff --git a/drivers/s390/net/qeth_eddp.c b/drivers/s390/net/qeth_eddp.c
index dd7034fbfff8..4640f32daae5 100644
--- a/drivers/s390/net/qeth_eddp.c
+++ b/drivers/s390/net/qeth_eddp.c
@@ -620,10 +620,10 @@ qeth_eddp_create_context_tcp(struct qeth_card *card, struct sk_buff *skb,
620 620
621struct qeth_eddp_context * 621struct qeth_eddp_context *
622qeth_eddp_create_context(struct qeth_card *card, struct sk_buff *skb, 622qeth_eddp_create_context(struct qeth_card *card, struct sk_buff *skb,
623 struct qeth_hdr *qhdr) 623 struct qeth_hdr *qhdr, unsigned char sk_protocol)
624{ 624{
625 QETH_DBF_TEXT(trace, 5, "creddpc"); 625 QETH_DBF_TEXT(trace, 5, "creddpc");
626 switch (skb->sk->sk_protocol){ 626 switch (sk_protocol) {
627 case IPPROTO_TCP: 627 case IPPROTO_TCP:
628 return qeth_eddp_create_context_tcp(card, skb, qhdr); 628 return qeth_eddp_create_context_tcp(card, skb, qhdr);
629 default: 629 default:
diff --git a/drivers/s390/net/qeth_eddp.h b/drivers/s390/net/qeth_eddp.h
index 103768d3bab2..52910c9252c0 100644
--- a/drivers/s390/net/qeth_eddp.h
+++ b/drivers/s390/net/qeth_eddp.h
@@ -34,7 +34,8 @@ struct qeth_eddp_context_reference {
34}; 34};
35 35
36extern struct qeth_eddp_context * 36extern struct qeth_eddp_context *
37qeth_eddp_create_context(struct qeth_card *,struct sk_buff *,struct qeth_hdr *); 37qeth_eddp_create_context(struct qeth_card *,struct sk_buff *,
38 struct qeth_hdr *, unsigned char);
38 39
39extern void 40extern void
40qeth_eddp_put_context(struct qeth_eddp_context *); 41qeth_eddp_put_context(struct qeth_eddp_context *);
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c
index 6fd8870551d3..29d176036e5c 100644
--- a/drivers/s390/net/qeth_main.c
+++ b/drivers/s390/net/qeth_main.c
@@ -1682,6 +1682,21 @@ qeth_put_reply(struct qeth_reply *reply)
1682 kfree(reply); 1682 kfree(reply);
1683} 1683}
1684 1684
1685static void
1686qeth_issue_ipa_msg(struct qeth_ipa_cmd *cmd, struct qeth_card *card)
1687{
1688 int rc;
1689 int com;
1690 char * ipa_name;
1691
1692 com = cmd->hdr.command;
1693 rc = cmd->hdr.return_code;
1694 ipa_name = qeth_get_ipa_cmd_name(com);
1695
1696 PRINT_ERR("%s(x%X) for %s returned x%X \"%s\"\n", ipa_name, com,
1697 QETH_CARD_IFNAME(card), rc, qeth_get_ipa_msg(rc));
1698}
1699
1685static struct qeth_ipa_cmd * 1700static struct qeth_ipa_cmd *
1686qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob) 1701qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob)
1687{ 1702{
@@ -1690,8 +1705,11 @@ qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob)
1690 QETH_DBF_TEXT(trace,5,"chkipad"); 1705 QETH_DBF_TEXT(trace,5,"chkipad");
1691 if (IS_IPA(iob->data)){ 1706 if (IS_IPA(iob->data)){
1692 cmd = (struct qeth_ipa_cmd *) PDU_ENCAPSULATION(iob->data); 1707 cmd = (struct qeth_ipa_cmd *) PDU_ENCAPSULATION(iob->data);
1693 if (IS_IPA_REPLY(cmd)) 1708 if (IS_IPA_REPLY(cmd)) {
1709 if (cmd->hdr.return_code)
1710 qeth_issue_ipa_msg(cmd, card);
1694 return cmd; 1711 return cmd;
1712 }
1695 else { 1713 else {
1696 switch (cmd->hdr.command) { 1714 switch (cmd->hdr.command) {
1697 case IPA_CMD_STOPLAN: 1715 case IPA_CMD_STOPLAN:
@@ -2816,6 +2834,7 @@ qeth_flush_buffers(struct qeth_qdio_out_q *queue, int under_int,
2816 struct qeth_qdio_out_buffer *buf; 2834 struct qeth_qdio_out_buffer *buf;
2817 int rc; 2835 int rc;
2818 int i; 2836 int i;
2837 unsigned int qdio_flags;
2819 2838
2820 QETH_DBF_TEXT(trace, 6, "flushbuf"); 2839 QETH_DBF_TEXT(trace, 6, "flushbuf");
2821 2840
@@ -2859,13 +2878,13 @@ qeth_flush_buffers(struct qeth_qdio_out_q *queue, int under_int,
2859 queue->card->perf_stats.outbound_do_qdio_start_time = 2878 queue->card->perf_stats.outbound_do_qdio_start_time =
2860 qeth_get_micros(); 2879 qeth_get_micros();
2861 } 2880 }
2881 qdio_flags = QDIO_FLAG_SYNC_OUTPUT;
2862 if (under_int) 2882 if (under_int)
2863 rc = do_QDIO(CARD_DDEV(queue->card), 2883 qdio_flags |= QDIO_FLAG_UNDER_INTERRUPT;
2864 QDIO_FLAG_SYNC_OUTPUT | QDIO_FLAG_UNDER_INTERRUPT, 2884 if (atomic_read(&queue->set_pci_flags_count))
2865 queue->queue_no, index, count, NULL); 2885 qdio_flags |= QDIO_FLAG_PCI_OUT;
2866 else 2886 rc = do_QDIO(CARD_DDEV(queue->card), qdio_flags,
2867 rc = do_QDIO(CARD_DDEV(queue->card), QDIO_FLAG_SYNC_OUTPUT, 2887 queue->queue_no, index, count, NULL);
2868 queue->queue_no, index, count, NULL);
2869 if (queue->card->options.performance_stats) 2888 if (queue->card->options.performance_stats)
2870 queue->card->perf_stats.outbound_do_qdio_time += 2889 queue->card->perf_stats.outbound_do_qdio_time +=
2871 qeth_get_micros() - 2890 qeth_get_micros() -
@@ -4490,7 +4509,8 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
4490 qeth_fill_header(card, hdr, new_skb, ipv, cast_type); 4509 qeth_fill_header(card, hdr, new_skb, ipv, cast_type);
4491 } 4510 }
4492 if (large_send == QETH_LARGE_SEND_EDDP) { 4511 if (large_send == QETH_LARGE_SEND_EDDP) {
4493 ctx = qeth_eddp_create_context(card, new_skb, hdr); 4512 ctx = qeth_eddp_create_context(card, new_skb, hdr,
4513 skb->sk->sk_protocol);
4494 if (ctx == NULL) { 4514 if (ctx == NULL) {
4495 __qeth_free_new_skb(skb, new_skb); 4515 __qeth_free_new_skb(skb, new_skb);
4496 PRINT_WARN("could not create eddp context\n"); 4516 PRINT_WARN("could not create eddp context\n");
@@ -5948,9 +5968,6 @@ qeth_layer2_send_setmac_cb(struct qeth_card *card,
5948 cmd = (struct qeth_ipa_cmd *) data; 5968 cmd = (struct qeth_ipa_cmd *) data;
5949 if (cmd->hdr.return_code) { 5969 if (cmd->hdr.return_code) {
5950 QETH_DBF_TEXT_(trace, 2, "L2er%x", cmd->hdr.return_code); 5970 QETH_DBF_TEXT_(trace, 2, "L2er%x", cmd->hdr.return_code);
5951 PRINT_WARN("Error in registering MAC address on " \
5952 "device %s: x%x\n", CARD_BUS_ID(card),
5953 cmd->hdr.return_code);
5954 card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED; 5971 card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED;
5955 cmd->hdr.return_code = -EIO; 5972 cmd->hdr.return_code = -EIO;
5956 } else { 5973 } else {
@@ -5985,9 +6002,6 @@ qeth_layer2_send_delmac_cb(struct qeth_card *card,
5985 QETH_DBF_TEXT(trace, 2, "L2Dmaccb"); 6002 QETH_DBF_TEXT(trace, 2, "L2Dmaccb");
5986 cmd = (struct qeth_ipa_cmd *) data; 6003 cmd = (struct qeth_ipa_cmd *) data;
5987 if (cmd->hdr.return_code) { 6004 if (cmd->hdr.return_code) {
5988 PRINT_WARN("Error in deregistering MAC address on " \
5989 "device %s: x%x\n", CARD_BUS_ID(card),
5990 cmd->hdr.return_code);
5991 QETH_DBF_TEXT_(trace, 2, "err%d", cmd->hdr.return_code); 6005 QETH_DBF_TEXT_(trace, 2, "err%d", cmd->hdr.return_code);
5992 cmd->hdr.return_code = -EIO; 6006 cmd->hdr.return_code = -EIO;
5993 return 0; 6007 return 0;
@@ -6651,7 +6665,7 @@ qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
6651 QETH_DBF_TEXT(trace,4,"chgmaccb"); 6665 QETH_DBF_TEXT(trace,4,"chgmaccb");
6652 6666
6653 cmd = (struct qeth_ipa_cmd *) data; 6667 cmd = (struct qeth_ipa_cmd *) data;
6654 if (!card->options.layer2 || card->info.guestlan || 6668 if (!card->options.layer2 ||
6655 !(card->info.mac_bits & QETH_LAYER2_MAC_READ)) { 6669 !(card->info.mac_bits & QETH_LAYER2_MAC_READ)) {
6656 memcpy(card->dev->dev_addr, 6670 memcpy(card->dev->dev_addr,
6657 &cmd->data.setadapterparms.data.change_addr.addr, 6671 &cmd->data.setadapterparms.data.change_addr.addr,
@@ -8497,6 +8511,7 @@ __qeth_reboot_event_card(struct device *dev, void *data)
8497 card = (struct qeth_card *) dev->driver_data; 8511 card = (struct qeth_card *) dev->driver_data;
8498 qeth_clear_ip_list(card, 0, 0); 8512 qeth_clear_ip_list(card, 0, 0);
8499 qeth_qdio_clear_card(card, 0); 8513 qeth_qdio_clear_card(card, 0);
8514 qeth_clear_qdio_buffers(card);
8500 return 0; 8515 return 0;
8501} 8516}
8502 8517
diff --git a/drivers/s390/net/qeth_mpc.c b/drivers/s390/net/qeth_mpc.c
index 77c83209d70e..f54fdfdbf06f 100644
--- a/drivers/s390/net/qeth_mpc.c
+++ b/drivers/s390/net/qeth_mpc.c
@@ -157,12 +157,113 @@ unsigned char READ_CCW[]={
157}; 157};
158 158
159 159
160struct ipa_rc_msg {
161 enum qeth_ipa_return_codes rc;
162 char *msg;
163};
160 164
165struct ipa_rc_msg qeth_ipa_rc_msg[] = {
166 {IPA_RC_SUCCESS, "success"},
167 {IPA_RC_NOTSUPP, "Command not supported"},
168 {IPA_RC_IP_TABLE_FULL, "Add Addr IP Table Full - ipv6"},
169 {IPA_RC_UNKNOWN_ERROR, "IPA command failed - reason unknown"},
170 {IPA_RC_UNSUPPORTED_COMMAND, "Command not supported"},
171 {IPA_RC_DUP_IPV6_REMOTE,"ipv6 address already registered remote"},
172 {IPA_RC_DUP_IPV6_HOME, "ipv6 address already registered"},
173 {IPA_RC_UNREGISTERED_ADDR, "Address not registered"},
174 {IPA_RC_NO_ID_AVAILABLE, "No identifiers available"},
175 {IPA_RC_ID_NOT_FOUND, "Identifier not found"},
176 {IPA_RC_INVALID_IP_VERSION, "IP version incorrect"},
177 {IPA_RC_LAN_FRAME_MISMATCH, "LAN and frame mismatch"},
178 {IPA_RC_L2_UNSUPPORTED_CMD, "Unsupported layer 2 command"},
179 {IPA_RC_L2_DUP_MAC, "Duplicate MAC address"},
180 {IPA_RC_L2_ADDR_TABLE_FULL, "Layer2 address table full"},
181 {IPA_RC_L2_DUP_LAYER3_MAC, "Duplicate with layer 3 MAC"},
182 {IPA_RC_L2_GMAC_NOT_FOUND, "GMAC not found"},
183 {IPA_RC_L2_MAC_NOT_FOUND, "L2 mac address not found"},
184 {IPA_RC_L2_INVALID_VLAN_ID, "L2 invalid vlan id"},
185 {IPA_RC_L2_DUP_VLAN_ID, "L2 duplicate vlan id"},
186 {IPA_RC_L2_VLAN_ID_NOT_FOUND, "L2 vlan id not found"},
187 {IPA_RC_DATA_MISMATCH, "Data field mismatch (v4/v6 mixed)"},
188 {IPA_RC_INVALID_MTU_SIZE, "Invalid MTU size"},
189 {IPA_RC_INVALID_LANTYPE, "Invalid LAN type"},
190 {IPA_RC_INVALID_LANNUM, "Invalid LAN num"},
191 {IPA_RC_DUPLICATE_IP_ADDRESS, "Address already registered"},
192 {IPA_RC_IP_ADDR_TABLE_FULL, "IP address table full"},
193 {IPA_RC_LAN_PORT_STATE_ERROR, "LAN port state error"},
194 {IPA_RC_SETIP_NO_STARTLAN, "Setip no startlan received"},
195 {IPA_RC_SETIP_ALREADY_RECEIVED, "Setip already received"},
196 {IPA_RC_IP_ADDR_ALREADY_USED, "IP address already in use on LAN"},
197 {IPA_RC_MULTICAST_FULL, "No task available, multicast full"},
198 {IPA_RC_SETIP_INVALID_VERSION, "SETIP invalid IP version"},
199 {IPA_RC_UNSUPPORTED_SUBCMD, "Unsupported assist subcommand"},
200 {IPA_RC_ARP_ASSIST_NO_ENABLE, "Only partial success, no enable"},
201 {IPA_RC_PRIMARY_ALREADY_DEFINED,"Primary already defined"},
202 {IPA_RC_SECOND_ALREADY_DEFINED, "Secondary already defined"},
203 {IPA_RC_INVALID_SETRTG_INDICATOR,"Invalid SETRTG indicator"},
204 {IPA_RC_MC_ADDR_ALREADY_DEFINED,"Multicast address already defined"},
205 {IPA_RC_LAN_OFFLINE, "STRTLAN_LAN_DISABLED - LAN offline"},
206 {IPA_RC_INVALID_IP_VERSION2, "Invalid IP version"},
207 {IPA_RC_FFFF, "Unknown Error"}
208};
161 209
162 210
163 211
212char *
213qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)
214{
215 int x = 0;
216 qeth_ipa_rc_msg[sizeof(qeth_ipa_rc_msg) /
217 sizeof(struct ipa_rc_msg) - 1].rc = rc;
218 while(qeth_ipa_rc_msg[x].rc != rc)
219 x++;
220 return qeth_ipa_rc_msg[x].msg;
221}
164 222
165 223
224struct ipa_cmd_names {
225 enum qeth_ipa_cmds cmd;
226 char *name;
227};
228
229struct ipa_cmd_names qeth_ipa_cmd_names[] = {
230 {IPA_CMD_STARTLAN, "startlan"},
231 {IPA_CMD_STOPLAN, "stoplan"},
232 {IPA_CMD_SETVMAC, "setvmac"},
233 {IPA_CMD_DELVMAC, "delvmca"},
234 {IPA_CMD_SETGMAC, "setgmac"},
235 {IPA_CMD_DELGMAC, "delgmac"},
236 {IPA_CMD_SETVLAN, "setvlan"},
237 {IPA_CMD_DELVLAN, "delvlan"},
238 {IPA_CMD_SETCCID, "setccid"},
239 {IPA_CMD_DELCCID, "delccid"},
240 {IPA_CMD_MODCCID, "setip"},
241 {IPA_CMD_SETIP, "setip"},
242 {IPA_CMD_QIPASSIST, "qipassist"},
243 {IPA_CMD_SETASSPARMS, "setassparms"},
244 {IPA_CMD_SETIPM, "setipm"},
245 {IPA_CMD_DELIPM, "delipm"},
246 {IPA_CMD_SETRTG, "setrtg"},
247 {IPA_CMD_DELIP, "delip"},
248 {IPA_CMD_SETADAPTERPARMS, "setadapterparms"},
249 {IPA_CMD_SET_DIAG_ASS, "set_diag_ass"},
250 {IPA_CMD_CREATE_ADDR, "create_addr"},
251 {IPA_CMD_DESTROY_ADDR, "destroy_addr"},
252 {IPA_CMD_REGISTER_LOCAL_ADDR, "register_local_addr"},
253 {IPA_CMD_UNREGISTER_LOCAL_ADDR, "unregister_local_addr"},
254 {IPA_CMD_UNKNOWN, "unknown"},
255};
166 256
257char *
258qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)
259{
260 int x = 0;
261 qeth_ipa_cmd_names[
262 sizeof(qeth_ipa_cmd_names)/
263 sizeof(struct ipa_cmd_names)-1].cmd = cmd;
264 while(qeth_ipa_cmd_names[x].cmd != cmd)
265 x++;
266 return qeth_ipa_cmd_names[x].name;
267}
167 268
168 269
diff --git a/drivers/s390/net/qeth_mpc.h b/drivers/s390/net/qeth_mpc.h
index d74bc43da72a..1d8083c91765 100644
--- a/drivers/s390/net/qeth_mpc.h
+++ b/drivers/s390/net/qeth_mpc.h
@@ -25,14 +25,14 @@ extern unsigned char IPA_PDU_HEADER[];
25 25
26#define IPA_CMD_LENGTH (IPA_PDU_HEADER_SIZE + sizeof(struct qeth_ipa_cmd)) 26#define IPA_CMD_LENGTH (IPA_PDU_HEADER_SIZE + sizeof(struct qeth_ipa_cmd))
27 27
28#define QETH_SEQ_NO_LENGTH 4 28#define QETH_SEQ_NO_LENGTH 4
29#define QETH_MPC_TOKEN_LENGTH 4 29#define QETH_MPC_TOKEN_LENGTH 4
30#define QETH_MCL_LENGTH 4 30#define QETH_MCL_LENGTH 4
31#define OSA_ADDR_LEN 6 31#define OSA_ADDR_LEN 6
32 32
33#define QETH_TIMEOUT (10 * HZ) 33#define QETH_TIMEOUT (10 * HZ)
34#define QETH_IPA_TIMEOUT (45 * HZ) 34#define QETH_IPA_TIMEOUT (45 * HZ)
35#define QETH_IDX_COMMAND_SEQNO 0xffff0000 35#define QETH_IDX_COMMAND_SEQNO 0xffff0000
36#define SR_INFO_LEN 16 36#define SR_INFO_LEN 16
37 37
38#define QETH_CLEAR_CHANNEL_PARM -10 38#define QETH_CLEAR_CHANNEL_PARM -10
@@ -93,79 +93,107 @@ enum qeth_checksum_types {
93 */ 93 */
94#define RESET_ROUTING_FLAG 0x10 /* indicate that routing type shall be set */ 94#define RESET_ROUTING_FLAG 0x10 /* indicate that routing type shall be set */
95enum qeth_routing_types { 95enum qeth_routing_types {
96 NO_ROUTER = 0, /* TODO: set to bit flag used in IPA Command */ 96 NO_ROUTER = 0, /* TODO: set to bit flag used in IPA Command */
97 PRIMARY_ROUTER = 1, 97 PRIMARY_ROUTER = 1,
98 SECONDARY_ROUTER = 2, 98 SECONDARY_ROUTER = 2,
99 MULTICAST_ROUTER = 3, 99 MULTICAST_ROUTER = 3,
100 PRIMARY_CONNECTOR = 4, 100 PRIMARY_CONNECTOR = 4,
101 SECONDARY_CONNECTOR = 5, 101 SECONDARY_CONNECTOR = 5,
102}; 102};
103 103
104
105/* IPA Commands */ 104/* IPA Commands */
106enum qeth_ipa_cmds { 105enum qeth_ipa_cmds {
107 IPA_CMD_STARTLAN = 0x01, 106 IPA_CMD_STARTLAN = 0x01,
108 IPA_CMD_STOPLAN = 0x02, 107 IPA_CMD_STOPLAN = 0x02,
109 IPA_CMD_SETVMAC = 0x21, 108 IPA_CMD_SETVMAC = 0x21,
110 IPA_CMD_DELVMAC = 0x22, 109 IPA_CMD_DELVMAC = 0x22,
111 IPA_CMD_SETGMAC = 0x23, 110 IPA_CMD_SETGMAC = 0x23,
112 IPA_CMD_DELGMAC = 0x24, 111 IPA_CMD_DELGMAC = 0x24,
113 IPA_CMD_SETVLAN = 0x25, 112 IPA_CMD_SETVLAN = 0x25,
114 IPA_CMD_DELVLAN = 0x26, 113 IPA_CMD_DELVLAN = 0x26,
115 IPA_CMD_SETCCID = 0x41, 114 IPA_CMD_SETCCID = 0x41,
116 IPA_CMD_DELCCID = 0x42, 115 IPA_CMD_DELCCID = 0x42,
117 IPA_CMD_MODCCID = 0x43, 116 IPA_CMD_MODCCID = 0x43,
118 IPA_CMD_SETIP = 0xb1, 117 IPA_CMD_SETIP = 0xb1,
119 IPA_CMD_DELIP = 0xb7, 118 IPA_CMD_QIPASSIST = 0xb2,
120 IPA_CMD_QIPASSIST = 0xb2, 119 IPA_CMD_SETASSPARMS = 0xb3,
121 IPA_CMD_SETASSPARMS = 0xb3, 120 IPA_CMD_SETIPM = 0xb4,
122 IPA_CMD_SETIPM = 0xb4, 121 IPA_CMD_DELIPM = 0xb5,
123 IPA_CMD_DELIPM = 0xb5, 122 IPA_CMD_SETRTG = 0xb6,
124 IPA_CMD_SETRTG = 0xb6, 123 IPA_CMD_DELIP = 0xb7,
125 IPA_CMD_SETADAPTERPARMS = 0xb8, 124 IPA_CMD_SETADAPTERPARMS = 0xb8,
126 IPA_CMD_IPFRAME = 0xb9, 125 IPA_CMD_SET_DIAG_ASS = 0xb9,
127 IPA_CMD_ADD_ADDR_ENTRY = 0xc1, 126 IPA_CMD_CREATE_ADDR = 0xc3,
128 IPA_CMD_DELETE_ADDR_ENTRY = 0xc2, 127 IPA_CMD_DESTROY_ADDR = 0xc4,
129 IPA_CMD_CREATE_ADDR = 0xc3, 128 IPA_CMD_REGISTER_LOCAL_ADDR = 0xd1,
130 IPA_CMD_DESTROY_ADDR = 0xc4, 129 IPA_CMD_UNREGISTER_LOCAL_ADDR = 0xd2,
131 IPA_CMD_REGISTER_LOCAL_ADDR = 0xd1, 130 IPA_CMD_UNKNOWN = 0x00
132 IPA_CMD_UNREGISTER_LOCAL_ADDR = 0xd2,
133}; 131};
134 132
135enum qeth_ip_ass_cmds { 133enum qeth_ip_ass_cmds {
136 IPA_CMD_ASS_START = 0x0001, 134 IPA_CMD_ASS_START = 0x0001,
137 IPA_CMD_ASS_STOP = 0x0002, 135 IPA_CMD_ASS_STOP = 0x0002,
138 IPA_CMD_ASS_CONFIGURE = 0x0003, 136 IPA_CMD_ASS_CONFIGURE = 0x0003,
139 IPA_CMD_ASS_ENABLE = 0x0004, 137 IPA_CMD_ASS_ENABLE = 0x0004,
140}; 138};
141 139
142enum qeth_arp_process_subcmds { 140enum qeth_arp_process_subcmds {
143 IPA_CMD_ASS_ARP_SET_NO_ENTRIES = 0x0003, 141 IPA_CMD_ASS_ARP_SET_NO_ENTRIES = 0x0003,
144 IPA_CMD_ASS_ARP_QUERY_CACHE = 0x0004, 142 IPA_CMD_ASS_ARP_QUERY_CACHE = 0x0004,
145 IPA_CMD_ASS_ARP_ADD_ENTRY = 0x0005, 143 IPA_CMD_ASS_ARP_ADD_ENTRY = 0x0005,
146 IPA_CMD_ASS_ARP_REMOVE_ENTRY = 0x0006, 144 IPA_CMD_ASS_ARP_REMOVE_ENTRY = 0x0006,
147 IPA_CMD_ASS_ARP_FLUSH_CACHE = 0x0007, 145 IPA_CMD_ASS_ARP_FLUSH_CACHE = 0x0007,
148 IPA_CMD_ASS_ARP_QUERY_INFO = 0x0104, 146 IPA_CMD_ASS_ARP_QUERY_INFO = 0x0104,
149 IPA_CMD_ASS_ARP_QUERY_STATS = 0x0204, 147 IPA_CMD_ASS_ARP_QUERY_STATS = 0x0204,
150}; 148};
151 149
152/* Return Codes for IPA Commands */ 150
151/* Return Codes for IPA Commands
152 * according to OSA card Specs */
153
153enum qeth_ipa_return_codes { 154enum qeth_ipa_return_codes {
154 IPA_RC_SUCCESS = 0x0000, 155 IPA_RC_SUCCESS = 0x0000,
155 IPA_RC_NOTSUPP = 0x0001, 156 IPA_RC_NOTSUPP = 0x0001,
156 IPA_RC_NO_ACCESS = 0x0002, 157 IPA_RC_IP_TABLE_FULL = 0x0002,
157 IPA_RC_FAILED = 0x0003, 158 IPA_RC_UNKNOWN_ERROR = 0x0003,
158 IPA_RC_DATA_MISMATCH = 0xe001, 159 IPA_RC_UNSUPPORTED_COMMAND = 0x0004,
159 IPA_RC_INVALID_LAN_TYPE = 0xe003, 160 IPA_RC_DUP_IPV6_REMOTE = 0x0008,
160 IPA_RC_INVALID_LAN_NO = 0xe004, 161 IPA_RC_DUP_IPV6_HOME = 0x0010,
161 IPA_RC_IPADDR_ALREADY_REG = 0xe005, 162 IPA_RC_UNREGISTERED_ADDR = 0x0011,
162 IPA_RC_IPADDR_TABLE_FULL = 0xe006, 163 IPA_RC_NO_ID_AVAILABLE = 0x0012,
163 IPA_RC_IPADDR_ALREADY_USED = 0xe00a, 164 IPA_RC_ID_NOT_FOUND = 0x0013,
164 IPA_RC_ASSNO_NOT_SUPP = 0xe00d, 165 IPA_RC_INVALID_IP_VERSION = 0x0020,
165 IPA_RC_ASSCMD_START_FAILED = 0xe00e, 166 IPA_RC_LAN_FRAME_MISMATCH = 0x0040,
166 IPA_RC_ASSCMD_PART_SUCCESS = 0xe00f, 167 IPA_RC_L2_UNSUPPORTED_CMD = 0x2003,
167 IPA_RC_IPADDR_NOT_DEFINED = 0xe010, 168 IPA_RC_L2_DUP_MAC = 0x2005,
168 IPA_RC_LAN_OFFLINE = 0xe080, 169 IPA_RC_L2_ADDR_TABLE_FULL = 0x2006,
170 IPA_RC_L2_DUP_LAYER3_MAC = 0x200a,
171 IPA_RC_L2_GMAC_NOT_FOUND = 0x200b,
172 IPA_RC_L2_MAC_NOT_FOUND = 0x2010,
173 IPA_RC_L2_INVALID_VLAN_ID = 0x2015,
174 IPA_RC_L2_DUP_VLAN_ID = 0x2016,
175 IPA_RC_L2_VLAN_ID_NOT_FOUND = 0x2017,
176 IPA_RC_DATA_MISMATCH = 0xe001,
177 IPA_RC_INVALID_MTU_SIZE = 0xe002,
178 IPA_RC_INVALID_LANTYPE = 0xe003,
179 IPA_RC_INVALID_LANNUM = 0xe004,
180 IPA_RC_DUPLICATE_IP_ADDRESS = 0xe005,
181 IPA_RC_IP_ADDR_TABLE_FULL = 0xe006,
182 IPA_RC_LAN_PORT_STATE_ERROR = 0xe007,
183 IPA_RC_SETIP_NO_STARTLAN = 0xe008,
184 IPA_RC_SETIP_ALREADY_RECEIVED = 0xe009,
185 IPA_RC_IP_ADDR_ALREADY_USED = 0xe00a,
186 IPA_RC_MULTICAST_FULL = 0xe00b,
187 IPA_RC_SETIP_INVALID_VERSION = 0xe00d,
188 IPA_RC_UNSUPPORTED_SUBCMD = 0xe00e,
189 IPA_RC_ARP_ASSIST_NO_ENABLE = 0xe00f,
190 IPA_RC_PRIMARY_ALREADY_DEFINED = 0xe010,
191 IPA_RC_SECOND_ALREADY_DEFINED = 0xe011,
192 IPA_RC_INVALID_SETRTG_INDICATOR = 0xe012,
193 IPA_RC_MC_ADDR_ALREADY_DEFINED = 0xe013,
194 IPA_RC_LAN_OFFLINE = 0xe080,
195 IPA_RC_INVALID_IP_VERSION2 = 0xf001,
196 IPA_RC_FFFF = 0xffff
169}; 197};
170 198
171/* IPA function flags; each flag marks availability of respective function */ 199/* IPA function flags; each flag marks availability of respective function */
@@ -183,7 +211,9 @@ enum qeth_ipa_funcs {
183 IPA_SETADAPTERPARMS = 0x00000400L, 211 IPA_SETADAPTERPARMS = 0x00000400L,
184 IPA_VLAN_PRIO = 0x00000800L, 212 IPA_VLAN_PRIO = 0x00000800L,
185 IPA_PASSTHRU = 0x00001000L, 213 IPA_PASSTHRU = 0x00001000L,
214 IPA_FLUSH_ARP_SUPPORT = 0x00002000L,
186 IPA_FULL_VLAN = 0x00004000L, 215 IPA_FULL_VLAN = 0x00004000L,
216 IPA_INBOUND_PASSTHRU = 0x00008000L,
187 IPA_SOURCE_MAC = 0x00010000L, 217 IPA_SOURCE_MAC = 0x00010000L,
188 IPA_OSA_MC_ROUTER = 0x00020000L, 218 IPA_OSA_MC_ROUTER = 0x00020000L,
189 IPA_QUERY_ARP_ASSIST = 0x00040000L, 219 IPA_QUERY_ARP_ASSIST = 0x00040000L,
@@ -204,31 +234,30 @@ enum qeth_ipa_setdelip_flags {
204/* SETADAPTER IPA Command: ****************************************************/ 234/* SETADAPTER IPA Command: ****************************************************/
205enum qeth_ipa_setadp_cmd { 235enum qeth_ipa_setadp_cmd {
206 IPA_SETADP_QUERY_COMMANDS_SUPPORTED = 0x01, 236 IPA_SETADP_QUERY_COMMANDS_SUPPORTED = 0x01,
207 IPA_SETADP_ALTER_MAC_ADDRESS = 0x02, 237 IPA_SETADP_ALTER_MAC_ADDRESS = 0x02,
208 IPA_SETADP_ADD_DELETE_GROUP_ADDRESS = 0x04, 238 IPA_SETADP_ADD_DELETE_GROUP_ADDRESS = 0x04,
209 IPA_SETADP_ADD_DELETE_FUNCTIONAL_ADDR = 0x08, 239 IPA_SETADP_ADD_DELETE_FUNCTIONAL_ADDR = 0x08,
210 IPA_SETADP_SET_ADDRESSING_MODE = 0x10, 240 IPA_SETADP_SET_ADDRESSING_MODE = 0x10,
211 IPA_SETADP_SET_CONFIG_PARMS = 0x20, 241 IPA_SETADP_SET_CONFIG_PARMS = 0x20,
212 IPA_SETADP_SET_CONFIG_PARMS_EXTENDED = 0x40, 242 IPA_SETADP_SET_CONFIG_PARMS_EXTENDED = 0x40,
213 IPA_SETADP_SET_BROADCAST_MODE = 0x80, 243 IPA_SETADP_SET_BROADCAST_MODE = 0x80,
214 IPA_SETADP_SEND_OSA_MESSAGE = 0x0100, 244 IPA_SETADP_SEND_OSA_MESSAGE = 0x0100,
215 IPA_SETADP_SET_SNMP_CONTROL = 0x0200, 245 IPA_SETADP_SET_SNMP_CONTROL = 0x0200,
216 IPA_SETADP_READ_SNMP_PARMS = 0x0400, 246 IPA_SETADP_QUERY_CARD_INFO = 0x0400,
217 IPA_SETADP_SET_PROMISC_MODE = 0x0800, 247 IPA_SETADP_SET_PROMISC_MODE = 0x0800,
218 IPA_SETADP_QUERY_CARD_INFO = 0x1000,
219}; 248};
220enum qeth_ipa_mac_ops { 249enum qeth_ipa_mac_ops {
221 CHANGE_ADDR_READ_MAC = 0, 250 CHANGE_ADDR_READ_MAC = 0,
222 CHANGE_ADDR_REPLACE_MAC = 1, 251 CHANGE_ADDR_REPLACE_MAC = 1,
223 CHANGE_ADDR_ADD_MAC = 2, 252 CHANGE_ADDR_ADD_MAC = 2,
224 CHANGE_ADDR_DEL_MAC = 4, 253 CHANGE_ADDR_DEL_MAC = 4,
225 CHANGE_ADDR_RESET_MAC = 8, 254 CHANGE_ADDR_RESET_MAC = 8,
226}; 255};
227enum qeth_ipa_addr_ops { 256enum qeth_ipa_addr_ops {
228 CHANGE_ADDR_READ_ADDR = 0, 257 CHANGE_ADDR_READ_ADDR = 0,
229 CHANGE_ADDR_ADD_ADDR = 1, 258 CHANGE_ADDR_ADD_ADDR = 1,
230 CHANGE_ADDR_DEL_ADDR = 2, 259 CHANGE_ADDR_DEL_ADDR = 2,
231 CHANGE_ADDR_FLUSH_ADDR_TABLE = 4, 260 CHANGE_ADDR_FLUSH_ADDR_TABLE = 4,
232}; 261};
233enum qeth_ipa_promisc_modes { 262enum qeth_ipa_promisc_modes {
234 SET_PROMISC_MODE_OFF = 0, 263 SET_PROMISC_MODE_OFF = 0,
@@ -407,15 +436,15 @@ struct qeth_ipacmd_hdr {
407struct qeth_ipa_cmd { 436struct qeth_ipa_cmd {
408 struct qeth_ipacmd_hdr hdr; 437 struct qeth_ipacmd_hdr hdr;
409 union { 438 union {
410 struct qeth_ipacmd_setdelip4 setdelip4; 439 struct qeth_ipacmd_setdelip4 setdelip4;
411 struct qeth_ipacmd_setdelip6 setdelip6; 440 struct qeth_ipacmd_setdelip6 setdelip6;
412 struct qeth_ipacmd_setdelipm setdelipm; 441 struct qeth_ipacmd_setdelipm setdelipm;
413 struct qeth_ipacmd_setassparms setassparms; 442 struct qeth_ipacmd_setassparms setassparms;
414 struct qeth_ipacmd_layer2setdelmac setdelmac; 443 struct qeth_ipacmd_layer2setdelmac setdelmac;
415 struct qeth_ipacmd_layer2setdelvlan setdelvlan; 444 struct qeth_ipacmd_layer2setdelvlan setdelvlan;
416 struct qeth_create_destroy_address create_destroy_addr; 445 struct qeth_create_destroy_address create_destroy_addr;
417 struct qeth_ipacmd_setadpparms setadapterparms; 446 struct qeth_ipacmd_setadpparms setadapterparms;
418 struct qeth_set_routing setrtg; 447 struct qeth_set_routing setrtg;
419 } data; 448 } data;
420} __attribute__ ((packed)); 449} __attribute__ ((packed));
421 450
@@ -433,6 +462,12 @@ enum qeth_ipa_arp_return_codes {
433 QETH_IPA_ARP_RC_Q_NO_DATA = 0x0008, 462 QETH_IPA_ARP_RC_Q_NO_DATA = 0x0008,
434}; 463};
435 464
465
466extern char *
467qeth_get_ipa_msg(enum qeth_ipa_return_codes rc);
468extern char *
469qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd);
470
436#define QETH_SETASS_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \ 471#define QETH_SETASS_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \
437 sizeof(struct qeth_ipacmd_setassparms_hdr)) 472 sizeof(struct qeth_ipacmd_setassparms_hdr))
438#define QETH_IPA_ARP_DATA_POS(buffer) (buffer + IPA_PDU_HEADER_SIZE + \ 473#define QETH_IPA_ARP_DATA_POS(buffer) (buffer + IPA_PDU_HEADER_SIZE + \
@@ -521,7 +556,7 @@ extern unsigned char DM_ACT[];
521extern unsigned char IDX_ACTIVATE_READ[]; 556extern unsigned char IDX_ACTIVATE_READ[];
522extern unsigned char IDX_ACTIVATE_WRITE[]; 557extern unsigned char IDX_ACTIVATE_WRITE[];
523 558
524#define IDX_ACTIVATE_SIZE 0x22 559#define IDX_ACTIVATE_SIZE 0x22
525#define QETH_IDX_ACT_ISSUER_RM_TOKEN(buffer) (buffer+0x0c) 560#define QETH_IDX_ACT_ISSUER_RM_TOKEN(buffer) (buffer+0x0c)
526#define QETH_IDX_NO_PORTNAME_REQUIRED(buffer) ((buffer)[0x0b]&0x80) 561#define QETH_IDX_NO_PORTNAME_REQUIRED(buffer) ((buffer)[0x0b]&0x80)
527#define QETH_IDX_ACT_FUNC_LEVEL(buffer) (buffer+0x10) 562#define QETH_IDX_ACT_FUNC_LEVEL(buffer) (buffer+0x10)
diff --git a/drivers/s390/net/qeth_sys.c b/drivers/s390/net/qeth_sys.c
index d518419cd0c6..65ffc21afc37 100644
--- a/drivers/s390/net/qeth_sys.c
+++ b/drivers/s390/net/qeth_sys.c
@@ -384,8 +384,6 @@ qeth_dev_route_store(struct qeth_card *card, struct qeth_routing_info *route,
384 route->type = PRIMARY_CONNECTOR; 384 route->type = PRIMARY_CONNECTOR;
385 } else if (!strcmp(tmp, "secondary_connector")) { 385 } else if (!strcmp(tmp, "secondary_connector")) {
386 route->type = SECONDARY_CONNECTOR; 386 route->type = SECONDARY_CONNECTOR;
387 } else if (!strcmp(tmp, "multicast_router")) {
388 route->type = MULTICAST_ROUTER;
389 } else if (!strcmp(tmp, "primary_router")) { 387 } else if (!strcmp(tmp, "primary_router")) {
390 route->type = PRIMARY_ROUTER; 388 route->type = PRIMARY_ROUTER;
391 } else if (!strcmp(tmp, "secondary_router")) { 389 } else if (!strcmp(tmp, "secondary_router")) {
diff --git a/include/asm-s390/qdio.h b/include/asm-s390/qdio.h
index 127f72e77419..74db1dc10a7d 100644
--- a/include/asm-s390/qdio.h
+++ b/include/asm-s390/qdio.h
@@ -120,6 +120,7 @@ extern unsigned long qdio_get_status(int irq);
120#define QDIO_FLAG_NO_INPUT_INTERRUPT_CONTEXT 0x08 /* no effect on 120#define QDIO_FLAG_NO_INPUT_INTERRUPT_CONTEXT 0x08 /* no effect on
121 adapter interrupts */ 121 adapter interrupts */
122#define QDIO_FLAG_DONT_SIGA 0x10 122#define QDIO_FLAG_DONT_SIGA 0x10
123#define QDIO_FLAG_PCI_OUT 0x20
123 124
124extern int do_QDIO(struct ccw_device*, unsigned int flags, 125extern int do_QDIO(struct ccw_device*, unsigned int flags,
125 unsigned int queue_number, 126 unsigned int queue_number,