diff --git a/[refs] b/[refs] index 7cafc33f8635..4a7bc8b4ba10 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 099f7aa7400df0ffcc8d3c30dcde1ce0595d8a32 +refs/heads/master: 9076aea76538556224e7d73ab718f8841330818a diff --git a/trunk/drivers/net/arcnet/com20020-pci.c b/trunk/drivers/net/arcnet/com20020-pci.c index cbc44f53755a..d427493997b6 100644 --- a/trunk/drivers/net/arcnet/com20020-pci.c +++ b/trunk/drivers/net/arcnet/com20020-pci.c @@ -61,7 +61,7 @@ module_param(clockp, int, 0); module_param(clockm, int, 0); MODULE_LICENSE("GPL"); -static int com20020pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) +static int __devinit com20020pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct net_device *dev; struct arcnet_local *lp; @@ -135,7 +135,7 @@ static int com20020pci_probe(struct pci_dev *pdev, const struct pci_device_id *i return err; } -static void com20020pci_remove(struct pci_dev *pdev) +static void __devexit com20020pci_remove(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); unregister_netdev(dev); @@ -178,7 +178,7 @@ static struct pci_driver com20020pci_driver = { .name = "com20020", .id_table = com20020pci_id_table, .probe = com20020pci_probe, - .remove = com20020pci_remove, + .remove = __devexit_p(com20020pci_remove), }; static int __init com20020pci_init(void) diff --git a/trunk/drivers/net/can/at91_can.c b/trunk/drivers/net/can/at91_can.c index b8e81eb6df13..14b166bdbeaf 100644 --- a/trunk/drivers/net/can/at91_can.c +++ b/trunk/drivers/net/can/at91_can.c @@ -155,7 +155,7 @@ struct at91_priv { canid_t mb0_id; }; -static const struct at91_devtype_data at91_devtype_data[] = { +static const struct at91_devtype_data at91_devtype_data[] __devinitconst = { [AT91_DEVTYPE_SAM9263] = { .rx_first = 1, .rx_split = 8, @@ -1242,7 +1242,7 @@ static struct attribute_group at91_sysfs_attr_group = { .attrs = at91_sysfs_attrs, }; -static int at91_can_probe(struct platform_device *pdev) +static int __devinit at91_can_probe(struct platform_device *pdev) { const struct at91_devtype_data *devtype_data; enum at91_devtype devtype; @@ -1339,7 +1339,7 @@ static int at91_can_probe(struct platform_device *pdev) return err; } -static int at91_can_remove(struct platform_device *pdev) +static int __devexit at91_can_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct at91_priv *priv = netdev_priv(dev); @@ -1376,7 +1376,7 @@ MODULE_DEVICE_TABLE(platform, at91_can_id_table); static struct platform_driver at91_can_driver = { .probe = at91_can_probe, - .remove = at91_can_remove, + .remove = __devexit_p(at91_can_remove), .driver = { .name = KBUILD_MODNAME, .owner = THIS_MODULE, diff --git a/trunk/drivers/net/can/bfin_can.c b/trunk/drivers/net/can/bfin_can.c index 6a0532176b69..a3f8de962258 100644 --- a/trunk/drivers/net/can/bfin_can.c +++ b/trunk/drivers/net/can/bfin_can.c @@ -531,7 +531,7 @@ static const struct net_device_ops bfin_can_netdev_ops = { .ndo_start_xmit = bfin_can_start_xmit, }; -static int bfin_can_probe(struct platform_device *pdev) +static int __devinit bfin_can_probe(struct platform_device *pdev) { int err; struct net_device *dev; @@ -611,7 +611,7 @@ static int bfin_can_probe(struct platform_device *pdev) return err; } -static int bfin_can_remove(struct platform_device *pdev) +static int __devexit bfin_can_remove(struct platform_device *pdev) { struct net_device *dev = dev_get_drvdata(&pdev->dev); struct bfin_can_priv *priv = netdev_priv(dev); @@ -677,7 +677,7 @@ static int bfin_can_resume(struct platform_device *pdev) static struct platform_driver bfin_can_driver = { .probe = bfin_can_probe, - .remove = bfin_can_remove, + .remove = __devexit_p(bfin_can_remove), .suspend = bfin_can_suspend, .resume = bfin_can_resume, .driver = { diff --git a/trunk/drivers/net/can/c_can/c_can_pci.c b/trunk/drivers/net/can/c_can/c_can_pci.c index a1f263170683..3d7830bcd2bf 100644 --- a/trunk/drivers/net/can/c_can/c_can_pci.c +++ b/trunk/drivers/net/can/c_can/c_can_pci.c @@ -63,7 +63,7 @@ static void c_can_pci_write_reg_aligned_to_32bit(struct c_can_priv *priv, writew(val, priv->base + 2 * priv->regs[index]); } -static int c_can_pci_probe(struct pci_dev *pdev, +static int __devinit c_can_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct c_can_pci_data *c_can_pci_data = (void *)ent->driver_data; @@ -174,7 +174,7 @@ static int c_can_pci_probe(struct pci_dev *pdev, return ret; } -static void c_can_pci_remove(struct pci_dev *pdev) +static void __devexit c_can_pci_remove(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct c_can_priv *priv = netdev_priv(dev); @@ -210,7 +210,7 @@ static struct pci_driver c_can_pci_driver = { .name = KBUILD_MODNAME, .id_table = c_can_pci_tbl, .probe = c_can_pci_probe, - .remove = c_can_pci_remove, + .remove = __devexit_p(c_can_pci_remove), }; module_pci_driver(c_can_pci_driver); diff --git a/trunk/drivers/net/can/c_can/c_can_platform.c b/trunk/drivers/net/can/c_can/c_can_platform.c index d63b91904f82..0044fd859db3 100644 --- a/trunk/drivers/net/can/c_can/c_can_platform.c +++ b/trunk/drivers/net/can/c_can/c_can_platform.c @@ -106,7 +106,7 @@ static const struct of_device_id c_can_of_table[] = { }; MODULE_DEVICE_TABLE(of, c_can_of_table); -static int c_can_plat_probe(struct platform_device *pdev) +static int __devinit c_can_plat_probe(struct platform_device *pdev) { int ret; void __iomem *addr; @@ -248,7 +248,7 @@ static int c_can_plat_probe(struct platform_device *pdev) return ret; } -static int c_can_plat_remove(struct platform_device *pdev) +static int __devexit c_can_plat_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct c_can_priv *priv = netdev_priv(dev); @@ -334,7 +334,7 @@ static struct platform_driver c_can_plat_driver = { .of_match_table = of_match_ptr(c_can_of_table), }, .probe = c_can_plat_probe, - .remove = c_can_plat_remove, + .remove = __devexit_p(c_can_plat_remove), .suspend = c_can_suspend, .resume = c_can_resume, .id_table = c_can_id_table, diff --git a/trunk/drivers/net/can/cc770/cc770_isa.c b/trunk/drivers/net/can/cc770/cc770_isa.c index 8eaaac81f320..9f3a25ccd665 100644 --- a/trunk/drivers/net/can/cc770/cc770_isa.c +++ b/trunk/drivers/net/can/cc770/cc770_isa.c @@ -75,12 +75,12 @@ MODULE_LICENSE("GPL v2"); static unsigned long port[MAXDEV]; static unsigned long mem[MAXDEV]; -static int irq[MAXDEV]; -static int clk[MAXDEV]; -static u8 cir[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; -static u8 cor[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; -static u8 bcr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; -static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; +static int __devinitdata irq[MAXDEV]; +static int __devinitdata clk[MAXDEV]; +static u8 __devinitdata cir[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; +static u8 __devinitdata cor[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; +static u8 __devinitdata bcr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; +static int __devinitdata indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; module_param_array(port, ulong, NULL, S_IRUGO); MODULE_PARM_DESC(port, "I/O port number"); @@ -166,7 +166,7 @@ static void cc770_isa_port_write_reg_indirect(const struct cc770_priv *priv, spin_unlock_irqrestore(&cc770_isa_port_lock, flags); } -static int cc770_isa_probe(struct platform_device *pdev) +static int __devinit cc770_isa_probe(struct platform_device *pdev) { struct net_device *dev; struct cc770_priv *priv; @@ -291,7 +291,7 @@ static int cc770_isa_probe(struct platform_device *pdev) return err; } -static int cc770_isa_remove(struct platform_device *pdev) +static int __devexit cc770_isa_remove(struct platform_device *pdev) { struct net_device *dev = dev_get_drvdata(&pdev->dev); struct cc770_priv *priv = netdev_priv(dev); @@ -316,7 +316,7 @@ static int cc770_isa_remove(struct platform_device *pdev) static struct platform_driver cc770_isa_driver = { .probe = cc770_isa_probe, - .remove = cc770_isa_remove, + .remove = __devexit_p(cc770_isa_remove), .driver = { .name = KBUILD_MODNAME, .owner = THIS_MODULE, diff --git a/trunk/drivers/net/can/cc770/cc770_platform.c b/trunk/drivers/net/can/cc770/cc770_platform.c index 7d451cd75006..3da6cbb542ae 100644 --- a/trunk/drivers/net/can/cc770/cc770_platform.c +++ b/trunk/drivers/net/can/cc770/cc770_platform.c @@ -75,7 +75,7 @@ static void cc770_platform_write_reg(const struct cc770_priv *priv, int reg, iowrite8(val, priv->reg_base + reg); } -static int cc770_get_of_node_data(struct platform_device *pdev, +static int __devinit cc770_get_of_node_data(struct platform_device *pdev, struct cc770_priv *priv) { struct device_node *np = pdev->dev.of_node; @@ -148,7 +148,7 @@ static int cc770_get_of_node_data(struct platform_device *pdev, return 0; } -static int cc770_get_platform_data(struct platform_device *pdev, +static int __devinit cc770_get_platform_data(struct platform_device *pdev, struct cc770_priv *priv) { @@ -164,7 +164,7 @@ static int cc770_get_platform_data(struct platform_device *pdev, return 0; } -static int cc770_platform_probe(struct platform_device *pdev) +static int __devinit cc770_platform_probe(struct platform_device *pdev) { struct net_device *dev; struct cc770_priv *priv; @@ -238,7 +238,7 @@ static int cc770_platform_probe(struct platform_device *pdev) return err; } -static int cc770_platform_remove(struct platform_device *pdev) +static int __devexit cc770_platform_remove(struct platform_device *pdev) { struct net_device *dev = dev_get_drvdata(&pdev->dev); struct cc770_priv *priv = netdev_priv(dev); @@ -254,7 +254,7 @@ static int cc770_platform_remove(struct platform_device *pdev) return 0; } -static struct of_device_id cc770_platform_table[] = { +static struct of_device_id __devinitdata cc770_platform_table[] = { {.compatible = "bosch,cc770"}, /* CC770 from Bosch */ {.compatible = "intc,82527"}, /* AN82527 from Intel CP */ {}, @@ -268,7 +268,7 @@ static struct platform_driver cc770_platform_driver = { .of_match_table = cc770_platform_table, }, .probe = cc770_platform_probe, - .remove = cc770_platform_remove, + .remove = __devexit_p(cc770_platform_remove), }; module_platform_driver(cc770_platform_driver); diff --git a/trunk/drivers/net/can/flexcan.c b/trunk/drivers/net/can/flexcan.c index 0289a6d86f66..9a17965e00fd 100644 --- a/trunk/drivers/net/can/flexcan.c +++ b/trunk/drivers/net/can/flexcan.c @@ -922,7 +922,7 @@ static const struct net_device_ops flexcan_netdev_ops = { .ndo_start_xmit = flexcan_start_xmit, }; -static int register_flexcandev(struct net_device *dev) +static int __devinit register_flexcandev(struct net_device *dev) { struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_regs __iomem *regs = priv->base; @@ -968,7 +968,7 @@ static int register_flexcandev(struct net_device *dev) return err; } -static void unregister_flexcandev(struct net_device *dev) +static void __devexit unregister_flexcandev(struct net_device *dev) { unregister_candev(dev); } @@ -987,7 +987,7 @@ static const struct platform_device_id flexcan_id_table[] = { }; MODULE_DEVICE_TABLE(platform, flexcan_id_table); -static int flexcan_probe(struct platform_device *pdev) +static int __devinit flexcan_probe(struct platform_device *pdev) { const struct of_device_id *of_id; const struct flexcan_devtype_data *devtype_data; @@ -1109,7 +1109,7 @@ static int flexcan_probe(struct platform_device *pdev) return err; } -static int flexcan_remove(struct platform_device *pdev) +static int __devexit flexcan_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct flexcan_priv *priv = netdev_priv(dev); @@ -1170,7 +1170,7 @@ static struct platform_driver flexcan_driver = { .of_match_table = flexcan_of_match, }, .probe = flexcan_probe, - .remove = flexcan_remove, + .remove = __devexit_p(flexcan_remove), .suspend = flexcan_suspend, .resume = flexcan_resume, .id_table = flexcan_id_table, diff --git a/trunk/drivers/net/can/grcan.c b/trunk/drivers/net/can/grcan.c index 17fbc7a09224..391f484fccb7 100644 --- a/trunk/drivers/net/can/grcan.c +++ b/trunk/drivers/net/can/grcan.c @@ -1659,7 +1659,7 @@ static int grcan_setup_netdev(struct platform_device *ofdev, return err; } -static int grcan_probe(struct platform_device *ofdev) +static int __devinit grcan_probe(struct platform_device *ofdev) { struct device_node *np = ofdev->dev.of_node; struct resource *res; @@ -1714,7 +1714,7 @@ static int grcan_probe(struct platform_device *ofdev) return err; } -static int grcan_remove(struct platform_device *ofdev) +static int __devexit grcan_remove(struct platform_device *ofdev) { struct net_device *dev = dev_get_drvdata(&ofdev->dev); struct grcan_priv *priv = netdev_priv(dev); @@ -1729,7 +1729,7 @@ static int grcan_remove(struct platform_device *ofdev) return 0; } -static struct of_device_id grcan_match[] = { +static struct of_device_id grcan_match[] __devinitconst = { {.name = "GAISLER_GRCAN"}, {.name = "01_03d"}, {.name = "GAISLER_GRHCAN"}, @@ -1746,7 +1746,7 @@ static struct platform_driver grcan_driver = { .of_match_table = grcan_match, }, .probe = grcan_probe, - .remove = grcan_remove, + .remove = __devexit_p(grcan_remove), }; module_platform_driver(grcan_driver); diff --git a/trunk/drivers/net/can/janz-ican3.c b/trunk/drivers/net/can/janz-ican3.c index c4bc1d2e2033..c0bfb0ad3e0d 100644 --- a/trunk/drivers/net/can/janz-ican3.c +++ b/trunk/drivers/net/can/janz-ican3.c @@ -365,7 +365,7 @@ static int ican3_old_send_msg(struct ican3_dev *mod, struct ican3_msg *msg) * ICAN3 "new-style" Host Interface Setup */ -static void ican3_init_new_host_interface(struct ican3_dev *mod) +static void __devinit ican3_init_new_host_interface(struct ican3_dev *mod) { struct ican3_new_desc desc; unsigned long flags; @@ -444,7 +444,7 @@ static void ican3_init_new_host_interface(struct ican3_dev *mod) * ICAN3 Fast Host Interface Setup */ -static void ican3_init_fast_host_interface(struct ican3_dev *mod) +static void __devinit ican3_init_fast_host_interface(struct ican3_dev *mod) { struct ican3_fast_desc desc; unsigned long flags; @@ -631,7 +631,7 @@ static int ican3_recv_msg(struct ican3_dev *mod, struct ican3_msg *msg) * Quick Pre-constructed Messages */ -static int ican3_msg_connect(struct ican3_dev *mod) +static int __devinit ican3_msg_connect(struct ican3_dev *mod) { struct ican3_msg msg; @@ -642,7 +642,7 @@ static int ican3_msg_connect(struct ican3_dev *mod) return ican3_send_msg(mod, &msg); } -static int ican3_msg_disconnect(struct ican3_dev *mod) +static int __devexit ican3_msg_disconnect(struct ican3_dev *mod) { struct ican3_msg msg; @@ -653,7 +653,7 @@ static int ican3_msg_disconnect(struct ican3_dev *mod) return ican3_send_msg(mod, &msg); } -static int ican3_msg_newhostif(struct ican3_dev *mod) +static int __devinit ican3_msg_newhostif(struct ican3_dev *mod) { struct ican3_msg msg; int ret; @@ -674,7 +674,7 @@ static int ican3_msg_newhostif(struct ican3_dev *mod) return 0; } -static int ican3_msg_fasthostif(struct ican3_dev *mod) +static int __devinit ican3_msg_fasthostif(struct ican3_dev *mod) { struct ican3_msg msg; unsigned int addr; @@ -707,7 +707,7 @@ static int ican3_msg_fasthostif(struct ican3_dev *mod) * Setup the CAN filter to either accept or reject all * messages from the CAN bus. */ -static int ican3_set_id_filter(struct ican3_dev *mod, bool accept) +static int __devinit ican3_set_id_filter(struct ican3_dev *mod, bool accept) { struct ican3_msg msg; int ret; @@ -1421,7 +1421,7 @@ static int ican3_reset_module(struct ican3_dev *mod) return -ETIMEDOUT; } -static void ican3_shutdown_module(struct ican3_dev *mod) +static void __devexit ican3_shutdown_module(struct ican3_dev *mod) { ican3_msg_disconnect(mod); ican3_reset_module(mod); @@ -1430,7 +1430,7 @@ static void ican3_shutdown_module(struct ican3_dev *mod) /* * Startup an ICAN module, bringing it into fast mode */ -static int ican3_startup_module(struct ican3_dev *mod) +static int __devinit ican3_startup_module(struct ican3_dev *mod) { int ret; @@ -1760,7 +1760,7 @@ static struct attribute_group ican3_sysfs_attr_group = { * PCI Subsystem */ -static int ican3_probe(struct platform_device *pdev) +static int __devinit ican3_probe(struct platform_device *pdev) { struct janz_platform_data *pdata; struct net_device *ndev; @@ -1898,7 +1898,7 @@ static int ican3_probe(struct platform_device *pdev) return ret; } -static int ican3_remove(struct platform_device *pdev) +static int __devexit ican3_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct ican3_dev *mod = netdev_priv(ndev); @@ -1927,7 +1927,7 @@ static struct platform_driver ican3_driver = { .owner = THIS_MODULE, }, .probe = ican3_probe, - .remove = ican3_remove, + .remove = __devexit_p(ican3_remove), }; module_platform_driver(ican3_driver); diff --git a/trunk/drivers/net/can/mcp251x.c b/trunk/drivers/net/can/mcp251x.c index 5eaf47b8e37b..26e7129332ab 100644 --- a/trunk/drivers/net/can/mcp251x.c +++ b/trunk/drivers/net/can/mcp251x.c @@ -981,7 +981,7 @@ static const struct net_device_ops mcp251x_netdev_ops = { .ndo_start_xmit = mcp251x_hard_start_xmit, }; -static int mcp251x_can_probe(struct spi_device *spi) +static int __devinit mcp251x_can_probe(struct spi_device *spi) { struct net_device *net; struct mcp251x_priv *priv; @@ -1100,7 +1100,7 @@ static int mcp251x_can_probe(struct spi_device *spi) return ret; } -static int mcp251x_can_remove(struct spi_device *spi) +static int __devexit mcp251x_can_remove(struct spi_device *spi) { struct mcp251x_platform_data *pdata = spi->dev.platform_data; struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev); @@ -1198,7 +1198,7 @@ static struct spi_driver mcp251x_can_driver = { .id_table = mcp251x_id_table, .probe = mcp251x_can_probe, - .remove = mcp251x_can_remove, + .remove = __devexit_p(mcp251x_can_remove), .suspend = mcp251x_can_suspend, .resume = mcp251x_can_resume, }; diff --git a/trunk/drivers/net/can/mscan/mpc5xxx_can.c b/trunk/drivers/net/can/mscan/mpc5xxx_can.c index 06a4561955ca..514d02064255 100644 --- a/trunk/drivers/net/can/mscan/mpc5xxx_can.c +++ b/trunk/drivers/net/can/mscan/mpc5xxx_can.c @@ -43,12 +43,12 @@ struct mpc5xxx_can_data { }; #ifdef CONFIG_PPC_MPC52xx -static struct of_device_id mpc52xx_cdm_ids[] = { +static struct of_device_id __devinitdata mpc52xx_cdm_ids[] = { { .compatible = "fsl,mpc5200-cdm", }, {} }; -static u32 mpc52xx_can_get_clock(struct platform_device *ofdev, +static u32 __devinit mpc52xx_can_get_clock(struct platform_device *ofdev, const char *clock_name, int *mscan_clksrc) { @@ -101,7 +101,7 @@ static u32 mpc52xx_can_get_clock(struct platform_device *ofdev, return freq; } #else /* !CONFIG_PPC_MPC52xx */ -static u32 mpc52xx_can_get_clock(struct platform_device *ofdev, +static u32 __devinit mpc52xx_can_get_clock(struct platform_device *ofdev, const char *clock_name, int *mscan_clksrc) { @@ -124,12 +124,12 @@ struct mpc512x_clockctl { u32 mccr[4]; /* MSCAN Clk Ctrl Reg 1-3 */ }; -static struct of_device_id mpc512x_clock_ids[] = { +static struct of_device_id __devinitdata mpc512x_clock_ids[] = { { .compatible = "fsl,mpc5121-clock", }, {} }; -static u32 mpc512x_can_get_clock(struct platform_device *ofdev, +static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev, const char *clock_name, int *mscan_clksrc) { @@ -239,7 +239,7 @@ static u32 mpc512x_can_get_clock(struct platform_device *ofdev, return freq; } #else /* !CONFIG_PPC_MPC512x */ -static u32 mpc512x_can_get_clock(struct platform_device *ofdev, +static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev, const char *clock_name, int *mscan_clksrc) { @@ -248,7 +248,7 @@ static u32 mpc512x_can_get_clock(struct platform_device *ofdev, #endif /* CONFIG_PPC_MPC512x */ static const struct of_device_id mpc5xxx_can_table[]; -static int mpc5xxx_can_probe(struct platform_device *ofdev) +static int __devinit mpc5xxx_can_probe(struct platform_device *ofdev) { const struct of_device_id *match; const struct mpc5xxx_can_data *data; @@ -323,7 +323,7 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev) return err; } -static int mpc5xxx_can_remove(struct platform_device *ofdev) +static int __devexit mpc5xxx_can_remove(struct platform_device *ofdev) { struct net_device *dev = dev_get_drvdata(&ofdev->dev); struct mscan_priv *priv = netdev_priv(dev); @@ -380,17 +380,17 @@ static int mpc5xxx_can_resume(struct platform_device *ofdev) } #endif -static const struct mpc5xxx_can_data mpc5200_can_data = { +static const struct mpc5xxx_can_data __devinitconst mpc5200_can_data = { .type = MSCAN_TYPE_MPC5200, .get_clock = mpc52xx_can_get_clock, }; -static const struct mpc5xxx_can_data mpc5121_can_data = { +static const struct mpc5xxx_can_data __devinitconst mpc5121_can_data = { .type = MSCAN_TYPE_MPC5121, .get_clock = mpc512x_can_get_clock, }; -static const struct of_device_id mpc5xxx_can_table[] = { +static const struct of_device_id __devinitconst mpc5xxx_can_table[] = { { .compatible = "fsl,mpc5200-mscan", .data = &mpc5200_can_data, }, /* Note that only MPC5121 Rev. 2 (and later) is supported */ { .compatible = "fsl,mpc5121-mscan", .data = &mpc5121_can_data, }, @@ -405,7 +405,7 @@ static struct platform_driver mpc5xxx_can_driver = { .of_match_table = mpc5xxx_can_table, }, .probe = mpc5xxx_can_probe, - .remove = mpc5xxx_can_remove, + .remove = __devexit_p(mpc5xxx_can_remove), #ifdef CONFIG_PM .suspend = mpc5xxx_can_suspend, .resume = mpc5xxx_can_resume, diff --git a/trunk/drivers/net/can/pch_can.c b/trunk/drivers/net/can/pch_can.c index 7d1748575b1f..48b3d62b34cb 100644 --- a/trunk/drivers/net/can/pch_can.c +++ b/trunk/drivers/net/can/pch_can.c @@ -954,7 +954,7 @@ static const struct net_device_ops pch_can_netdev_ops = { .ndo_start_xmit = pch_xmit, }; -static void pch_can_remove(struct pci_dev *pdev) +static void __devexit pch_can_remove(struct pci_dev *pdev) { struct net_device *ndev = pci_get_drvdata(pdev); struct pch_can_priv *priv = netdev_priv(ndev); @@ -1178,7 +1178,7 @@ static int pch_can_get_berr_counter(const struct net_device *dev, return 0; } -static int pch_can_probe(struct pci_dev *pdev, +static int __devinit pch_can_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct net_device *ndev; @@ -1269,7 +1269,7 @@ static struct pci_driver pch_can_pci_driver = { .name = "pch_can", .id_table = pch_pci_tbl, .probe = pch_can_probe, - .remove = pch_can_remove, + .remove = __devexit_p(pch_can_remove), .suspend = pch_can_suspend, .resume = pch_can_resume, }; diff --git a/trunk/drivers/net/can/sja1000/ems_pci.c b/trunk/drivers/net/can/sja1000/ems_pci.c index f232bc8d0872..5c6d412bafb5 100644 --- a/trunk/drivers/net/can/sja1000/ems_pci.c +++ b/trunk/drivers/net/can/sja1000/ems_pci.c @@ -220,7 +220,7 @@ static void ems_pci_card_reset(struct ems_pci_card *card) * Probe PCI device for EMS CAN signature and register each available * CAN channel to SJA1000 Socket-CAN subsystem. */ -static int ems_pci_add_card(struct pci_dev *pdev, +static int __devinit ems_pci_add_card(struct pci_dev *pdev, const struct pci_device_id *ent) { struct sja1000_priv *priv; diff --git a/trunk/drivers/net/can/sja1000/ems_pcmcia.c b/trunk/drivers/net/can/sja1000/ems_pcmcia.c index 46fc313214a2..075a5457a190 100644 --- a/trunk/drivers/net/can/sja1000/ems_pcmcia.c +++ b/trunk/drivers/net/can/sja1000/ems_pcmcia.c @@ -166,7 +166,7 @@ static void ems_pcmcia_del_card(struct pcmcia_device *pdev) * Probe PCI device for EMS CAN signature and register each available * CAN channel to SJA1000 Socket-CAN subsystem. */ -static int ems_pcmcia_add_card(struct pcmcia_device *pdev, +static int __devinit ems_pcmcia_add_card(struct pcmcia_device *pdev, unsigned long base) { struct sja1000_priv *priv; @@ -256,7 +256,7 @@ static int ems_pcmcia_add_card(struct pcmcia_device *pdev, /* * Setup PCMCIA socket and probe for EMS CPC-CARD */ -static int ems_pcmcia_probe(struct pcmcia_device *dev) +static int __devinit ems_pcmcia_probe(struct pcmcia_device *dev) { int csval; diff --git a/trunk/drivers/net/can/sja1000/kvaser_pci.c b/trunk/drivers/net/can/sja1000/kvaser_pci.c index 4efdaf26eaea..23ed6ea4c7c3 100644 --- a/trunk/drivers/net/can/sja1000/kvaser_pci.c +++ b/trunk/drivers/net/can/sja1000/kvaser_pci.c @@ -290,7 +290,7 @@ static int kvaser_pci_add_chan(struct pci_dev *pdev, int channel, return err; } -static int kvaser_pci_init_one(struct pci_dev *pdev, +static int __devinit kvaser_pci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { int err; @@ -379,7 +379,7 @@ static int kvaser_pci_init_one(struct pci_dev *pdev, } -static void kvaser_pci_remove_one(struct pci_dev *pdev) +static void __devexit kvaser_pci_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -394,7 +394,7 @@ static struct pci_driver kvaser_pci_driver = { .name = DRV_NAME, .id_table = kvaser_pci_tbl, .probe = kvaser_pci_init_one, - .remove = kvaser_pci_remove_one, + .remove = __devexit_p(kvaser_pci_remove_one), }; module_pci_driver(kvaser_pci_driver); diff --git a/trunk/drivers/net/can/sja1000/peak_pci.c b/trunk/drivers/net/can/sja1000/peak_pci.c index 3faeb3d84362..6525dbcca4e3 100644 --- a/trunk/drivers/net/can/sja1000/peak_pci.c +++ b/trunk/drivers/net/can/sja1000/peak_pci.c @@ -551,7 +551,7 @@ static void peak_pci_post_irq(const struct sja1000_priv *priv) writew(chan->icr_mask, chan->cfg_base + PITA_ICR); } -static int peak_pci_probe(struct pci_dev *pdev, +static int __devinit peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct sja1000_priv *priv; @@ -717,7 +717,7 @@ static int peak_pci_probe(struct pci_dev *pdev, return err; } -static void peak_pci_remove(struct pci_dev *pdev) +static void __devexit peak_pci_remove(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); /* Last device */ struct sja1000_priv *priv = netdev_priv(dev); @@ -757,7 +757,7 @@ static struct pci_driver peak_pci_driver = { .name = DRV_NAME, .id_table = peak_pci_tbl, .probe = peak_pci_probe, - .remove = peak_pci_remove, + .remove = __devexit_p(peak_pci_remove), }; module_pci_driver(peak_pci_driver); diff --git a/trunk/drivers/net/can/sja1000/peak_pcmcia.c b/trunk/drivers/net/can/sja1000/peak_pcmcia.c index f1175142b0a0..272a85f32b14 100644 --- a/trunk/drivers/net/can/sja1000/peak_pcmcia.c +++ b/trunk/drivers/net/can/sja1000/peak_pcmcia.c @@ -632,7 +632,7 @@ static void pcan_free(struct pcmcia_device *pdev) /* * setup PCMCIA socket and probe for PEAK-System PC-CARD */ -static int pcan_probe(struct pcmcia_device *pdev) +static int __devinit pcan_probe(struct pcmcia_device *pdev) { struct pcan_pccard *card; int err; diff --git a/trunk/drivers/net/can/sja1000/plx_pci.c b/trunk/drivers/net/can/sja1000/plx_pci.c index 8b233f8c95f2..dc04407aa217 100644 --- a/trunk/drivers/net/can/sja1000/plx_pci.c +++ b/trunk/drivers/net/can/sja1000/plx_pci.c @@ -162,7 +162,7 @@ struct plx_pci_card_info { void (*reset_func)(struct pci_dev *pdev); }; -static struct plx_pci_card_info plx_pci_card_info_adlink = { +static struct plx_pci_card_info plx_pci_card_info_adlink __devinitdata = { "Adlink PCI-7841/cPCI-7841", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {1, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x80, 0x80} }, @@ -170,7 +170,7 @@ static struct plx_pci_card_info plx_pci_card_info_adlink = { /* based on PLX9052 */ }; -static struct plx_pci_card_info plx_pci_card_info_adlink_se = { +static struct plx_pci_card_info plx_pci_card_info_adlink_se __devinitdata = { "Adlink PCI-7841/cPCI-7841 SE", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x80, 0x80} }, @@ -178,7 +178,7 @@ static struct plx_pci_card_info plx_pci_card_info_adlink_se = { /* based on PLX9052 */ }; -static struct plx_pci_card_info plx_pci_card_info_esd200 = { +static struct plx_pci_card_info plx_pci_card_info_esd200 __devinitdata = { "esd CAN-PCI/CPCI/PCI104/200", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, @@ -186,7 +186,7 @@ static struct plx_pci_card_info plx_pci_card_info_esd200 = { /* based on PLX9030/9050 */ }; -static struct plx_pci_card_info plx_pci_card_info_esd266 = { +static struct plx_pci_card_info plx_pci_card_info_esd266 __devinitdata = { "esd CAN-PCI/PMC/266", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, @@ -194,7 +194,7 @@ static struct plx_pci_card_info plx_pci_card_info_esd266 = { /* based on PLX9056 */ }; -static struct plx_pci_card_info plx_pci_card_info_esd2000 = { +static struct plx_pci_card_info plx_pci_card_info_esd2000 __devinitdata = { "esd CAN-PCIe/2000", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, @@ -202,7 +202,7 @@ static struct plx_pci_card_info plx_pci_card_info_esd2000 = { /* based on PEX8311 */ }; -static struct plx_pci_card_info plx_pci_card_info_ixxat = { +static struct plx_pci_card_info plx_pci_card_info_ixxat __devinitdata = { "IXXAT PC-I 04/PCI", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x200, 0x80} }, @@ -210,7 +210,7 @@ static struct plx_pci_card_info plx_pci_card_info_ixxat = { /* based on PLX9050 */ }; -static struct plx_pci_card_info plx_pci_card_info_marathon = { +static struct plx_pci_card_info plx_pci_card_info_marathon __devinitdata = { "Marathon CAN-bus-PCI", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {0, 0x00, 0x00}, { {2, 0x00, 0x00}, {4, 0x00, 0x00} }, @@ -218,7 +218,7 @@ static struct plx_pci_card_info plx_pci_card_info_marathon = { /* based on PLX9052 */ }; -static struct plx_pci_card_info plx_pci_card_info_tews = { +static struct plx_pci_card_info plx_pci_card_info_tews __devinitdata = { "TEWS TECHNOLOGIES TPMC810", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {0, 0x00, 0x00}, { {2, 0x000, 0x80}, {2, 0x100, 0x80} }, @@ -226,7 +226,7 @@ static struct plx_pci_card_info plx_pci_card_info_tews = { /* based on PLX9030 */ }; -static struct plx_pci_card_info plx_pci_card_info_cti = { +static struct plx_pci_card_info plx_pci_card_info_cti __devinitdata = { "Connect Tech Inc. CANpro/104-Plus Opto (CRG001)", 2, PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, {0, 0x00, 0x00}, { {2, 0x000, 0x80}, {2, 0x100, 0x80} }, @@ -484,7 +484,7 @@ static void plx_pci_del_card(struct pci_dev *pdev) * Probe PLX90xx based device for the SJA1000 chips and register each * available CAN channel to SJA1000 Socket-CAN subsystem. */ -static int plx_pci_add_card(struct pci_dev *pdev, +static int __devinit plx_pci_add_card(struct pci_dev *pdev, const struct pci_device_id *ent) { struct sja1000_priv *priv; diff --git a/trunk/drivers/net/can/sja1000/sja1000_isa.c b/trunk/drivers/net/can/sja1000/sja1000_isa.c index 5c8da4661489..90c5c2dfd2fd 100644 --- a/trunk/drivers/net/can/sja1000/sja1000_isa.c +++ b/trunk/drivers/net/can/sja1000/sja1000_isa.c @@ -42,11 +42,11 @@ MODULE_LICENSE("GPL v2"); static unsigned long port[MAXDEV]; static unsigned long mem[MAXDEV]; -static int irq[MAXDEV]; -static int clk[MAXDEV]; -static unsigned char cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; -static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; -static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; +static int __devinitdata irq[MAXDEV]; +static int __devinitdata clk[MAXDEV]; +static unsigned char __devinitdata cdr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; +static unsigned char __devinitdata ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; +static int __devinitdata indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; module_param_array(port, ulong, NULL, S_IRUGO); MODULE_PARM_DESC(port, "I/O port number"); @@ -117,7 +117,7 @@ static void sja1000_isa_port_write_reg_indirect(const struct sja1000_priv *priv, outb(val, base + 1); } -static int sja1000_isa_probe(struct platform_device *pdev) +static int __devinit sja1000_isa_probe(struct platform_device *pdev) { struct net_device *dev; struct sja1000_priv *priv; @@ -223,7 +223,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) return err; } -static int sja1000_isa_remove(struct platform_device *pdev) +static int __devexit sja1000_isa_remove(struct platform_device *pdev) { struct net_device *dev = dev_get_drvdata(&pdev->dev); struct sja1000_priv *priv = netdev_priv(dev); @@ -248,7 +248,7 @@ static int sja1000_isa_remove(struct platform_device *pdev) static struct platform_driver sja1000_isa_driver = { .probe = sja1000_isa_probe, - .remove = sja1000_isa_remove, + .remove = __devexit_p(sja1000_isa_remove), .driver = { .name = DRV_NAME, .owner = THIS_MODULE, diff --git a/trunk/drivers/net/can/sja1000/sja1000_of_platform.c b/trunk/drivers/net/can/sja1000/sja1000_of_platform.c index 0f5917000aa2..e45258d4369b 100644 --- a/trunk/drivers/net/can/sja1000/sja1000_of_platform.c +++ b/trunk/drivers/net/can/sja1000/sja1000_of_platform.c @@ -70,7 +70,7 @@ static void sja1000_ofp_write_reg(const struct sja1000_priv *priv, iowrite8(val, priv->reg_base + reg); } -static int sja1000_ofp_remove(struct platform_device *ofdev) +static int __devexit sja1000_ofp_remove(struct platform_device *ofdev) { struct net_device *dev = dev_get_drvdata(&ofdev->dev); struct sja1000_priv *priv = netdev_priv(dev); @@ -90,7 +90,7 @@ static int sja1000_ofp_remove(struct platform_device *ofdev) return 0; } -static int sja1000_ofp_probe(struct platform_device *ofdev) +static int __devinit sja1000_ofp_probe(struct platform_device *ofdev) { struct device_node *np = ofdev->dev.of_node; struct net_device *dev; @@ -206,7 +206,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev) return err; } -static struct of_device_id sja1000_ofp_table[] = { +static struct of_device_id __devinitdata sja1000_ofp_table[] = { {.compatible = "nxp,sja1000"}, {}, }; @@ -219,7 +219,7 @@ static struct platform_driver sja1000_ofp_driver = { .of_match_table = sja1000_ofp_table, }, .probe = sja1000_ofp_probe, - .remove = sja1000_ofp_remove, + .remove = __devexit_p(sja1000_ofp_remove), }; module_platform_driver(sja1000_ofp_driver); diff --git a/trunk/drivers/net/can/sja1000/tscan1.c b/trunk/drivers/net/can/sja1000/tscan1.c index 76513dd780c7..9756099a883a 100644 --- a/trunk/drivers/net/can/sja1000/tscan1.c +++ b/trunk/drivers/net/can/sja1000/tscan1.c @@ -71,7 +71,7 @@ MODULE_LICENSE("GPL"); #define TSCAN1_SJA1000_XTAL 16000000 /* SJA1000 IO base addresses */ -static const unsigned short tscan1_sja1000_addresses[] = { +static const unsigned short tscan1_sja1000_addresses[] __devinitconst = { 0x100, 0x120, 0x180, 0x1a0, 0x200, 0x240, 0x280, 0x320 }; @@ -88,7 +88,7 @@ static void tscan1_write(const struct sja1000_priv *priv, int reg, u8 val) } /* Probe for a TS-CAN1 board with JP2:JP1 jumper setting ID */ -static int tscan1_probe(struct device *dev, unsigned id) +static int __devinit tscan1_probe(struct device *dev, unsigned id) { struct net_device *netdev; struct sja1000_priv *priv; @@ -171,7 +171,7 @@ static int tscan1_probe(struct device *dev, unsigned id) return -ENXIO; } -static int tscan1_remove(struct device *dev, unsigned id /*unused*/) +static int __devexit tscan1_remove(struct device *dev, unsigned id /*unused*/) { struct net_device *netdev; struct sja1000_priv *priv; @@ -197,7 +197,7 @@ static int tscan1_remove(struct device *dev, unsigned id /*unused*/) static struct isa_driver tscan1_isa_driver = { .probe = tscan1_probe, - .remove = tscan1_remove, + .remove = __devexit_p(tscan1_remove), .driver = { .name = "tscan1", }, diff --git a/trunk/drivers/net/can/softing/softing_cs.c b/trunk/drivers/net/can/softing/softing_cs.c index ce18ba52e4b9..c0e1b1eb87a9 100644 --- a/trunk/drivers/net/can/softing/softing_cs.c +++ b/trunk/drivers/net/can/softing/softing_cs.c @@ -159,7 +159,7 @@ MODULE_FIRMWARE(fw_dir "bcard2.bin"); MODULE_FIRMWARE(fw_dir "ldcard2.bin"); MODULE_FIRMWARE(fw_dir "cancrd2.bin"); -static const struct softing_platform_data +static __devinit const struct softing_platform_data *softingcs_find_platform_data(unsigned int manf, unsigned int prod) { const struct softing_platform_data *lp; @@ -193,7 +193,7 @@ static int softingcs_enable_irq(struct platform_device *pdev, int v) /* * pcmcia check */ -static int softingcs_probe_config(struct pcmcia_device *pcmcia, +static __devinit int softingcs_probe_config(struct pcmcia_device *pcmcia, void *priv_data) { struct softing_platform_data *pdat = priv_data; @@ -215,7 +215,7 @@ static int softingcs_probe_config(struct pcmcia_device *pcmcia, return pcmcia_request_window(pcmcia, pres, memspeed); } -static void softingcs_remove(struct pcmcia_device *pcmcia) +static __devexit void softingcs_remove(struct pcmcia_device *pcmcia) { struct platform_device *pdev = pcmcia->priv; @@ -235,7 +235,7 @@ static void softingcs_pdev_release(struct device *dev) kfree(pdev); } -static int softingcs_probe(struct pcmcia_device *pcmcia) +static __devinit int softingcs_probe(struct pcmcia_device *pcmcia) { int ret; struct platform_device *pdev; @@ -338,7 +338,7 @@ static struct pcmcia_driver softingcs_driver = { .name = "softingcs", .id_table = softingcs_ids, .probe = softingcs_probe, - .remove = softingcs_remove, + .remove = __devexit_p(softingcs_remove), }; static int __init softingcs_start(void) diff --git a/trunk/drivers/net/can/softing/softing_main.c b/trunk/drivers/net/can/softing/softing_main.c index 50b1e0f21f1c..f2a221e7b968 100644 --- a/trunk/drivers/net/can/softing/softing_main.c +++ b/trunk/drivers/net/can/softing/softing_main.c @@ -478,7 +478,7 @@ static void softing_card_shutdown(struct softing *card) mutex_unlock(&card->fw.lock); } -static int softing_card_boot(struct softing *card) +static __devinit int softing_card_boot(struct softing *card) { int ret, j; static const uint8_t stream[] = { @@ -645,7 +645,7 @@ static const struct can_bittiming_const softing_btr_const = { }; -static struct net_device *softing_netdev_create(struct softing *card, +static __devinit struct net_device *softing_netdev_create(struct softing *card, uint16_t chip_id) { struct net_device *netdev; @@ -676,7 +676,7 @@ static struct net_device *softing_netdev_create(struct softing *card, return netdev; } -static int softing_netdev_register(struct net_device *netdev) +static __devinit int softing_netdev_register(struct net_device *netdev) { int ret; @@ -745,7 +745,7 @@ static const struct attribute_group softing_pdev_group = { /* * platform driver */ -static int softing_pdev_remove(struct platform_device *pdev) +static __devexit int softing_pdev_remove(struct platform_device *pdev) { struct softing *card = platform_get_drvdata(pdev); int j; @@ -766,7 +766,7 @@ static int softing_pdev_remove(struct platform_device *pdev) return 0; } -static int softing_pdev_probe(struct platform_device *pdev) +static __devinit int softing_pdev_probe(struct platform_device *pdev) { const struct softing_platform_data *pdat = pdev->dev.platform_data; struct softing *card; @@ -871,7 +871,7 @@ static struct platform_driver softing_driver = { .owner = THIS_MODULE, }, .probe = softing_pdev_probe, - .remove = softing_pdev_remove, + .remove = __devexit_p(softing_pdev_remove), }; module_platform_driver(softing_driver); diff --git a/trunk/drivers/net/can/ti_hecc.c b/trunk/drivers/net/can/ti_hecc.c index f898c6363729..1267b366dcfe 100644 --- a/trunk/drivers/net/can/ti_hecc.c +++ b/trunk/drivers/net/can/ti_hecc.c @@ -978,7 +978,7 @@ static int ti_hecc_probe(struct platform_device *pdev) return err; } -static int ti_hecc_remove(struct platform_device *pdev) +static int __devexit ti_hecc_remove(struct platform_device *pdev) { struct resource *res; struct net_device *ndev = platform_get_drvdata(pdev); @@ -1045,7 +1045,7 @@ static struct platform_driver ti_hecc_driver = { .owner = THIS_MODULE, }, .probe = ti_hecc_probe, - .remove = ti_hecc_remove, + .remove = __devexit_p(ti_hecc_remove), .suspend = ti_hecc_suspend, .resume = ti_hecc_resume, }; diff --git a/trunk/drivers/net/ethernet/3com/3c509.c b/trunk/drivers/net/ethernet/3com/3c509.c index 9300185da976..1a8eef2c3d58 100644 --- a/trunk/drivers/net/ethernet/3com/3c509.c +++ b/trunk/drivers/net/ethernet/3com/3c509.c @@ -92,7 +92,7 @@ #include #include -static char version[] = DRV_NAME ".c:" DRV_VERSION " " DRV_RELDATE " becker@scyld.com\n"; +static char version[] __devinitdata = DRV_NAME ".c:" DRV_VERSION " " DRV_RELDATE " becker@scyld.com\n"; #ifdef EL3_DEBUG static int el3_debug = EL3_DEBUG; @@ -184,7 +184,7 @@ static int max_interrupt_work = 10; static int nopnp; #endif -static int el3_common_init(struct net_device *dev); +static int __devinit el3_common_init(struct net_device *dev); static void el3_common_remove(struct net_device *dev); static ushort id_read_eeprom(int index); static ushort read_eeprom(int ioaddr, int index); @@ -270,7 +270,7 @@ static int el3_isa_id_sequence(__be16 *phys_addr) } -static void el3_dev_fill(struct net_device *dev, __be16 *phys_addr, +static void __devinit el3_dev_fill(struct net_device *dev, __be16 *phys_addr, int ioaddr, int irq, int if_port, enum el3_cardtype type) { @@ -283,7 +283,7 @@ static void el3_dev_fill(struct net_device *dev, __be16 *phys_addr, lp->type = type; } -static int el3_isa_match(struct device *pdev, +static int __devinit el3_isa_match(struct device *pdev, unsigned int ndev) { struct net_device *dev; @@ -341,7 +341,7 @@ static int el3_isa_match(struct device *pdev, return 1; } -static int el3_isa_remove(struct device *pdev, +static int __devexit el3_isa_remove(struct device *pdev, unsigned int ndev) { el3_device_remove(pdev); @@ -382,7 +382,7 @@ static int el3_isa_resume(struct device *dev, unsigned int n) static struct isa_driver el3_isa_driver = { .match = el3_isa_match, - .remove = el3_isa_remove, + .remove = __devexit_p(el3_isa_remove), #ifdef CONFIG_PM .suspend = el3_isa_suspend, .resume = el3_isa_resume, @@ -406,7 +406,7 @@ static struct pnp_device_id el3_pnp_ids[] = { }; MODULE_DEVICE_TABLE(pnp, el3_pnp_ids); -static int el3_pnp_probe(struct pnp_dev *pdev, +static int __devinit el3_pnp_probe(struct pnp_dev *pdev, const struct pnp_device_id *id) { short i; @@ -445,7 +445,7 @@ static int el3_pnp_probe(struct pnp_dev *pdev, return 0; } -static void el3_pnp_remove(struct pnp_dev *pdev) +static void __devexit el3_pnp_remove(struct pnp_dev *pdev) { el3_common_remove(pnp_get_drvdata(pdev)); pnp_set_drvdata(pdev, NULL); @@ -467,7 +467,7 @@ static struct pnp_driver el3_pnp_driver = { .name = "3c509", .id_table = el3_pnp_ids, .probe = el3_pnp_probe, - .remove = el3_pnp_remove, + .remove = __devexit_p(el3_pnp_remove), #ifdef CONFIG_PM .suspend = el3_pnp_suspend, .resume = el3_pnp_resume, @@ -496,7 +496,7 @@ static struct eisa_driver el3_eisa_driver = { .driver = { .name = "3c579", .probe = el3_eisa_probe, - .remove = el3_device_remove, + .remove = __devexit_p (el3_device_remove), .suspend = el3_suspend, .resume = el3_resume, } @@ -519,7 +519,7 @@ static const struct net_device_ops netdev_ops = { #endif }; -static int el3_common_init(struct net_device *dev) +static int __devinit el3_common_init(struct net_device *dev) { struct el3_private *lp = netdev_priv(dev); int err; @@ -618,7 +618,7 @@ static int __init el3_eisa_probe (struct device *device) /* This remove works for all device types. * * The net dev must be stored in the driver data field */ -static int el3_device_remove(struct device *device) +static int __devexit el3_device_remove (struct device *device) { struct net_device *dev; diff --git a/trunk/drivers/net/ethernet/3com/3c59x.c b/trunk/drivers/net/ethernet/3com/3c59x.c index 658e224b3613..e463d1036829 100644 --- a/trunk/drivers/net/ethernet/3com/3c59x.c +++ b/trunk/drivers/net/ethernet/3com/3c59x.c @@ -102,7 +102,7 @@ static int vortex_debug = 1; #include -static const char version[] = +static const char version[] __devinitconst = DRV_NAME ": Donald Becker and others.\n"; MODULE_AUTHOR("Donald Becker "); @@ -277,7 +277,7 @@ static struct vortex_chip_info { int flags; int drv_flags; int io_size; -} vortex_info_tbl[] = { +} vortex_info_tbl[] __devinitdata = { {"3c590 Vortex 10Mbps", PCI_USES_MASTER, IS_VORTEX, 32, }, {"3c592 EISA 10Mbps Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */ @@ -931,7 +931,7 @@ static int __init vortex_eisa_probe(struct device *device) return 0; } -static int vortex_eisa_remove(struct device *device) +static int __devexit vortex_eisa_remove(struct device *device) { struct eisa_device *edev; struct net_device *dev; @@ -962,7 +962,7 @@ static struct eisa_driver vortex_eisa_driver = { .driver = { .name = "3c59x", .probe = vortex_eisa_probe, - .remove = vortex_eisa_remove + .remove = __devexit_p(vortex_eisa_remove) } }; @@ -1000,7 +1000,7 @@ static int __init vortex_eisa_init(void) } /* returns count (>= 0), or negative on error */ -static int vortex_init_one(struct pci_dev *pdev, +static int __devinit vortex_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { int rc, unit, pci_bar; @@ -1088,7 +1088,7 @@ static const struct net_device_ops vortex_netdev_ops = { * * NOTE: pdev can be NULL, for the case of a Compaq device */ -static int vortex_probe1(struct device *gendev, +static int __devinit vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq, int chip_idx, int card_idx) { @@ -3222,7 +3222,7 @@ static void acpi_set_WOL(struct net_device *dev) } -static void vortex_remove_one(struct pci_dev *pdev) +static void __devexit vortex_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct vortex_private *vp; @@ -3265,7 +3265,7 @@ static void vortex_remove_one(struct pci_dev *pdev) static struct pci_driver vortex_driver = { .name = "3c59x", .probe = vortex_init_one, - .remove = vortex_remove_one, + .remove = __devexit_p(vortex_remove_one), .id_table = vortex_pci_tbl, .driver.pm = VORTEX_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/3com/typhoon.c b/trunk/drivers/net/ethernet/3com/typhoon.c index 27aaaf99e73e..bb9670f29b59 100644 --- a/trunk/drivers/net/ethernet/3com/typhoon.c +++ b/trunk/drivers/net/ethernet/3com/typhoon.c @@ -168,7 +168,7 @@ enum typhoon_cards { }; /* directly indexed by enum typhoon_cards, above */ -static struct typhoon_card_info typhoon_card_info[] = { +static struct typhoon_card_info typhoon_card_info[] __devinitdata = { { "3Com Typhoon (3C990-TX)", TYPHOON_CRYPTO_NONE}, { "3Com Typhoon (3CR990-TX-95)", @@ -2200,7 +2200,7 @@ typhoon_suspend(struct pci_dev *pdev, pm_message_t state) } #endif -static int +static int __devinit typhoon_test_mmio(struct pci_dev *pdev) { void __iomem *ioaddr = pci_iomap(pdev, 1, 128); @@ -2258,7 +2258,7 @@ static const struct net_device_ops typhoon_netdev_ops = { .ndo_change_mtu = eth_change_mtu, }; -static int +static int __devinit typhoon_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; @@ -2509,7 +2509,7 @@ typhoon_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) return err; } -static void +static void __devexit typhoon_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -2533,7 +2533,7 @@ static struct pci_driver typhoon_driver = { .name = KBUILD_MODNAME, .id_table = typhoon_pci_tbl, .probe = typhoon_init_one, - .remove = typhoon_remove_one, + .remove = __devexit_p(typhoon_remove_one), #ifdef CONFIG_PM .suspend = typhoon_suspend, .resume = typhoon_resume, diff --git a/trunk/drivers/net/ethernet/8390/etherh.c b/trunk/drivers/net/ethernet/8390/etherh.c index 78c6fb4b1143..6414e84516c0 100644 --- a/trunk/drivers/net/ethernet/8390/etherh.c +++ b/trunk/drivers/net/ethernet/8390/etherh.c @@ -521,7 +521,7 @@ static void __init etherh_banner(void) * Read the ethernet address string from the on board rom. * This is an ascii string... */ -static int etherh_addr(char *addr, struct expansion_card *ec) +static int __devinit etherh_addr(char *addr, struct expansion_card *ec) { struct in_chunk_dir cd; char *s; @@ -651,7 +651,7 @@ static const struct net_device_ops etherh_netdev_ops = { static u32 etherh_regoffsets[16]; static u32 etherm_regoffsets[16]; -static int +static int __devinit etherh_probe(struct expansion_card *ec, const struct ecard_id *id) { const struct etherh_data *data = id->data; @@ -769,7 +769,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id) return ret; } -static void etherh_remove(struct expansion_card *ec) +static void __devexit etherh_remove(struct expansion_card *ec) { struct net_device *dev = ecard_get_drvdata(ec); @@ -833,7 +833,7 @@ static const struct ecard_id etherh_ids[] = { static struct ecard_driver etherh_driver = { .probe = etherh_probe, - .remove = etherh_remove, + .remove = __devexit_p(etherh_remove), .id_table = etherh_ids, .drv = { .name = DRV_NAME, diff --git a/trunk/drivers/net/ethernet/8390/hydra.c b/trunk/drivers/net/ethernet/8390/hydra.c index bc81de1b7d4f..5370c884620b 100644 --- a/trunk/drivers/net/ethernet/8390/hydra.c +++ b/trunk/drivers/net/ethernet/8390/hydra.c @@ -53,9 +53,9 @@ static const char version[] = #define WORDSWAP(a) ((((a)>>8)&0xff) | ((a)<<8)) -static int hydra_init_one(struct zorro_dev *z, +static int __devinit hydra_init_one(struct zorro_dev *z, const struct zorro_device_id *ent); -static int hydra_init(struct zorro_dev *z); +static int __devinit hydra_init(struct zorro_dev *z); static int hydra_open(struct net_device *dev); static int hydra_close(struct net_device *dev); static void hydra_reset_8390(struct net_device *dev); @@ -65,9 +65,9 @@ static void hydra_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset); static void hydra_block_output(struct net_device *dev, int count, const unsigned char *buf, int start_page); -static void hydra_remove_one(struct zorro_dev *z); +static void __devexit hydra_remove_one(struct zorro_dev *z); -static struct zorro_device_id hydra_zorro_tbl[] = { +static struct zorro_device_id hydra_zorro_tbl[] __devinitdata = { { ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET }, { 0 } }; @@ -77,10 +77,10 @@ static struct zorro_driver hydra_driver = { .name = "hydra", .id_table = hydra_zorro_tbl, .probe = hydra_init_one, - .remove = hydra_remove_one, + .remove = __devexit_p(hydra_remove_one), }; -static int hydra_init_one(struct zorro_dev *z, +static int __devinit hydra_init_one(struct zorro_dev *z, const struct zorro_device_id *ent) { int err; @@ -110,7 +110,7 @@ static const struct net_device_ops hydra_netdev_ops = { #endif }; -static int hydra_init(struct zorro_dev *z) +static int __devinit hydra_init(struct zorro_dev *z) { struct net_device *dev; unsigned long board = ZTWO_VADDR(z->resource.start); @@ -247,7 +247,7 @@ static void hydra_block_output(struct net_device *dev, int count, z_memcpy_toio(mem_base+((start_page - NESM_START_PG)<<8), buf, count); } -static void hydra_remove_one(struct zorro_dev *z) +static void __devexit hydra_remove_one(struct zorro_dev *z) { struct net_device *dev = zorro_get_drvdata(z); diff --git a/trunk/drivers/net/ethernet/8390/ne2k-pci.c b/trunk/drivers/net/ethernet/8390/ne2k-pci.c index c0c127913dec..5e8845febfb8 100644 --- a/trunk/drivers/net/ethernet/8390/ne2k-pci.c +++ b/trunk/drivers/net/ethernet/8390/ne2k-pci.c @@ -61,7 +61,7 @@ static int options[MAX_UNITS]; #include "8390.h" /* These identify the driver base version and may not be removed. */ -static const char version[] = +static const char version[] __devinitconst = KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " D. Becker/P. Gortmaker\n"; @@ -119,7 +119,7 @@ enum ne2k_pci_chipsets { static struct { char *name; int flags; -} pci_clone_list[] = { +} pci_clone_list[] __devinitdata = { {"RealTek RTL-8029", REALTEK_FDX}, {"Winbond 89C940", 0}, {"Compex RL2000", 0}, @@ -215,8 +215,8 @@ static const struct net_device_ops ne2k_netdev_ops = { #endif }; -static int ne2k_pci_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit ne2k_pci_init_one (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct net_device *dev; int i; @@ -647,7 +647,7 @@ static const struct ethtool_ops ne2k_pci_ethtool_ops = { .get_drvinfo = ne2k_pci_get_drvinfo, }; -static void ne2k_pci_remove_one(struct pci_dev *pdev) +static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -696,7 +696,7 @@ static int ne2k_pci_resume (struct pci_dev *pdev) static struct pci_driver ne2k_driver = { .name = DRV_NAME, .probe = ne2k_pci_init_one, - .remove = ne2k_pci_remove_one, + .remove = __devexit_p(ne2k_pci_remove_one), .id_table = ne2k_pci_tbl, #ifdef CONFIG_PM .suspend = ne2k_pci_suspend, diff --git a/trunk/drivers/net/ethernet/8390/ne3210.c b/trunk/drivers/net/ethernet/8390/ne3210.c index ebcdb52ec739..e3f57427d5c5 100644 --- a/trunk/drivers/net/ethernet/8390/ne3210.c +++ b/trunk/drivers/net/ethernet/8390/ne3210.c @@ -222,7 +222,7 @@ static int __init ne3210_eisa_probe (struct device *device) return retval; } -static int ne3210_eisa_remove(struct device *device) +static int __devexit ne3210_eisa_remove (struct device *device) { struct net_device *dev = dev_get_drvdata(device); unsigned long ioaddr = to_eisa_device (device)->base_addr; @@ -324,7 +324,7 @@ static struct eisa_driver ne3210_eisa_driver = { .driver = { .name = "ne3210", .probe = ne3210_eisa_probe, - .remove = ne3210_eisa_remove, + .remove = __devexit_p (ne3210_eisa_remove), }, }; diff --git a/trunk/drivers/net/ethernet/8390/zorro8390.c b/trunk/drivers/net/ethernet/8390/zorro8390.c index ceb89d90230e..7818e6397e91 100644 --- a/trunk/drivers/net/ethernet/8390/zorro8390.c +++ b/trunk/drivers/net/ethernet/8390/zorro8390.c @@ -75,7 +75,7 @@ static struct card_info { zorro_id id; const char *name; unsigned int offset; -} cards[] = { +} cards[] __devinitdata = { { ZORRO_PROD_VILLAGE_TRONIC_ARIADNE2, "Ariadne II", 0x0600 }, { ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF, "X-Surf", 0x8600 }, }; @@ -254,7 +254,7 @@ static int zorro8390_close(struct net_device *dev) return 0; } -static void zorro8390_remove_one(struct zorro_dev *z) +static void __devexit zorro8390_remove_one(struct zorro_dev *z) { struct net_device *dev = zorro_get_drvdata(z); @@ -264,7 +264,7 @@ static void zorro8390_remove_one(struct zorro_dev *z) free_netdev(dev); } -static struct zorro_device_id zorro8390_zorro_tbl[] = { +static struct zorro_device_id zorro8390_zorro_tbl[] __devinitdata = { { ZORRO_PROD_VILLAGE_TRONIC_ARIADNE2, }, { ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF, }, { 0 } @@ -286,7 +286,7 @@ static const struct net_device_ops zorro8390_netdev_ops = { #endif }; -static int zorro8390_init(struct net_device *dev, +static int __devinit zorro8390_init(struct net_device *dev, unsigned long board, const char *name, unsigned long ioaddr) { @@ -396,7 +396,7 @@ static int zorro8390_init(struct net_device *dev, return 0; } -static int zorro8390_init_one(struct zorro_dev *z, +static int __devinit zorro8390_init_one(struct zorro_dev *z, const struct zorro_device_id *ent) { struct net_device *dev; @@ -432,7 +432,7 @@ static struct zorro_driver zorro8390_driver = { .name = "zorro8390", .id_table = zorro8390_zorro_tbl, .probe = zorro8390_init_one, - .remove = zorro8390_remove_one, + .remove = __devexit_p(zorro8390_remove_one), }; static int __init zorro8390_init_module(void) diff --git a/trunk/drivers/net/ethernet/adaptec/starfire.c b/trunk/drivers/net/ethernet/adaptec/starfire.c index d67c192b6505..5b65992c2a0a 100644 --- a/trunk/drivers/net/ethernet/adaptec/starfire.c +++ b/trunk/drivers/net/ethernet/adaptec/starfire.c @@ -166,7 +166,7 @@ static int rx_copybreak /* = 0 */; #define FIRMWARE_TX "adaptec/starfire_tx.bin" /* These identify the driver base version and may not be removed. */ -static const char version[] = +static const char version[] __devinitconst = KERN_INFO "starfire.c:v1.03 7/26/2000 Written by Donald Becker \n" " (unofficial 2.2/2.4 kernel port, version " DRV_VERSION ", " DRV_RELDATE ")\n"; @@ -295,7 +295,7 @@ MODULE_DEVICE_TABLE(pci, starfire_pci_tbl); static const struct chip_info { const char *name; int drv_flags; -} netdrv_tbl[] = { +} netdrv_tbl[] __devinitconst = { { "Adaptec Starfire 6915", CanHaveMII }, }; @@ -641,7 +641,7 @@ static const struct net_device_ops netdev_ops = { #endif }; -static int starfire_init_one(struct pci_dev *pdev, +static int __devinit starfire_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct device *d = &pdev->dev; @@ -1990,7 +1990,7 @@ static int starfire_resume(struct pci_dev *pdev) #endif /* CONFIG_PM */ -static void starfire_remove_one(struct pci_dev *pdev) +static void __devexit starfire_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct netdev_private *np = netdev_priv(dev); @@ -2018,7 +2018,7 @@ static void starfire_remove_one(struct pci_dev *pdev) static struct pci_driver starfire_driver = { .name = DRV_NAME, .probe = starfire_init_one, - .remove = starfire_remove_one, + .remove = __devexit_p(starfire_remove_one), #ifdef CONFIG_PM .suspend = starfire_suspend, .resume = starfire_resume, diff --git a/trunk/drivers/net/ethernet/adi/bfin_mac.c b/trunk/drivers/net/ethernet/adi/bfin_mac.c index c1fdb8be8bee..f1c458dc039a 100644 --- a/trunk/drivers/net/ethernet/adi/bfin_mac.c +++ b/trunk/drivers/net/ethernet/adi/bfin_mac.c @@ -1603,7 +1603,7 @@ static const struct net_device_ops bfin_mac_netdev_ops = { #endif }; -static int bfin_mac_probe(struct platform_device *pdev) +static int __devinit bfin_mac_probe(struct platform_device *pdev) { struct net_device *ndev; struct bfin_mac_local *lp; @@ -1727,7 +1727,7 @@ static int bfin_mac_probe(struct platform_device *pdev) return rc; } -static int bfin_mac_remove(struct platform_device *pdev) +static int __devexit bfin_mac_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct bfin_mac_local *lp = netdev_priv(ndev); @@ -1786,7 +1786,7 @@ static int bfin_mac_resume(struct platform_device *pdev) #define bfin_mac_resume NULL #endif /* CONFIG_PM */ -static int bfin_mii_bus_probe(struct platform_device *pdev) +static int __devinit bfin_mii_bus_probe(struct platform_device *pdev) { struct mii_bus *miibus; struct bfin_mii_bus_platform_data *mii_bus_pd; @@ -1864,7 +1864,7 @@ static int bfin_mii_bus_probe(struct platform_device *pdev) return rc; } -static int bfin_mii_bus_remove(struct platform_device *pdev) +static int __devexit bfin_mii_bus_remove(struct platform_device *pdev) { struct mii_bus *miibus = platform_get_drvdata(pdev); struct bfin_mii_bus_platform_data *mii_bus_pd = @@ -1881,7 +1881,7 @@ static int bfin_mii_bus_remove(struct platform_device *pdev) static struct platform_driver bfin_mii_bus_driver = { .probe = bfin_mii_bus_probe, - .remove = bfin_mii_bus_remove, + .remove = __devexit_p(bfin_mii_bus_remove), .driver = { .name = "bfin_mii_bus", .owner = THIS_MODULE, @@ -1890,7 +1890,7 @@ static struct platform_driver bfin_mii_bus_driver = { static struct platform_driver bfin_mac_driver = { .probe = bfin_mac_probe, - .remove = bfin_mac_remove, + .remove = __devexit_p(bfin_mac_remove), .resume = bfin_mac_resume, .suspend = bfin_mac_suspend, .driver = { diff --git a/trunk/drivers/net/ethernet/aeroflex/greth.c b/trunk/drivers/net/ethernet/aeroflex/greth.c index aa53115bb38b..9c77c736f171 100644 --- a/trunk/drivers/net/ethernet/aeroflex/greth.c +++ b/trunk/drivers/net/ethernet/aeroflex/greth.c @@ -1376,7 +1376,7 @@ static int greth_mdio_init(struct greth_private *greth) } /* Initialize the GRETH MAC */ -static int greth_of_probe(struct platform_device *ofdev) +static int __devinit greth_of_probe(struct platform_device *ofdev) { struct net_device *dev; struct greth_private *greth; @@ -1576,7 +1576,7 @@ static int greth_of_probe(struct platform_device *ofdev) return err; } -static int greth_of_remove(struct platform_device *of_dev) +static int __devexit greth_of_remove(struct platform_device *of_dev) { struct net_device *ndev = dev_get_drvdata(&of_dev->dev); struct greth_private *greth = netdev_priv(ndev); @@ -1619,7 +1619,7 @@ static struct platform_driver greth_of_driver = { .of_match_table = greth_of_match, }, .probe = greth_of_probe, - .remove = greth_of_remove, + .remove = __devexit_p(greth_of_remove), }; module_platform_driver(greth_of_driver); diff --git a/trunk/drivers/net/ethernet/alteon/acenic.c b/trunk/drivers/net/ethernet/alteon/acenic.c index dfddce6342e5..7219123fa0a4 100644 --- a/trunk/drivers/net/ethernet/alteon/acenic.c +++ b/trunk/drivers/net/ethernet/alteon/acenic.c @@ -426,7 +426,7 @@ MODULE_PARM_DESC(max_rx_desc, "AceNIC/3C985/GA620 max number of receive descript MODULE_PARM_DESC(tx_ratio, "AceNIC/3C985/GA620 ratio of NIC memory used for TX/RX descriptors (range 0-63)"); -static const char version[] = +static const char version[] __devinitconst = "acenic.c: v0.92 08/05/2002 Jes Sorensen, linux-acenic@SunSITE.dk\n" " http://home.cern.ch/~jes/gige/acenic.html\n"; @@ -454,7 +454,7 @@ static const struct net_device_ops ace_netdev_ops = { .ndo_change_mtu = ace_change_mtu, }; -static int acenic_probe_one(struct pci_dev *pdev, +static int __devinit acenic_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) { struct net_device *dev; @@ -603,7 +603,7 @@ static int acenic_probe_one(struct pci_dev *pdev, return -ENODEV; } -static void acenic_remove_one(struct pci_dev *pdev) +static void __devexit acenic_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct ace_private *ap = netdev_priv(dev); @@ -699,7 +699,7 @@ static struct pci_driver acenic_pci_driver = { .name = "acenic", .id_table = acenic_pci_tbl, .probe = acenic_probe_one, - .remove = acenic_remove_one, + .remove = __devexit_p(acenic_remove_one), }; static int __init acenic_init(void) @@ -871,7 +871,7 @@ static inline void ace_issue_cmd(struct ace_regs __iomem *regs, struct cmd *cmd) } -static int ace_init(struct net_device *dev) +static int __devinit ace_init(struct net_device *dev) { struct ace_private *ap; struct ace_regs __iomem *regs; @@ -2824,7 +2824,7 @@ static struct net_device_stats *ace_get_stats(struct net_device *dev) } -static void ace_copy(struct ace_regs __iomem *regs, const __be32 *src, +static void __devinit ace_copy(struct ace_regs __iomem *regs, const __be32 *src, u32 dest, int size) { void __iomem *tdest; @@ -2851,7 +2851,7 @@ static void ace_copy(struct ace_regs __iomem *regs, const __be32 *src, } -static void ace_clear(struct ace_regs __iomem *regs, u32 dest, int size) +static void __devinit ace_clear(struct ace_regs __iomem *regs, u32 dest, int size) { void __iomem *tdest; short tsize = 0, i; @@ -2882,7 +2882,7 @@ static void ace_clear(struct ace_regs __iomem *regs, u32 dest, int size) * This operation requires the NIC to be halted and is performed with * interrupts disabled and with the spinlock hold. */ -static int ace_load_firmware(struct net_device *dev) +static int __devinit ace_load_firmware(struct net_device *dev) { const struct firmware *fw; const char *fw_name = "acenic/tg2.bin"; @@ -2962,7 +2962,7 @@ static int ace_load_firmware(struct net_device *dev) * Thanks to Stevarino Webinski for helping tracking down the bugs in the * code i2c readout code by beta testing all my hacks. */ -static void eeprom_start(struct ace_regs __iomem *regs) +static void __devinit eeprom_start(struct ace_regs __iomem *regs) { u32 local; @@ -2991,7 +2991,7 @@ static void eeprom_start(struct ace_regs __iomem *regs) } -static void eeprom_prep(struct ace_regs __iomem *regs, u8 magic) +static void __devinit eeprom_prep(struct ace_regs __iomem *regs, u8 magic) { short i; u32 local; @@ -3028,7 +3028,7 @@ static void eeprom_prep(struct ace_regs __iomem *regs, u8 magic) } -static int eeprom_check_ack(struct ace_regs __iomem *regs) +static int __devinit eeprom_check_ack(struct ace_regs __iomem *regs) { int state; u32 local; @@ -3056,7 +3056,7 @@ static int eeprom_check_ack(struct ace_regs __iomem *regs) } -static void eeprom_stop(struct ace_regs __iomem *regs) +static void __devinit eeprom_stop(struct ace_regs __iomem *regs) { u32 local; @@ -3091,7 +3091,7 @@ static void eeprom_stop(struct ace_regs __iomem *regs) /* * Read a whole byte from the EEPROM. */ -static int read_eeprom_byte(struct net_device *dev, +static int __devinit read_eeprom_byte(struct net_device *dev, unsigned long offset) { struct ace_private *ap = netdev_priv(dev); diff --git a/trunk/drivers/net/ethernet/amd/a2065.c b/trunk/drivers/net/ethernet/amd/a2065.c index 818f6d6cdbe0..689dfcafc6d4 100644 --- a/trunk/drivers/net/ethernet/amd/a2065.c +++ b/trunk/drivers/net/ethernet/amd/a2065.c @@ -639,12 +639,12 @@ static void lance_set_multicast(struct net_device *dev) netif_wake_queue(dev); } -static int a2065_init_one(struct zorro_dev *z, +static int __devinit a2065_init_one(struct zorro_dev *z, const struct zorro_device_id *ent); -static void a2065_remove_one(struct zorro_dev *z); +static void __devexit a2065_remove_one(struct zorro_dev *z); -static struct zorro_device_id a2065_zorro_tbl[] = { +static struct zorro_device_id a2065_zorro_tbl[] __devinitdata = { { ZORRO_PROD_CBM_A2065_1 }, { ZORRO_PROD_CBM_A2065_2 }, { ZORRO_PROD_AMERISTAR_A2065 }, @@ -656,7 +656,7 @@ static struct zorro_driver a2065_driver = { .name = "a2065", .id_table = a2065_zorro_tbl, .probe = a2065_init_one, - .remove = a2065_remove_one, + .remove = __devexit_p(a2065_remove_one), }; static const struct net_device_ops lance_netdev_ops = { @@ -670,7 +670,7 @@ static const struct net_device_ops lance_netdev_ops = { .ndo_set_mac_address = eth_mac_addr, }; -static int a2065_init_one(struct zorro_dev *z, +static int __devinit a2065_init_one(struct zorro_dev *z, const struct zorro_device_id *ent) { struct net_device *dev; @@ -754,7 +754,7 @@ static int a2065_init_one(struct zorro_dev *z, } -static void a2065_remove_one(struct zorro_dev *z) +static void __devexit a2065_remove_one(struct zorro_dev *z) { struct net_device *dev = zorro_get_drvdata(z); diff --git a/trunk/drivers/net/ethernet/amd/am79c961a.c b/trunk/drivers/net/ethernet/amd/am79c961a.c index 60e2b701afe7..e10ffad525a7 100644 --- a/trunk/drivers/net/ethernet/amd/am79c961a.c +++ b/trunk/drivers/net/ethernet/amd/am79c961a.c @@ -671,7 +671,7 @@ static const struct net_device_ops am79c961_netdev_ops = { #endif }; -static int am79c961_probe(struct platform_device *pdev) +static int __devinit am79c961_probe(struct platform_device *pdev) { struct resource *res; struct net_device *dev; diff --git a/trunk/drivers/net/ethernet/amd/amd8111e.c b/trunk/drivers/net/ethernet/amd/amd8111e.c index 42d4e6ad58a5..3491d4312fc9 100644 --- a/trunk/drivers/net/ethernet/amd/amd8111e.c +++ b/trunk/drivers/net/ethernet/amd/amd8111e.c @@ -1702,7 +1702,7 @@ static int amd8111e_resume(struct pci_dev *pci_dev) } -static void amd8111e_remove_one(struct pci_dev *pdev) +static void __devexit amd8111e_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); if (dev) { @@ -1774,7 +1774,7 @@ static void amd8111e_config_ipg(struct net_device* dev) } -static void amd8111e_probe_ext_phy(struct net_device *dev) +static void __devinit amd8111e_probe_ext_phy(struct net_device* dev) { struct amd8111e_priv *lp = netdev_priv(dev); int i; @@ -1810,7 +1810,7 @@ static const struct net_device_ops amd8111e_netdev_ops = { #endif }; -static int amd8111e_probe_one(struct pci_dev *pdev, +static int __devinit amd8111e_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) { int err,i,pm_cap; @@ -1976,7 +1976,7 @@ static struct pci_driver amd8111e_driver = { .name = MODULE_NAME, .id_table = amd8111e_pci_tbl, .probe = amd8111e_probe_one, - .remove = amd8111e_remove_one, + .remove = __devexit_p(amd8111e_remove_one), .suspend = amd8111e_suspend, .resume = amd8111e_resume }; diff --git a/trunk/drivers/net/ethernet/amd/ariadne.c b/trunk/drivers/net/ethernet/amd/ariadne.c index 2ea7a231ef10..f2958df9a1e4 100644 --- a/trunk/drivers/net/ethernet/amd/ariadne.c +++ b/trunk/drivers/net/ethernet/amd/ariadne.c @@ -682,7 +682,7 @@ static void set_multicast_list(struct net_device *dev) } -static void ariadne_remove_one(struct zorro_dev *z) +static void __devexit ariadne_remove_one(struct zorro_dev *z) { struct net_device *dev = zorro_get_drvdata(z); @@ -692,7 +692,7 @@ static void ariadne_remove_one(struct zorro_dev *z) free_netdev(dev); } -static struct zorro_device_id ariadne_zorro_tbl[] = { +static struct zorro_device_id ariadne_zorro_tbl[] __devinitdata = { { ZORRO_PROD_VILLAGE_TRONIC_ARIADNE }, { 0 } }; @@ -710,7 +710,7 @@ static const struct net_device_ops ariadne_netdev_ops = { .ndo_set_mac_address = eth_mac_addr, }; -static int ariadne_init_one(struct zorro_dev *z, +static int __devinit ariadne_init_one(struct zorro_dev *z, const struct zorro_device_id *ent) { unsigned long board = z->resource.start; @@ -774,7 +774,7 @@ static struct zorro_driver ariadne_driver = { .name = "ariadne", .id_table = ariadne_zorro_tbl, .probe = ariadne_init_one, - .remove = ariadne_remove_one, + .remove = __devexit_p(ariadne_remove_one), }; static int __init ariadne_init_module(void) diff --git a/trunk/drivers/net/ethernet/amd/au1000_eth.c b/trunk/drivers/net/ethernet/amd/au1000_eth.c index 2ea221ed4777..f195acfa2df7 100644 --- a/trunk/drivers/net/ethernet/amd/au1000_eth.c +++ b/trunk/drivers/net/ethernet/amd/au1000_eth.c @@ -1016,7 +1016,7 @@ static const struct net_device_ops au1000_netdev_ops = { .ndo_change_mtu = eth_change_mtu, }; -static int au1000_probe(struct platform_device *pdev) +static int __devinit au1000_probe(struct platform_device *pdev) { static unsigned version_printed; struct au1000_private *aup = NULL; @@ -1295,7 +1295,7 @@ static int au1000_probe(struct platform_device *pdev) return err; } -static int au1000_remove(struct platform_device *pdev) +static int __devexit au1000_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct au1000_private *aup = netdev_priv(dev); @@ -1340,7 +1340,7 @@ static int au1000_remove(struct platform_device *pdev) static struct platform_driver au1000_eth_driver = { .probe = au1000_probe, - .remove = au1000_remove, + .remove = __devexit_p(au1000_remove), .driver = { .name = "au1000-eth", .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/amd/declance.c b/trunk/drivers/net/ethernet/amd/declance.c index baca0bd1b393..7203b522f234 100644 --- a/trunk/drivers/net/ethernet/amd/declance.c +++ b/trunk/drivers/net/ethernet/amd/declance.c @@ -72,7 +72,7 @@ #include #include -static char version[] = +static char version[] __devinitdata = "declance.c: v0.011 by Linux MIPS DECstation task force\n"; MODULE_AUTHOR("Linux MIPS DECstation task force"); @@ -1020,7 +1020,7 @@ static const struct net_device_ops lance_netdev_ops = { .ndo_set_mac_address = eth_mac_addr, }; -static int dec_lance_probe(struct device *bdev, const int type) +static int __devinit dec_lance_probe(struct device *bdev, const int type) { static unsigned version_printed; static const char fmt[] = "declance%d"; @@ -1322,7 +1322,7 @@ static void __exit dec_lance_platform_remove(void) } #ifdef CONFIG_TC -static int dec_lance_tc_probe(struct device *dev); +static int __devinit dec_lance_tc_probe(struct device *dev); static int __exit dec_lance_tc_remove(struct device *dev); static const struct tc_device_id dec_lance_tc_table[] = { @@ -1341,7 +1341,7 @@ static struct tc_driver dec_lance_tc_driver = { }, }; -static int dec_lance_tc_probe(struct device *dev) +static int __devinit dec_lance_tc_probe(struct device *dev) { int status = dec_lance_probe(dev, PMAD_LANCE); if (!status) diff --git a/trunk/drivers/net/ethernet/amd/depca.c b/trunk/drivers/net/ethernet/amd/depca.c index 34a485363d5b..c771de71612a 100644 --- a/trunk/drivers/net/ethernet/amd/depca.c +++ b/trunk/drivers/net/ethernet/amd/depca.c @@ -338,21 +338,21 @@ static struct eisa_driver depca_eisa_driver = { .driver = { .name = depca_string, .probe = depca_eisa_probe, - .remove = depca_device_remove + .remove = __devexit_p (depca_device_remove) } }; #endif static int depca_isa_probe (struct platform_device *); -static int depca_isa_remove(struct platform_device *pdev) +static int __devexit depca_isa_remove(struct platform_device *pdev) { return depca_device_remove(&pdev->dev); } static struct platform_driver depca_isa_driver = { .probe = depca_isa_probe, - .remove = depca_isa_remove, + .remove = __devexit_p(depca_isa_remove), .driver = { .name = depca_string, }, @@ -1320,7 +1320,7 @@ static enum depca_type __init depca_shmem_probe (ulong *mem_start) return adapter; } -static int depca_isa_probe(struct platform_device *device) +static int __devinit depca_isa_probe (struct platform_device *device) { struct net_device *dev; struct depca_private *lp; @@ -1412,7 +1412,7 @@ static int __init depca_eisa_probe (struct device *device) } #endif -static int depca_device_remove(struct device *device) +static int __devexit depca_device_remove (struct device *device) { struct net_device *dev; struct depca_private *lp; diff --git a/trunk/drivers/net/ethernet/amd/hplance.c b/trunk/drivers/net/ethernet/amd/hplance.c index 705333e0eff9..8baff4e5d964 100644 --- a/trunk/drivers/net/ethernet/amd/hplance.c +++ b/trunk/drivers/net/ethernet/amd/hplance.c @@ -46,11 +46,11 @@ struct hplance_private { * plus board-specific init, open and close actions. * Oh, and we need to tell the generic code how to read and write LANCE registers... */ -static int hplance_init_one(struct dio_dev *d, +static int __devinit hplance_init_one(struct dio_dev *d, const struct dio_device_id *ent); -static void hplance_init(struct net_device *dev, +static void __devinit hplance_init(struct net_device *dev, struct dio_dev *d); -static void hplance_remove_one(struct dio_dev *d); +static void __devexit hplance_remove_one(struct dio_dev *d); static void hplance_writerap(void *priv, unsigned short value); static void hplance_writerdp(void *priv, unsigned short value); static unsigned short hplance_readrdp(void *priv); @@ -66,7 +66,7 @@ static struct dio_driver hplance_driver = { .name = "hplance", .id_table = hplance_dio_tbl, .probe = hplance_init_one, - .remove = hplance_remove_one, + .remove = __devexit_p(hplance_remove_one), }; static const struct net_device_ops hplance_netdev_ops = { @@ -83,7 +83,7 @@ static const struct net_device_ops hplance_netdev_ops = { }; /* Find all the HP Lance boards and initialise them... */ -static int hplance_init_one(struct dio_dev *d, +static int __devinit hplance_init_one(struct dio_dev *d, const struct dio_device_id *ent) { struct net_device *dev; @@ -118,7 +118,7 @@ static int hplance_init_one(struct dio_dev *d, return err; } -static void hplance_remove_one(struct dio_dev *d) +static void __devexit hplance_remove_one(struct dio_dev *d) { struct net_device *dev = dio_get_drvdata(d); @@ -128,7 +128,7 @@ static void hplance_remove_one(struct dio_dev *d) } /* Initialise a single lance board at the given DIO device */ -static void hplance_init(struct net_device *dev, struct dio_dev *d) +static void __devinit hplance_init(struct net_device *dev, struct dio_dev *d) { unsigned long va = (d->resource.start + DIO_VIRADDRBASE); struct hplance_private *lp; diff --git a/trunk/drivers/net/ethernet/amd/pcnet32.c b/trunk/drivers/net/ethernet/amd/pcnet32.c index a227ccdcb9b5..86b6d8e4e6cd 100644 --- a/trunk/drivers/net/ethernet/amd/pcnet32.c +++ b/trunk/drivers/net/ethernet/amd/pcnet32.c @@ -1443,7 +1443,7 @@ static const struct ethtool_ops pcnet32_ethtool_ops = { /* only probes for non-PCI devices, the rest are handled by * pci_register_driver via pcnet32_probe_pci */ -static void pcnet32_probe_vlbus(unsigned int *pcnet32_portlist) +static void __devinit pcnet32_probe_vlbus(unsigned int *pcnet32_portlist) { unsigned int *port, ioaddr; @@ -1462,7 +1462,7 @@ static void pcnet32_probe_vlbus(unsigned int *pcnet32_portlist) } } -static int +static int __devinit pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent) { unsigned long ioaddr; @@ -1521,7 +1521,7 @@ static const struct net_device_ops pcnet32_netdev_ops = { * Called from both pcnet32_probe_vlbus and pcnet_probe_pci. * pdev will be NULL when called from pcnet32_probe_vlbus. */ -static int +static int __devinit pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev) { struct pcnet32_private *lp; @@ -2823,7 +2823,7 @@ static int pcnet32_pm_resume(struct pci_dev *pdev) return 0; } -static void pcnet32_remove_one(struct pci_dev *pdev) +static void __devexit pcnet32_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -2844,7 +2844,7 @@ static void pcnet32_remove_one(struct pci_dev *pdev) static struct pci_driver pcnet32_driver = { .name = DRV_NAME, .probe = pcnet32_probe_pci, - .remove = pcnet32_remove_one, + .remove = __devexit_p(pcnet32_remove_one), .id_table = pcnet32_pci_tbl, .suspend = pcnet32_pm_suspend, .resume = pcnet32_pm_resume, diff --git a/trunk/drivers/net/ethernet/amd/sunlance.c b/trunk/drivers/net/ethernet/amd/sunlance.c index 64dbffa0a7e2..d7a3533d990b 100644 --- a/trunk/drivers/net/ethernet/amd/sunlance.c +++ b/trunk/drivers/net/ethernet/amd/sunlance.c @@ -1304,7 +1304,7 @@ static const struct net_device_ops sparc_lance_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int sparc_lance_probe_one(struct platform_device *op, +static int __devinit sparc_lance_probe_one(struct platform_device *op, struct platform_device *ledma, struct platform_device *lebuffer) { @@ -1488,7 +1488,7 @@ static int sparc_lance_probe_one(struct platform_device *op, return -ENODEV; } -static int sunlance_sbus_probe(struct platform_device *op) +static int __devinit sunlance_sbus_probe(struct platform_device *op) { struct platform_device *parent = to_platform_device(op->dev.parent); struct device_node *parent_dp = parent->dev.of_node; @@ -1504,7 +1504,7 @@ static int sunlance_sbus_probe(struct platform_device *op) return err; } -static int sunlance_sbus_remove(struct platform_device *op) +static int __devexit sunlance_sbus_remove(struct platform_device *op) { struct lance_private *lp = dev_get_drvdata(&op->dev); struct net_device *net_dev = lp->dev; @@ -1536,7 +1536,7 @@ static struct platform_driver sunlance_sbus_driver = { .of_match_table = sunlance_sbus_match, }, .probe = sunlance_sbus_probe, - .remove = sunlance_sbus_remove, + .remove = __devexit_p(sunlance_sbus_remove), }; module_platform_driver(sunlance_sbus_driver); diff --git a/trunk/drivers/net/ethernet/apple/bmac.c b/trunk/drivers/net/ethernet/apple/bmac.c index f36bbd6d5085..855bdafb1a87 100644 --- a/trunk/drivers/net/ethernet/apple/bmac.c +++ b/trunk/drivers/net/ethernet/apple/bmac.c @@ -1244,7 +1244,7 @@ static const struct net_device_ops bmac_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int bmac_probe(struct macio_dev *mdev, const struct of_device_id *match) +static int __devinit bmac_probe(struct macio_dev *mdev, const struct of_device_id *match) { int j, rev, ret; struct bmac_data *bp; @@ -1602,7 +1602,7 @@ bmac_proc_info(char *buffer, char **start, off_t offset, int length) } #endif -static int bmac_remove(struct macio_dev *mdev) +static int __devexit bmac_remove(struct macio_dev *mdev) { struct net_device *dev = macio_get_drvdata(mdev); struct bmac_data *bp = netdev_priv(dev); diff --git a/trunk/drivers/net/ethernet/apple/mace.c b/trunk/drivers/net/ethernet/apple/mace.c index 842fe7684904..e1df4b76c885 100644 --- a/trunk/drivers/net/ethernet/apple/mace.c +++ b/trunk/drivers/net/ethernet/apple/mace.c @@ -106,7 +106,7 @@ static const struct net_device_ops mace_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int mace_probe(struct macio_dev *mdev, const struct of_device_id *match) +static int __devinit mace_probe(struct macio_dev *mdev, const struct of_device_id *match) { struct device_node *mace = macio_get_of_node(mdev); struct net_device *dev; @@ -271,7 +271,7 @@ static int mace_probe(struct macio_dev *mdev, const struct of_device_id *match) return rc; } -static int mace_remove(struct macio_dev *mdev) +static int __devexit mace_remove(struct macio_dev *mdev) { struct net_device *dev = macio_get_drvdata(mdev); struct mace_data *mp; diff --git a/trunk/drivers/net/ethernet/apple/macmace.c b/trunk/drivers/net/ethernet/apple/macmace.c index a206779c68cf..a92ddee7f665 100644 --- a/trunk/drivers/net/ethernet/apple/macmace.c +++ b/trunk/drivers/net/ethernet/apple/macmace.c @@ -195,7 +195,7 @@ static const struct net_device_ops mace_netdev_ops = { * model of Macintrash has a MACE (AV macintoshes) */ -static int mace_probe(struct platform_device *pdev) +static int __devinit mace_probe(struct platform_device *pdev) { int j; struct mace_data *mp; @@ -746,7 +746,7 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Macintosh MACE ethernet driver"); MODULE_ALIAS("platform:macmace"); -static int mac_mace_device_remove(struct platform_device *pdev) +static int __devexit mac_mace_device_remove (struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct mace_data *mp = netdev_priv(dev); @@ -768,7 +768,7 @@ static int mac_mace_device_remove(struct platform_device *pdev) static struct platform_driver mac_mace_driver = { .probe = mace_probe, - .remove = mac_mace_device_remove, + .remove = __devexit_p(mac_mace_device_remove), .driver = { .name = mac_mace_string, .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/trunk/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index 44bee4a2b9b3..d19f82f7597a 100644 --- a/trunk/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/trunk/drivers/net/ethernet/atheros/atl1c/atl1c_main.c @@ -643,7 +643,7 @@ static int atl1c_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) * @adapter: board private structure to initialize * */ -static int atl1c_alloc_queues(struct atl1c_adapter *adapter) +static int __devinit atl1c_alloc_queues(struct atl1c_adapter *adapter) { return 0; } @@ -702,7 +702,7 @@ struct atl1c_platform_patch { u32 patch_flag; #define ATL1C_LINK_PATCH 0x1 }; -static const struct atl1c_platform_patch plats[] = { +static const struct atl1c_platform_patch plats[] __devinitconst = { {0x2060, 0xC1, 0x1019, 0x8152, 0x1}, {0x2060, 0xC1, 0x1019, 0x2060, 0x1}, {0x2060, 0xC1, 0x1019, 0xE000, 0x1}, @@ -725,7 +725,7 @@ static const struct atl1c_platform_patch plats[] = { {0}, }; -static void atl1c_patch_assign(struct atl1c_hw *hw) +static void __devinit atl1c_patch_assign(struct atl1c_hw *hw) { struct pci_dev *pdev = hw->adapter->pdev; u32 misc_ctrl; @@ -764,7 +764,7 @@ static void atl1c_patch_assign(struct atl1c_hw *hw) * Fields are initialized based on PCI device information and * OS network device settings (MTU size). */ -static int atl1c_sw_init(struct atl1c_adapter *adapter) +static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter) { struct atl1c_hw *hw = &adapter->hw; struct pci_dev *pdev = adapter->pdev; @@ -2442,7 +2442,7 @@ static int atl1c_init_netdev(struct net_device *netdev, struct pci_dev *pdev) * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. */ -static int atl1c_probe(struct pci_dev *pdev, +static int __devinit atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -2587,7 +2587,7 @@ static int atl1c_probe(struct pci_dev *pdev, * Hot-Plug event, or because the driver is going to be removed from * memory. */ -static void atl1c_remove(struct pci_dev *pdev) +static void __devexit atl1c_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct atl1c_adapter *adapter = netdev_priv(netdev); @@ -2697,7 +2697,7 @@ static struct pci_driver atl1c_driver = { .name = atl1c_driver_name, .id_table = atl1c_pci_tbl, .probe = atl1c_probe, - .remove = atl1c_remove, + .remove = __devexit_p(atl1c_remove), .shutdown = atl1c_shutdown, .err_handler = &atl1c_err_handler, .driver.pm = &atl1c_pm_ops, diff --git a/trunk/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/trunk/drivers/net/ethernet/atheros/atl1e/atl1e_main.c index dec5d2cfd386..e213da29e73d 100644 --- a/trunk/drivers/net/ethernet/atheros/atl1e/atl1e_main.c +++ b/trunk/drivers/net/ethernet/atheros/atl1e/atl1e_main.c @@ -534,7 +534,7 @@ static void atl1e_setup_pcicmd(struct pci_dev *pdev) * @adapter: board private structure to initialize * */ -static int atl1e_alloc_queues(struct atl1e_adapter *adapter) +static int __devinit atl1e_alloc_queues(struct atl1e_adapter *adapter) { return 0; } @@ -547,7 +547,7 @@ static int atl1e_alloc_queues(struct atl1e_adapter *adapter) * Fields are initialized based on PCI device information and * OS network device settings (MTU size). */ -static int atl1e_sw_init(struct atl1e_adapter *adapter) +static int __devinit atl1e_sw_init(struct atl1e_adapter *adapter) { struct atl1e_hw *hw = &adapter->hw; struct pci_dev *pdev = adapter->pdev; @@ -2235,7 +2235,7 @@ static int atl1e_init_netdev(struct net_device *netdev, struct pci_dev *pdev) * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. */ -static int atl1e_probe(struct pci_dev *pdev, +static int __devinit atl1e_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -2387,7 +2387,7 @@ static int atl1e_probe(struct pci_dev *pdev, * Hot-Plug event, or because the driver is going to be removed from * memory. */ -static void atl1e_remove(struct pci_dev *pdev) +static void __devexit atl1e_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct atl1e_adapter *adapter = netdev_priv(netdev); @@ -2499,7 +2499,7 @@ static struct pci_driver atl1e_driver = { .name = atl1e_driver_name, .id_table = atl1e_pci_tbl, .probe = atl1e_probe, - .remove = atl1e_remove, + .remove = __devexit_p(atl1e_remove), /* Power Management Hooks */ #ifdef CONFIG_PM .suspend = atl1e_suspend, diff --git a/trunk/drivers/net/ethernet/atheros/atl1e/atl1e_param.c b/trunk/drivers/net/ethernet/atheros/atl1e/atl1e_param.c index fa314282c9ad..b5086f1e637f 100644 --- a/trunk/drivers/net/ethernet/atheros/atl1e/atl1e_param.c +++ b/trunk/drivers/net/ethernet/atheros/atl1e/atl1e_param.c @@ -40,7 +40,7 @@ #define ATL1E_PARAM_INIT { [0 ... ATL1E_MAX_NIC] = OPTION_UNSET } #define ATL1E_PARAM(x, desc) \ - static int x[ATL1E_MAX_NIC + 1] = ATL1E_PARAM_INIT; \ + static int __devinitdata x[ATL1E_MAX_NIC + 1] = ATL1E_PARAM_INIT; \ static unsigned int num_##x; \ module_param_array_named(x, x, int, &num_##x, 0); \ MODULE_PARM_DESC(x, desc); @@ -116,8 +116,7 @@ struct atl1e_option { } arg; }; -static int atl1e_validate_option(int *value, struct atl1e_option *opt, - struct atl1e_adapter *adapter) +static int __devinit atl1e_validate_option(int *value, struct atl1e_option *opt, struct atl1e_adapter *adapter) { if (*value == OPTION_UNSET) { *value = opt->def; @@ -178,7 +177,7 @@ static int atl1e_validate_option(int *value, struct atl1e_option *opt, * value exists, a default value is used. The final value is stored * in a variable in the adapter structure. */ -void atl1e_check_options(struct atl1e_adapter *adapter) +void __devinit atl1e_check_options(struct atl1e_adapter *adapter) { int bd = adapter->bd_number; diff --git a/trunk/drivers/net/ethernet/atheros/atlx/atl1.c b/trunk/drivers/net/ethernet/atheros/atlx/atl1.c index 3e7327ec3901..7bae2ad7a7c0 100644 --- a/trunk/drivers/net/ethernet/atheros/atlx/atl1.c +++ b/trunk/drivers/net/ethernet/atheros/atlx/atl1.c @@ -113,7 +113,7 @@ static const struct ethtool_ops atl1_ethtool_ops; * * Default Value: 100 (200us) */ -static int int_mod_timer[ATL1_MAX_NIC+1] = ATL1_PARAM_INIT; +static int __devinitdata int_mod_timer[ATL1_MAX_NIC+1] = ATL1_PARAM_INIT; static unsigned int num_int_mod_timer; module_param_array_named(int_mod_timer, int_mod_timer, int, &num_int_mod_timer, 0); @@ -143,7 +143,7 @@ struct atl1_option { } arg; }; -static int atl1_validate_option(int *value, struct atl1_option *opt, +static int __devinit atl1_validate_option(int *value, struct atl1_option *opt, struct pci_dev *pdev) { if (*value == OPTION_UNSET) { @@ -204,7 +204,7 @@ static int atl1_validate_option(int *value, struct atl1_option *opt, * value exists, a default value is used. The final value is stored * in a variable in the adapter structure. */ -static void atl1_check_options(struct atl1_adapter *adapter) +static void __devinit atl1_check_options(struct atl1_adapter *adapter) { struct pci_dev *pdev = adapter->pdev; int bd = adapter->bd_number; @@ -945,7 +945,7 @@ static void atl1_set_mac_addr(struct atl1_hw *hw) * Fields are initialized based on PCI device information and * OS network device settings (MTU size). */ -static int atl1_sw_init(struct atl1_adapter *adapter) +static int __devinit atl1_sw_init(struct atl1_adapter *adapter) { struct atl1_hw *hw = &adapter->hw; struct net_device *netdev = adapter->netdev; @@ -2934,7 +2934,7 @@ static const struct net_device_ops atl1_netdev_ops = { * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. */ -static int atl1_probe(struct pci_dev *pdev, +static int __devinit atl1_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -3113,7 +3113,7 @@ static int atl1_probe(struct pci_dev *pdev, * Hot-Plug event, or because the driver is going to be removed from * memory. */ -static void atl1_remove(struct pci_dev *pdev) +static void __devexit atl1_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct atl1_adapter *adapter; @@ -3146,7 +3146,7 @@ static struct pci_driver atl1_driver = { .name = ATLX_DRIVER_NAME, .id_table = atl1_pci_tbl, .probe = atl1_probe, - .remove = atl1_remove, + .remove = __devexit_p(atl1_remove), .shutdown = atl1_shutdown, .driver.pm = ATL1_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/atheros/atlx/atl2.c b/trunk/drivers/net/ethernet/atheros/atlx/atl2.c index 7dc9766bb5ba..623dd8635c46 100644 --- a/trunk/drivers/net/ethernet/atheros/atlx/atl2.c +++ b/trunk/drivers/net/ethernet/atheros/atlx/atl2.c @@ -83,7 +83,7 @@ static void atl2_check_options(struct atl2_adapter *adapter); * Fields are initialized based on PCI device information and * OS network device settings (MTU size). */ -static int atl2_sw_init(struct atl2_adapter *adapter) +static int __devinit atl2_sw_init(struct atl2_adapter *adapter) { struct atl2_hw *hw = &adapter->hw; struct pci_dev *pdev = adapter->pdev; @@ -1338,7 +1338,7 @@ static const struct net_device_ops atl2_netdev_ops = { * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. */ -static int atl2_probe(struct pci_dev *pdev, +static int __devinit atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -1498,7 +1498,7 @@ static int atl2_probe(struct pci_dev *pdev, */ /* FIXME: write the original MAC address back in case it was changed from a * BIOS-set value, as in atl1 -- CHS */ -static void atl2_remove(struct pci_dev *pdev) +static void __devexit atl2_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct atl2_adapter *adapter = netdev_priv(netdev); @@ -1705,7 +1705,7 @@ static struct pci_driver atl2_driver = { .name = atl2_driver_name, .id_table = atl2_pci_tbl, .probe = atl2_probe, - .remove = atl2_remove, + .remove = __devexit_p(atl2_remove), /* Power Management Hooks */ .suspend = atl2_suspend, #ifdef CONFIG_PM @@ -2845,12 +2845,12 @@ static void atl2_force_ps(struct atl2_hw *hw) */ #define ATL2_PARAM(X, desc) \ - static const int X[ATL2_MAX_NIC + 1] = ATL2_PARAM_INIT; \ + static const int __devinitconst X[ATL2_MAX_NIC + 1] = ATL2_PARAM_INIT; \ MODULE_PARM(X, "1-" __MODULE_STRING(ATL2_MAX_NIC) "i"); \ MODULE_PARM_DESC(X, desc); #else #define ATL2_PARAM(X, desc) \ - static int X[ATL2_MAX_NIC+1] = ATL2_PARAM_INIT; \ + static int __devinitdata X[ATL2_MAX_NIC+1] = ATL2_PARAM_INIT; \ static unsigned int num_##X; \ module_param_array_named(X, X, int, &num_##X, 0); \ MODULE_PARM_DESC(X, desc); @@ -2934,7 +2934,7 @@ struct atl2_option { } arg; }; -static int atl2_validate_option(int *value, struct atl2_option *opt) +static int __devinit atl2_validate_option(int *value, struct atl2_option *opt) { int i; struct atl2_opt_list *ent; @@ -2992,7 +2992,7 @@ static int atl2_validate_option(int *value, struct atl2_option *opt) * value exists, a default value is used. The final value is stored * in a variable in the adapter structure. */ -static void atl2_check_options(struct atl2_adapter *adapter) +static void __devinit atl2_check_options(struct atl2_adapter *adapter) { int val; struct atl2_option opt; diff --git a/trunk/drivers/net/ethernet/broadcom/Kconfig b/trunk/drivers/net/ethernet/broadcom/Kconfig index f55267363f35..4bd416b72e65 100644 --- a/trunk/drivers/net/ethernet/broadcom/Kconfig +++ b/trunk/drivers/net/ethernet/broadcom/Kconfig @@ -102,7 +102,6 @@ config TIGON3 depends on PCI select PHYLIB select HWMON - select PTP_1588_CLOCK ---help--- This driver supports Broadcom Tigon3 based gigabit Ethernet cards. diff --git a/trunk/drivers/net/ethernet/broadcom/b44.c b/trunk/drivers/net/ethernet/broadcom/b44.c index c64351f486cd..9786c0e9890e 100644 --- a/trunk/drivers/net/ethernet/broadcom/b44.c +++ b/trunk/drivers/net/ethernet/broadcom/b44.c @@ -2083,7 +2083,7 @@ static int b44_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) return err; } -static int b44_get_invariants(struct b44 *bp) +static int __devinit b44_get_invariants(struct b44 *bp) { struct ssb_device *sdev = bp->sdev; int err = 0; @@ -2141,7 +2141,7 @@ static const struct net_device_ops b44_netdev_ops = { #endif }; -static int b44_init_one(struct ssb_device *sdev, +static int __devinit b44_init_one(struct ssb_device *sdev, const struct ssb_device_id *ent) { struct net_device *dev; @@ -2249,7 +2249,7 @@ static int b44_init_one(struct ssb_device *sdev, return err; } -static void b44_remove_one(struct ssb_device *sdev) +static void __devexit b44_remove_one(struct ssb_device *sdev) { struct net_device *dev = ssb_get_drvdata(sdev); @@ -2340,7 +2340,7 @@ static struct ssb_driver b44_ssb_driver = { .name = DRV_MODULE_NAME, .id_table = b44_ssb_tbl, .probe = b44_init_one, - .remove = b44_remove_one, + .remove = __devexit_p(b44_remove_one), .suspend = b44_suspend, .resume = b44_resume, }; diff --git a/trunk/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/trunk/drivers/net/ethernet/broadcom/bcm63xx_enet.c index 39387d67b722..c7ca7ec065ee 100644 --- a/trunk/drivers/net/ethernet/broadcom/bcm63xx_enet.c +++ b/trunk/drivers/net/ethernet/broadcom/bcm63xx_enet.c @@ -1612,7 +1612,7 @@ static const struct net_device_ops bcm_enet_ops = { /* * allocate netdevice, request register memory and register device. */ -static int bcm_enet_probe(struct platform_device *pdev) +static int __devinit bcm_enet_probe(struct platform_device *pdev) { struct bcm_enet_priv *priv; struct net_device *dev; @@ -1830,7 +1830,7 @@ static int bcm_enet_probe(struct platform_device *pdev) /* * exit func, stops hardware and unregisters netdevice */ -static int bcm_enet_remove(struct platform_device *pdev) +static int __devexit bcm_enet_remove(struct platform_device *pdev) { struct bcm_enet_priv *priv; struct net_device *dev; @@ -1877,7 +1877,7 @@ static int bcm_enet_remove(struct platform_device *pdev) struct platform_driver bcm63xx_enet_driver = { .probe = bcm_enet_probe, - .remove = bcm_enet_remove, + .remove = __devexit_p(bcm_enet_remove), .driver = { .name = "bcm63xx_enet", .owner = THIS_MODULE, @@ -1887,7 +1887,7 @@ struct platform_driver bcm63xx_enet_driver = { /* * reserve & remap memory space shared between all macs */ -static int bcm_enet_shared_probe(struct platform_device *pdev) +static int __devinit bcm_enet_shared_probe(struct platform_device *pdev) { struct resource *res; unsigned int iomem_size; @@ -1908,7 +1908,7 @@ static int bcm_enet_shared_probe(struct platform_device *pdev) return 0; } -static int bcm_enet_shared_remove(struct platform_device *pdev) +static int __devexit bcm_enet_shared_remove(struct platform_device *pdev) { struct resource *res; @@ -1924,7 +1924,7 @@ static int bcm_enet_shared_remove(struct platform_device *pdev) */ struct platform_driver bcm63xx_enet_shared_driver = { .probe = bcm_enet_shared_probe, - .remove = bcm_enet_shared_remove, + .remove = __devexit_p(bcm_enet_shared_remove), .driver = { .name = "bcm63xx_enet_shared", .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2.c b/trunk/drivers/net/ethernet/broadcom/bnx2.c index e264e960a762..d4310700c7a7 100644 --- a/trunk/drivers/net/ethernet/broadcom/bnx2.c +++ b/trunk/drivers/net/ethernet/broadcom/bnx2.c @@ -71,7 +71,7 @@ /* Time in jiffies before concluding the transmitter is hung. */ #define TX_TIMEOUT (5*HZ) -static char version[] = +static char version[] __devinitdata = "Broadcom NetXtreme II Gigabit Ethernet Driver " DRV_MODULE_NAME " v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; MODULE_AUTHOR("Michael Chan "); @@ -106,7 +106,7 @@ typedef enum { /* indexed by board_t, above */ static struct { char *name; -} board_info[] = { +} board_info[] __devinitdata = { { "Broadcom NetXtreme II BCM5706 1000Base-T" }, { "HP NC370T Multifunction Gigabit Server Adapter" }, { "HP NC370i Multifunction Gigabit Server Adapter" }, @@ -7896,7 +7896,7 @@ poll_bnx2(struct net_device *dev) } #endif -static void +static void __devinit bnx2_get_5709_media(struct bnx2 *bp) { u32 val = REG_RD(bp, BNX2_MISC_DUAL_MEDIA_CTRL); @@ -7934,7 +7934,7 @@ bnx2_get_5709_media(struct bnx2 *bp) } } -static void +static void __devinit bnx2_get_pci_speed(struct bnx2 *bp) { u32 reg; @@ -7986,7 +7986,7 @@ bnx2_get_pci_speed(struct bnx2 *bp) } -static void +static void __devinit bnx2_read_vpd_fw_ver(struct bnx2 *bp) { int rc, i, j; @@ -8054,7 +8054,7 @@ bnx2_read_vpd_fw_ver(struct bnx2 *bp) kfree(data); } -static int +static int __devinit bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) { struct bnx2 *bp; @@ -8439,7 +8439,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) return rc; } -static char * +static char * __devinit bnx2_bus_string(struct bnx2 *bp, char *str) { char *s = str; @@ -8505,7 +8505,7 @@ static const struct net_device_ops bnx2_netdev_ops = { #endif }; -static int +static int __devinit bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { static int version_printed = 0; @@ -8573,7 +8573,7 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) return rc; } -static void +static void __devexit bnx2_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -8752,7 +8752,7 @@ static struct pci_driver bnx2_pci_driver = { .name = DRV_MODULE_NAME, .id_table = bnx2_pci_tbl, .probe = bnx2_init_one, - .remove = bnx2_remove_one, + .remove = __devexit_p(bnx2_remove_one), .suspend = bnx2_suspend, .resume = bnx2_resume, .err_handler = &bnx2_err_handler, diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 8ab1492cedd1..5e07aa5e1aea 100644 --- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c @@ -3875,7 +3875,7 @@ void bnx2x_free_mem_bp(struct bnx2x *bp) kfree(bp->ilt); } -int bnx2x_alloc_mem_bp(struct bnx2x *bp) +int __devinit bnx2x_alloc_mem_bp(struct bnx2x *bp) { struct bnx2x_fastpath *fp; struct msix_entry *tbl; diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h index 0991534f61da..32c3ab72718c 100644 --- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h +++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h @@ -563,7 +563,7 @@ int bnx2x_poll(struct napi_struct *napi, int budget); * * @bp: driver handle */ -int bnx2x_alloc_mem_bp(struct bnx2x *bp); +int __devinit bnx2x_alloc_mem_bp(struct bnx2x *bp); /** * bnx2x_free_mem_bp - release memories outsize main driver structure diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 75aea83ee68d..c8ec3fcd2d35 100644 --- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -79,7 +79,7 @@ /* Time in jiffies before concluding the transmitter is hung */ #define TX_TIMEOUT (5*HZ) -static char version[] = +static char version[] __devinitdata = "Broadcom NetXtreme II 5771x/578xx 10/20-Gigabit Ethernet Driver " DRV_MODULE_NAME " " DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; @@ -149,7 +149,7 @@ enum bnx2x_board_type { /* indexed by board_type, above */ static struct { char *name; -} board_info[] = { +} board_info[] __devinitdata = { { "Broadcom NetXtreme II BCM57710 10 Gigabit PCIe [Everest]" }, { "Broadcom NetXtreme II BCM57711 10 Gigabit PCIe" }, { "Broadcom NetXtreme II BCM57711E 10 Gigabit PCIe" }, @@ -9420,7 +9420,7 @@ static inline void bnx2x_undi_int_disable(struct bnx2x *bp) bnx2x_undi_int_disable_e1h(bp); } -static void bnx2x_prev_unload_close_mac(struct bnx2x *bp) +static void __devinit bnx2x_prev_unload_close_mac(struct bnx2x *bp) { u32 val, base_addr, offset, mask, reset_reg; bool mac_stopped = false; @@ -9487,7 +9487,7 @@ static void bnx2x_prev_unload_close_mac(struct bnx2x *bp) #define BNX2X_PREV_UNDI_BD(val) ((val) >> 16 & 0xffff) #define BNX2X_PREV_UNDI_PROD(rcq, bd) ((bd) << 16 | (rcq)) -static void bnx2x_prev_unload_undi_inc(struct bnx2x *bp, u8 port, +static void __devinit bnx2x_prev_unload_undi_inc(struct bnx2x *bp, u8 port, u8 inc) { u16 rcq, bd; @@ -9503,7 +9503,7 @@ static void bnx2x_prev_unload_undi_inc(struct bnx2x *bp, u8 port, port, bd, rcq); } -static int bnx2x_prev_mcp_done(struct bnx2x *bp) +static int __devinit bnx2x_prev_mcp_done(struct bnx2x *bp) { u32 rc = bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, DRV_MSG_CODE_UNLOAD_SKIP_LINK_RESET); @@ -9515,7 +9515,7 @@ static int bnx2x_prev_mcp_done(struct bnx2x *bp) return 0; } -static bool bnx2x_prev_is_path_marked(struct bnx2x *bp) +static bool __devinit bnx2x_prev_is_path_marked(struct bnx2x *bp) { struct bnx2x_prev_path_list *tmp_list; int rc = false; @@ -9539,7 +9539,7 @@ static bool bnx2x_prev_is_path_marked(struct bnx2x *bp) return rc; } -static int bnx2x_prev_mark_path(struct bnx2x *bp) +static int __devinit bnx2x_prev_mark_path(struct bnx2x *bp) { struct bnx2x_prev_path_list *tmp_list; int rc; @@ -9568,7 +9568,7 @@ static int bnx2x_prev_mark_path(struct bnx2x *bp) return rc; } -static int bnx2x_do_flr(struct bnx2x *bp) +static int __devinit bnx2x_do_flr(struct bnx2x *bp) { int i; u16 status; @@ -9608,7 +9608,7 @@ static int bnx2x_do_flr(struct bnx2x *bp) return 0; } -static int bnx2x_prev_unload_uncommon(struct bnx2x *bp) +static int __devinit bnx2x_prev_unload_uncommon(struct bnx2x *bp) { int rc; @@ -9646,7 +9646,7 @@ static int bnx2x_prev_unload_uncommon(struct bnx2x *bp) return rc; } -static int bnx2x_prev_unload_common(struct bnx2x *bp) +static int __devinit bnx2x_prev_unload_common(struct bnx2x *bp) { u32 reset_reg, tmp_reg = 0, rc; /* It is possible a previous function received 'common' answer, @@ -9729,7 +9729,7 @@ static int bnx2x_prev_unload_common(struct bnx2x *bp) * to clear the interrupt which detected this from the pglueb and the was done * bit */ -static void bnx2x_prev_interrupted_dmae(struct bnx2x *bp) +static void __devinit bnx2x_prev_interrupted_dmae(struct bnx2x *bp) { if (!CHIP_IS_E1x(bp)) { u32 val = REG_RD(bp, PGLUE_B_REG_PGLUE_B_INT_STS); @@ -9741,7 +9741,7 @@ static void bnx2x_prev_interrupted_dmae(struct bnx2x *bp) } } -static int bnx2x_prev_unload(struct bnx2x *bp) +static int __devinit bnx2x_prev_unload(struct bnx2x *bp) { int time_counter = 10; u32 rc, fw, hw_lock_reg, hw_lock_val; @@ -9808,7 +9808,7 @@ static int bnx2x_prev_unload(struct bnx2x *bp) return rc; } -static void bnx2x_get_common_hwinfo(struct bnx2x *bp) +static void __devinit bnx2x_get_common_hwinfo(struct bnx2x *bp) { u32 val, val2, val3, val4, id, boot_mode; u16 pmc; @@ -9991,7 +9991,7 @@ static void bnx2x_get_common_hwinfo(struct bnx2x *bp) #define IGU_FID(val) GET_FIELD((val), IGU_REG_MAPPING_MEMORY_FID) #define IGU_VEC(val) GET_FIELD((val), IGU_REG_MAPPING_MEMORY_VECTOR) -static int bnx2x_get_igu_cam_info(struct bnx2x *bp) +static int __devinit bnx2x_get_igu_cam_info(struct bnx2x *bp) { int pfid = BP_FUNC(bp); int igu_sb_id; @@ -10050,7 +10050,7 @@ static int bnx2x_get_igu_cam_info(struct bnx2x *bp) return 0; } -static void bnx2x_link_settings_supported(struct bnx2x *bp, +static void __devinit bnx2x_link_settings_supported(struct bnx2x *bp, u32 switch_cfg) { int cfg_size = 0, idx, port = BP_PORT(bp); @@ -10149,7 +10149,7 @@ static void bnx2x_link_settings_supported(struct bnx2x *bp, bp->port.supported[1]); } -static void bnx2x_link_settings_requested(struct bnx2x *bp) +static void __devinit bnx2x_link_settings_requested(struct bnx2x *bp) { u32 link_config, idx, cfg_size = 0; bp->port.advertising[0] = 0; @@ -10335,7 +10335,7 @@ static void bnx2x_link_settings_requested(struct bnx2x *bp) } } -static void bnx2x_set_mac_buf(u8 *mac_buf, u32 mac_lo, u16 mac_hi) +static void __devinit bnx2x_set_mac_buf(u8 *mac_buf, u32 mac_lo, u16 mac_hi) { mac_hi = cpu_to_be16(mac_hi); mac_lo = cpu_to_be32(mac_lo); @@ -10343,7 +10343,7 @@ static void bnx2x_set_mac_buf(u8 *mac_buf, u32 mac_lo, u16 mac_hi) memcpy(mac_buf + sizeof(mac_hi), &mac_lo, sizeof(mac_lo)); } -static void bnx2x_get_port_hwinfo(struct bnx2x *bp) +static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp) { int port = BP_PORT(bp); u32 config; @@ -10447,7 +10447,7 @@ void bnx2x_get_iscsi_info(struct bnx2x *bp) } -static void bnx2x_get_ext_wwn_info(struct bnx2x *bp, int func) +static void __devinit bnx2x_get_ext_wwn_info(struct bnx2x *bp, int func) { /* Port info */ bp->cnic_eth_dev.fcoe_wwn_port_name_hi = @@ -10461,7 +10461,7 @@ static void bnx2x_get_ext_wwn_info(struct bnx2x *bp, int func) bp->cnic_eth_dev.fcoe_wwn_node_name_lo = MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_node_name_lower); } -static void bnx2x_get_fcoe_info(struct bnx2x *bp) +static void __devinit bnx2x_get_fcoe_info(struct bnx2x *bp) { int port = BP_PORT(bp); int func = BP_ABS_FUNC(bp); @@ -10521,7 +10521,7 @@ static void bnx2x_get_fcoe_info(struct bnx2x *bp) bp->flags |= NO_FCOE_FLAG; } -static void bnx2x_get_cnic_info(struct bnx2x *bp) +static void __devinit bnx2x_get_cnic_info(struct bnx2x *bp) { /* * iSCSI may be dynamically disabled but reading @@ -10532,7 +10532,7 @@ static void bnx2x_get_cnic_info(struct bnx2x *bp) bnx2x_get_fcoe_info(bp); } -static void bnx2x_get_cnic_mac_hwinfo(struct bnx2x *bp) +static void __devinit bnx2x_get_cnic_mac_hwinfo(struct bnx2x *bp) { u32 val, val2; int func = BP_ABS_FUNC(bp); @@ -10626,7 +10626,7 @@ static void bnx2x_get_cnic_mac_hwinfo(struct bnx2x *bp) } } -static void bnx2x_get_mac_hwinfo(struct bnx2x *bp) +static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp) { u32 val, val2; int func = BP_ABS_FUNC(bp); @@ -10667,7 +10667,7 @@ static void bnx2x_get_mac_hwinfo(struct bnx2x *bp) bp->dev->dev_addr); } -static bool bnx2x_get_dropless_info(struct bnx2x *bp) +static bool __devinit bnx2x_get_dropless_info(struct bnx2x *bp) { int tmp; u32 cfg; @@ -10687,7 +10687,7 @@ static bool bnx2x_get_dropless_info(struct bnx2x *bp) return cfg; } -static int bnx2x_get_hwinfo(struct bnx2x *bp) +static int __devinit bnx2x_get_hwinfo(struct bnx2x *bp) { int /*abs*/func = BP_ABS_FUNC(bp); int vn; @@ -10913,7 +10913,7 @@ static int bnx2x_get_hwinfo(struct bnx2x *bp) return rc; } -static void bnx2x_read_fwinfo(struct bnx2x *bp) +static void __devinit bnx2x_read_fwinfo(struct bnx2x *bp) { int cnt, i, block_end, rodi; char vpd_start[BNX2X_VPD_LEN+1]; @@ -10998,7 +10998,7 @@ static void bnx2x_read_fwinfo(struct bnx2x *bp) return; } -static void bnx2x_set_modes_bitmap(struct bnx2x *bp) +static void __devinit bnx2x_set_modes_bitmap(struct bnx2x *bp) { u32 flags = 0; @@ -11048,7 +11048,7 @@ static void bnx2x_set_modes_bitmap(struct bnx2x *bp) INIT_MODE_FLAGS(bp) = flags; } -static int bnx2x_init_bp(struct bnx2x *bp) +static int __devinit bnx2x_init_bp(struct bnx2x *bp) { int func; int rc; @@ -11531,7 +11531,7 @@ static int bnx2x_set_coherency_mask(struct bnx2x *bp) return 0; } -static int bnx2x_init_dev(struct pci_dev *pdev, +static int __devinit bnx2x_init_dev(struct pci_dev *pdev, struct net_device *dev, unsigned long board_type) { @@ -11570,14 +11570,6 @@ static int bnx2x_init_dev(struct pci_dev *pdev, goto err_out_disable; } - pci_read_config_dword(pdev, PCICFG_REVISION_ID_OFFSET, &pci_cfg_dword); - if ((pci_cfg_dword & PCICFG_REVESION_ID_MASK) == - PCICFG_REVESION_ID_ERROR_VAL) { - pr_err("PCI device error, probably due to fan failure, aborting\n"); - rc = -ENODEV; - goto err_out_disable; - } - if (atomic_read(&pdev->enable_cnt) == 1) { rc = pci_request_regions(pdev, DRV_MODULE_NAME); if (rc) { @@ -11713,7 +11705,7 @@ static int bnx2x_init_dev(struct pci_dev *pdev, return rc; } -static void bnx2x_get_pcie_width_speed(struct bnx2x *bp, +static void __devinit bnx2x_get_pcie_width_speed(struct bnx2x *bp, int *width, int *speed) { u32 val = REG_RD(bp, PCICFG_OFFSET + PCICFG_LINK_CONTROL); @@ -12018,7 +12010,7 @@ static int bnx2x_get_num_non_def_sbs(struct pci_dev *pdev, return control & PCI_MSIX_FLAGS_QSIZE; } -static int bnx2x_init_one(struct pci_dev *pdev, +static int __devinit bnx2x_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev = NULL; @@ -12207,7 +12199,7 @@ static int bnx2x_init_one(struct pci_dev *pdev, return rc; } -static void bnx2x_remove_one(struct pci_dev *pdev) +static void __devexit bnx2x_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct bnx2x *bp; @@ -12422,7 +12414,7 @@ static struct pci_driver bnx2x_pci_driver = { .name = DRV_MODULE_NAME, .id_table = bnx2x_pci_tbl, .probe = bnx2x_init_one, - .remove = bnx2x_remove_one, + .remove = __devexit_p(bnx2x_remove_one), .suspend = bnx2x_suspend, .resume = bnx2x_resume, .err_handler = &bnx2x_err_handler, diff --git a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h index bc2f65b32649..87cf37c71b30 100644 --- a/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h +++ b/trunk/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h @@ -6160,9 +6160,7 @@ #define PCICFG_COMMAND_INT_DISABLE (1<<10) #define PCICFG_COMMAND_RESERVED (0x1f<<11) #define PCICFG_STATUS_OFFSET 0x06 -#define PCICFG_REVISION_ID_OFFSET 0x08 -#define PCICFG_REVESION_ID_MASK 0xff -#define PCICFG_REVESION_ID_ERROR_VAL 0xff +#define PCICFG_REVESION_ID_OFFSET 0x08 #define PCICFG_CACHE_LINE_SIZE 0x0c #define PCICFG_LATENCY_TIMER 0x0d #define PCICFG_BAR_1_LOW 0x10 diff --git a/trunk/drivers/net/ethernet/broadcom/cnic.c b/trunk/drivers/net/ethernet/broadcom/cnic.c index 3b825f422090..cc8434fd606e 100644 --- a/trunk/drivers/net/ethernet/broadcom/cnic.c +++ b/trunk/drivers/net/ethernet/broadcom/cnic.c @@ -53,7 +53,7 @@ #define DRV_MODULE_NAME "cnic" -static char version[] = +static char version[] __devinitdata = "Broadcom NetXtreme II CNIC Driver " DRV_MODULE_NAME " v" CNIC_MODULE_VERSION " (" CNIC_MODULE_RELDATE ")\n"; MODULE_AUTHOR("Michael Chan and John(Zongxi) " diff --git a/trunk/drivers/net/ethernet/broadcom/sb1250-mac.c b/trunk/drivers/net/ethernet/broadcom/sb1250-mac.c index 3a1c8a3cf7c9..49e7a258da8a 100644 --- a/trunk/drivers/net/ethernet/broadcom/sb1250-mac.c +++ b/trunk/drivers/net/ethernet/broadcom/sb1250-mac.c @@ -2586,7 +2586,7 @@ static int sbmac_poll(struct napi_struct *napi, int budget) } -static int sbmac_probe(struct platform_device *pldev) +static int __devinit sbmac_probe(struct platform_device *pldev) { struct net_device *dev; struct sbmac_softc *sc; diff --git a/trunk/drivers/net/ethernet/broadcom/tg3.c b/trunk/drivers/net/ethernet/broadcom/tg3.c index 3f7b1c309c63..5cc976d01189 100644 --- a/trunk/drivers/net/ethernet/broadcom/tg3.c +++ b/trunk/drivers/net/ethernet/broadcom/tg3.c @@ -54,9 +54,6 @@ #include #include -#include -#include - #ifdef CONFIG_SPARC #include #include @@ -93,10 +90,10 @@ static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) #define DRV_MODULE_NAME "tg3" #define TG3_MAJ_NUM 3 -#define TG3_MIN_NUM 128 +#define TG3_MIN_NUM 127 #define DRV_MODULE_VERSION \ __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM) -#define DRV_MODULE_RELDATE "December 03, 2012" +#define DRV_MODULE_RELDATE "November 14, 2012" #define RESET_KIND_SHUTDOWN 0 #define RESET_KIND_INIT 1 @@ -214,7 +211,7 @@ static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) #define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" #define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" -static char version[] = +static char version[] __devinitdata = DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")"; MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); @@ -5519,190 +5516,6 @@ static int tg3_setup_phy(struct tg3 *tp, int force_reset) return err; } -/* tp->lock must be held */ -static u64 tg3_refclk_read(struct tg3 *tp) -{ - u64 stamp = tr32(TG3_EAV_REF_CLCK_LSB); - return stamp | (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32; -} - -/* tp->lock must be held */ -static void tg3_refclk_write(struct tg3 *tp, u64 newval) -{ - tw32(TG3_EAV_REF_CLCK_CTL, TG3_EAV_REF_CLCK_CTL_STOP); - tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff); - tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32); - tw32_f(TG3_EAV_REF_CLCK_CTL, TG3_EAV_REF_CLCK_CTL_RESUME); -} - -static inline void tg3_full_lock(struct tg3 *tp, int irq_sync); -static inline void tg3_full_unlock(struct tg3 *tp); -static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info) -{ - struct tg3 *tp = netdev_priv(dev); - - info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE | - SOF_TIMESTAMPING_RX_SOFTWARE | - SOF_TIMESTAMPING_SOFTWARE | - SOF_TIMESTAMPING_TX_HARDWARE | - SOF_TIMESTAMPING_RX_HARDWARE | - SOF_TIMESTAMPING_RAW_HARDWARE; - - if (tp->ptp_clock) - info->phc_index = ptp_clock_index(tp->ptp_clock); - else - info->phc_index = -1; - - info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON); - - info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) | - (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) | - (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) | - (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT); - return 0; -} - -static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) -{ - struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); - bool neg_adj = false; - u32 correction = 0; - - if (ppb < 0) { - neg_adj = true; - ppb = -ppb; - } - - /* Frequency adjustment is performed using hardware with a 24 bit - * accumulator and a programmable correction value. On each clk, the - * correction value gets added to the accumulator and when it - * overflows, the time counter is incremented/decremented. - * - * So conversion from ppb to correction value is - * ppb * (1 << 24) / 1000000000 - */ - correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) & - TG3_EAV_REF_CLK_CORRECT_MASK; - - tg3_full_lock(tp, 0); - - if (correction) - tw32(TG3_EAV_REF_CLK_CORRECT_CTL, - TG3_EAV_REF_CLK_CORRECT_EN | - (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction); - else - tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0); - - tg3_full_unlock(tp); - - return 0; -} - -static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) -{ - struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); - - tg3_full_lock(tp, 0); - tp->ptp_adjust += delta; - tg3_full_unlock(tp); - - return 0; -} - -static int tg3_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts) -{ - u64 ns; - u32 remainder; - struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); - - tg3_full_lock(tp, 0); - ns = tg3_refclk_read(tp); - ns += tp->ptp_adjust; - tg3_full_unlock(tp); - - ts->tv_sec = div_u64_rem(ns, 1000000000, &remainder); - ts->tv_nsec = remainder; - - return 0; -} - -static int tg3_ptp_settime(struct ptp_clock_info *ptp, - const struct timespec *ts) -{ - u64 ns; - struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); - - ns = timespec_to_ns(ts); - - tg3_full_lock(tp, 0); - tg3_refclk_write(tp, ns); - tp->ptp_adjust = 0; - tg3_full_unlock(tp); - - return 0; -} - -static int tg3_ptp_enable(struct ptp_clock_info *ptp, - struct ptp_clock_request *rq, int on) -{ - return -EOPNOTSUPP; -} - -static const struct ptp_clock_info tg3_ptp_caps = { - .owner = THIS_MODULE, - .name = "tg3 clock", - .max_adj = 250000000, - .n_alarm = 0, - .n_ext_ts = 0, - .n_per_out = 0, - .pps = 0, - .adjfreq = tg3_ptp_adjfreq, - .adjtime = tg3_ptp_adjtime, - .gettime = tg3_ptp_gettime, - .settime = tg3_ptp_settime, - .enable = tg3_ptp_enable, -}; - -static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock, - struct skb_shared_hwtstamps *timestamp) -{ - memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps)); - timestamp->hwtstamp = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) + - tp->ptp_adjust); -} - -/* tp->lock must be held */ -static void tg3_ptp_init(struct tg3 *tp) -{ - if (!tg3_flag(tp, PTP_CAPABLE)) - return; - - /* Initialize the hardware clock to the system time. */ - tg3_refclk_write(tp, ktime_to_ns(ktime_get_real())); - tp->ptp_adjust = 0; - tp->ptp_info = tg3_ptp_caps; -} - -/* tp->lock must be held */ -static void tg3_ptp_resume(struct tg3 *tp) -{ - if (!tg3_flag(tp, PTP_CAPABLE)) - return; - - tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust); - tp->ptp_adjust = 0; -} - -static void tg3_ptp_fini(struct tg3 *tp) -{ - if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock) - return; - - ptp_clock_unregister(tp->ptp_clock); - tp->ptp_clock = NULL; - tp->ptp_adjust = 0; -} - static inline int tg3_irq_sync(struct tg3 *tp) { return tp->irq_sync; @@ -5883,16 +5696,6 @@ static void tg3_tx(struct tg3_napi *tnapi) return; } - if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) { - struct skb_shared_hwtstamps timestamp; - u64 hwclock = tr32(TG3_TX_TSTAMP_LSB); - hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32; - - tg3_hwclock_to_timestamp(tp, hwclock, ×tamp); - - skb_tstamp_tx(skb, ×tamp); - } - pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping), skb_headlen(skb), @@ -6160,7 +5963,6 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget) dma_addr_t dma_addr; u32 opaque_key, desc_idx, *post_ptr; u8 *data; - u64 tstamp = 0; desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; @@ -6195,14 +5997,6 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget) len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - ETH_FCS_LEN; - if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == - RXD_FLAG_PTPSTAT_PTPV1 || - (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == - RXD_FLAG_PTPSTAT_PTPV2) { - tstamp = tr32(TG3_RX_TSTAMP_LSB); - tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32; - } - if (len > TG3_RX_COPY_THRESH(tp)) { int skb_size; unsigned int frag_size; @@ -6246,10 +6040,6 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget) } skb_put(skb, len); - if (tstamp) - tg3_hwclock_to_timestamp(tp, tstamp, - skb_hwtstamps(skb)); - if ((tp->dev->features & NETIF_F_RXCSUM) && (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) @@ -6735,11 +6525,8 @@ static inline void tg3_netif_stop(struct tg3 *tp) netif_tx_disable(tp->dev); } -/* tp->lock must be held */ static inline void tg3_netif_start(struct tg3 *tp) { - tg3_ptp_resume(tp); - /* NOTE: unconditional netif_tx_wake_all_queues is only * appropriate so long as all callers are assured to * have free tx slots (such as after tg3_init_hw) @@ -7307,12 +7094,6 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) vlan = vlan_tx_tag_get(skb); } - if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) && - tg3_flag(tp, TX_TSTAMP_EN)) { - skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; - base_flags |= TXD_FLAG_HWTSTAMP; - } - len = skb_headlen(skb); mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE); @@ -9181,15 +8962,9 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) */ tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; - val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP; - if (tp->rxptpctl) - tw32(TG3_RX_PTP_CTL, - tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); - - if (tg3_flag(tp, PTP_CAPABLE)) - val |= GRC_MODE_TIME_SYNC_ENABLE; - - tw32(GRC_MODE, tp->grc_mode | val); + tw32(GRC_MODE, + tp->grc_mode | + (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP)); /* Setup the timer prescalar register. Clock is always 66Mhz. */ val = tr32(GRC_MISC_CFG); @@ -10163,7 +9938,7 @@ static void tg3_timer(unsigned long __opaque) add_timer(&tp->timer); } -static void tg3_timer_init(struct tg3 *tp) +static void __devinit tg3_timer_init(struct tg3 *tp) { if (tg3_flag(tp, TAGGED_STATUS) && GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && @@ -10589,8 +10364,7 @@ static void tg3_ints_fini(struct tg3 *tp) tg3_flag_clear(tp, ENABLE_TSS); } -static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, - bool init) +static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq) { struct net_device *dev = tp->dev; int i, err; @@ -10669,12 +10443,6 @@ static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, tg3_flag_set(tp, INIT_COMPLETE); tg3_enable_ints(tp); - if (init) - tg3_ptp_init(tp); - else - tg3_ptp_resume(tp); - - tg3_full_unlock(tp); netif_tx_start_all_queues(dev); @@ -10772,19 +10540,11 @@ static int tg3_open(struct net_device *dev) tg3_full_unlock(tp); - err = tg3_start(tp, true, true, true); + err = tg3_start(tp, true, true); if (err) { tg3_frob_aux_power(tp, false); pci_set_power_state(tp->pdev, PCI_D3hot); } - - if (tg3_flag(tp, PTP_CAPABLE)) { - tp->ptp_clock = ptp_clock_register(&tp->ptp_info, - &tp->pdev->dev); - if (IS_ERR(tp->ptp_clock)) - tp->ptp_clock = NULL; - } - return err; } @@ -10792,8 +10552,6 @@ static int tg3_close(struct net_device *dev) { struct tg3 *tp = netdev_priv(dev); - tg3_ptp_fini(tp); - tg3_stop(tp); /* Clear stats across close / open calls */ @@ -11696,7 +11454,7 @@ static int tg3_set_channels(struct net_device *dev, tg3_carrier_off(tp); - tg3_start(tp, true, false, false); + tg3_start(tp, true, false); return 0; } @@ -12749,6 +12507,7 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, } tg3_full_lock(tp, irq_sync); + tg3_halt(tp, RESET_KIND_SUSPEND, 1); err = tg3_nvram_lock(tp); tg3_halt_cpu(tp, RX_CPU_BASE); @@ -12803,96 +12562,6 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, } -static int tg3_hwtstamp_ioctl(struct net_device *dev, - struct ifreq *ifr, int cmd) -{ - struct tg3 *tp = netdev_priv(dev); - struct hwtstamp_config stmpconf; - - if (!tg3_flag(tp, PTP_CAPABLE)) - return -EINVAL; - - if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf))) - return -EFAULT; - - if (stmpconf.flags) - return -EINVAL; - - switch (stmpconf.tx_type) { - case HWTSTAMP_TX_ON: - tg3_flag_set(tp, TX_TSTAMP_EN); - break; - case HWTSTAMP_TX_OFF: - tg3_flag_clear(tp, TX_TSTAMP_EN); - break; - default: - return -ERANGE; - } - - switch (stmpconf.rx_filter) { - case HWTSTAMP_FILTER_NONE: - tp->rxptpctl = 0; - break; - case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | - TG3_RX_PTP_CTL_ALL_V1_EVENTS; - break; - case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | - TG3_RX_PTP_CTL_SYNC_EVNT; - break; - case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | - TG3_RX_PTP_CTL_DELAY_REQ; - break; - case HWTSTAMP_FILTER_PTP_V2_EVENT: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | - TG3_RX_PTP_CTL_ALL_V2_EVENTS; - break; - case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | - TG3_RX_PTP_CTL_ALL_V2_EVENTS; - break; - case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | - TG3_RX_PTP_CTL_ALL_V2_EVENTS; - break; - case HWTSTAMP_FILTER_PTP_V2_SYNC: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | - TG3_RX_PTP_CTL_SYNC_EVNT; - break; - case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | - TG3_RX_PTP_CTL_SYNC_EVNT; - break; - case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | - TG3_RX_PTP_CTL_SYNC_EVNT; - break; - case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | - TG3_RX_PTP_CTL_DELAY_REQ; - break; - case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | - TG3_RX_PTP_CTL_DELAY_REQ; - break; - case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: - tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | - TG3_RX_PTP_CTL_DELAY_REQ; - break; - default: - return -ERANGE; - } - - if (netif_running(dev) && tp->rxptpctl) - tw32(TG3_RX_PTP_CTL, - tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); - - return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? - -EFAULT : 0; -} - static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { struct mii_ioctl_data *data = if_mii(ifr); @@ -12943,9 +12612,6 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) return err; - case SIOCSHWTSTAMP: - return tg3_hwtstamp_ioctl(dev, ifr, cmd); - default: /* do nothing */ break; @@ -13047,7 +12713,7 @@ static const struct ethtool_ops tg3_ethtool_ops = { .set_rxfh_indir = tg3_set_rxfh_indir, .get_channels = tg3_get_channels, .set_channels = tg3_set_channels, - .get_ts_info = tg3_get_ts_info, + .get_ts_info = ethtool_op_get_ts_info, }; static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, @@ -13163,7 +12829,7 @@ static const struct net_device_ops tg3_netdev_ops = { #endif }; -static void tg3_get_eeprom_size(struct tg3 *tp) +static void __devinit tg3_get_eeprom_size(struct tg3 *tp) { u32 cursize, val, magic; @@ -13197,7 +12863,7 @@ static void tg3_get_eeprom_size(struct tg3 *tp) tp->nvram_size = cursize; } -static void tg3_get_nvram_size(struct tg3 *tp) +static void __devinit tg3_get_nvram_size(struct tg3 *tp) { u32 val; @@ -13230,7 +12896,7 @@ static void tg3_get_nvram_size(struct tg3 *tp) tp->nvram_size = TG3_NVRAM_SIZE_512KB; } -static void tg3_get_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_nvram_info(struct tg3 *tp) { u32 nvcfg1; @@ -13281,7 +12947,7 @@ static void tg3_get_nvram_info(struct tg3 *tp) } } -static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) +static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) { switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { case FLASH_5752PAGE_SIZE_256: @@ -13308,7 +12974,7 @@ static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) } } -static void tg3_get_5752_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp) { u32 nvcfg1; @@ -13349,7 +13015,7 @@ static void tg3_get_5752_nvram_info(struct tg3 *tp) } } -static void tg3_get_5755_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp) { u32 nvcfg1, protect = 0; @@ -13405,7 +13071,7 @@ static void tg3_get_5755_nvram_info(struct tg3 *tp) } } -static void tg3_get_5787_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp) { u32 nvcfg1; @@ -13443,7 +13109,7 @@ static void tg3_get_5787_nvram_info(struct tg3 *tp) } } -static void tg3_get_5761_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp) { u32 nvcfg1, protect = 0; @@ -13518,14 +13184,14 @@ static void tg3_get_5761_nvram_info(struct tg3 *tp) } } -static void tg3_get_5906_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp) { tp->nvram_jedecnum = JEDEC_ATMEL; tg3_flag_set(tp, NVRAM_BUFFERED); tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; } -static void tg3_get_57780_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp) { u32 nvcfg1; @@ -13598,7 +13264,7 @@ static void tg3_get_57780_nvram_info(struct tg3 *tp) } -static void tg3_get_5717_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp) { u32 nvcfg1; @@ -13676,7 +13342,7 @@ static void tg3_get_5717_nvram_info(struct tg3 *tp) tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); } -static void tg3_get_5720_nvram_info(struct tg3 *tp) +static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp) { u32 nvcfg1, nvmpinstrp; @@ -13789,7 +13455,7 @@ static void tg3_get_5720_nvram_info(struct tg3 *tp) } /* Chips other than 5700/5701 use the NVRAM for fetching info. */ -static void tg3_nvram_init(struct tg3 *tp) +static void __devinit tg3_nvram_init(struct tg3 *tp) { tw32_f(GRC_EEPROM_ADDR, (EEPROM_ADDR_FSM_RESET | @@ -13859,7 +13525,7 @@ struct subsys_tbl_ent { u32 phy_id; }; -static struct subsys_tbl_ent subsys_id_to_phy_id[] = { +static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = { /* Broadcom boards. */ { TG3PCI_SUBVENDOR_ID_BROADCOM, TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, @@ -13923,7 +13589,7 @@ static struct subsys_tbl_ent subsys_id_to_phy_id[] = { TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } }; -static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp) +static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp) { int i; @@ -13937,7 +13603,7 @@ static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp) return NULL; } -static void tg3_get_eeprom_hw_cfg(struct tg3 *tp) +static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) { u32 val; @@ -14137,7 +13803,7 @@ static void tg3_get_eeprom_hw_cfg(struct tg3 *tp) device_set_wakeup_capable(&tp->pdev->dev, false); } -static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) +static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd) { int i; u32 val; @@ -14160,7 +13826,7 @@ static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) * configuration is a 32-bit value that straddles the alignment boundary. * We do two 32-bit reads and then shift and merge the results. */ -static u32 tg3_read_otp_phycfg(struct tg3 *tp) +static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp) { u32 bhalf_otp, thalf_otp; @@ -14186,7 +13852,7 @@ static u32 tg3_read_otp_phycfg(struct tg3 *tp) return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); } -static void tg3_phy_init_link_config(struct tg3 *tp) +static void __devinit tg3_phy_init_link_config(struct tg3 *tp) { u32 adv = ADVERTISED_Autoneg; @@ -14213,7 +13879,7 @@ static void tg3_phy_init_link_config(struct tg3 *tp) tp->old_link = -1; } -static int tg3_phy_probe(struct tg3 *tp) +static int __devinit tg3_phy_probe(struct tg3 *tp) { u32 hw_phy_id_1, hw_phy_id_2; u32 hw_phy_id, hw_phy_id_masked; @@ -14341,7 +14007,7 @@ static int tg3_phy_probe(struct tg3 *tp) return err; } -static void tg3_read_vpd(struct tg3 *tp) +static void __devinit tg3_read_vpd(struct tg3 *tp) { u8 *vpd_data; unsigned int block_end, rosize, len; @@ -14462,7 +14128,7 @@ static void tg3_read_vpd(struct tg3 *tp) } } -static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) +static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) { u32 val; @@ -14475,7 +14141,7 @@ static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) return 1; } -static void tg3_read_bc_ver(struct tg3 *tp) +static void __devinit tg3_read_bc_ver(struct tg3 *tp) { u32 val, offset, start, ver_offset; int i, dst_off; @@ -14527,7 +14193,7 @@ static void tg3_read_bc_ver(struct tg3 *tp) } } -static void tg3_read_hwsb_ver(struct tg3 *tp) +static void __devinit tg3_read_hwsb_ver(struct tg3 *tp) { u32 val, major, minor; @@ -14543,7 +14209,7 @@ static void tg3_read_hwsb_ver(struct tg3 *tp) snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); } -static void tg3_read_sb_ver(struct tg3 *tp, u32 val) +static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val) { u32 offset, major, minor, build; @@ -14598,7 +14264,7 @@ static void tg3_read_sb_ver(struct tg3 *tp, u32 val) } } -static void tg3_read_mgmtfw_ver(struct tg3 *tp) +static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp) { u32 val, offset, start; int i, vlen; @@ -14650,7 +14316,7 @@ static void tg3_read_mgmtfw_ver(struct tg3 *tp) } } -static void tg3_probe_ncsi(struct tg3 *tp) +static void __devinit tg3_probe_ncsi(struct tg3 *tp) { u32 apedata; @@ -14666,7 +14332,7 @@ static void tg3_probe_ncsi(struct tg3 *tp) tg3_flag_set(tp, APE_HAS_NCSI); } -static void tg3_read_dash_ver(struct tg3 *tp) +static void __devinit tg3_read_dash_ver(struct tg3 *tp) { int vlen; u32 apedata; @@ -14689,7 +14355,7 @@ static void tg3_read_dash_ver(struct tg3 *tp) (apedata & APE_FW_VERSION_BLDMSK)); } -static void tg3_read_fw_ver(struct tg3 *tp) +static void __devinit tg3_read_fw_ver(struct tg3 *tp) { u32 val; bool vpd_vers = false; @@ -14742,7 +14408,7 @@ static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = { { }, }; -static struct pci_dev *tg3_find_peer(struct tg3 *tp) +static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp) { struct pci_dev *peer; unsigned int func, devnr = tp->pdev->devfn & ~7; @@ -14770,7 +14436,7 @@ static struct pci_dev *tg3_find_peer(struct tg3 *tp) return peer; } -static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) +static void __devinit tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) { tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) { @@ -14873,7 +14539,7 @@ static bool tg3_10_100_only_device(struct tg3 *tp, return false; } -static int tg3_get_invariants(struct tg3 *tp, +static int __devinit tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) { u32 misc_ctrl_reg; @@ -15633,7 +15299,7 @@ static int tg3_get_invariants(struct tg3 *tp, } #ifdef CONFIG_SPARC -static int tg3_get_macaddr_sparc(struct tg3 *tp) +static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp) { struct net_device *dev = tp->dev; struct pci_dev *pdev = tp->pdev; @@ -15650,7 +15316,7 @@ static int tg3_get_macaddr_sparc(struct tg3 *tp) return -ENODEV; } -static int tg3_get_default_macaddr_sparc(struct tg3 *tp) +static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp) { struct net_device *dev = tp->dev; @@ -15660,7 +15326,7 @@ static int tg3_get_default_macaddr_sparc(struct tg3 *tp) } #endif -static int tg3_get_device_address(struct tg3 *tp) +static int __devinit tg3_get_device_address(struct tg3 *tp) { struct net_device *dev = tp->dev; u32 hi, lo, mac_offset; @@ -15739,7 +15405,7 @@ static int tg3_get_device_address(struct tg3 *tp) #define BOUNDARY_SINGLE_CACHELINE 1 #define BOUNDARY_MULTI_CACHELINE 2 -static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) +static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val) { int cacheline_size; u8 byte; @@ -15880,8 +15546,7 @@ static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) return val; } -static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, - int size, int to_device) +static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device) { struct tg3_internal_buffer_desc test_desc; u32 sram_dma_descs; @@ -15968,7 +15633,7 @@ static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = { { }, }; -static int tg3_test_dma(struct tg3 *tp) +static int __devinit tg3_test_dma(struct tg3 *tp) { dma_addr_t buf_dma; u32 *buf, saved_dma_rwctrl; @@ -16158,7 +15823,7 @@ static int tg3_test_dma(struct tg3 *tp) return ret; } -static void tg3_init_bufmgr_config(struct tg3 *tp) +static void __devinit tg3_init_bufmgr_config(struct tg3 *tp) { if (tg3_flag(tp, 57765_PLUS)) { tp->bufmgr_config.mbuf_read_dma_low_water = @@ -16214,7 +15879,7 @@ static void tg3_init_bufmgr_config(struct tg3 *tp) tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; } -static char *tg3_phy_string(struct tg3 *tp) +static char * __devinit tg3_phy_string(struct tg3 *tp) { switch (tp->phy_id & TG3_PHY_ID_MASK) { case TG3_PHY_ID_BCM5400: return "5400"; @@ -16245,7 +15910,7 @@ static char *tg3_phy_string(struct tg3 *tp) } } -static char *tg3_bus_string(struct tg3 *tp, char *str) +static char * __devinit tg3_bus_string(struct tg3 *tp, char *str) { if (tg3_flag(tp, PCI_EXPRESS)) { strcpy(str, "PCI Express"); @@ -16281,7 +15946,7 @@ static char *tg3_bus_string(struct tg3 *tp, char *str) return str; } -static void tg3_init_coal(struct tg3 *tp) +static void __devinit tg3_init_coal(struct tg3 *tp) { struct ethtool_coalesce *ec = &tp->coal; @@ -16312,7 +15977,7 @@ static void tg3_init_coal(struct tg3 *tp) } } -static int tg3_init_one(struct pci_dev *pdev, +static int __devinit tg3_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; @@ -16608,10 +16273,6 @@ static int tg3_init_one(struct pci_dev *pdev, pci_set_drvdata(pdev, dev); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) - tg3_flag_set(tp, PTP_CAPABLE); - if (tg3_flag(tp, 5717_PLUS)) { /* Resume a low-power mode */ tg3_frob_aux_power(tp, false); @@ -16696,7 +16357,7 @@ static int tg3_init_one(struct pci_dev *pdev, return err; } -static void tg3_remove_one(struct pci_dev *pdev) +static void __devexit tg3_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -16937,8 +16598,8 @@ static void tg3_io_resume(struct pci_dev *pdev) tg3_full_lock(tp, 0); tg3_flag_set(tp, INIT_COMPLETE); err = tg3_restart_hw(tp, 1); + tg3_full_unlock(tp); if (err) { - tg3_full_unlock(tp); netdev_err(netdev, "Cannot restart hardware after reset.\n"); goto done; } @@ -16949,8 +16610,6 @@ static void tg3_io_resume(struct pci_dev *pdev) tg3_netif_start(tp); - tg3_full_unlock(tp); - tg3_phy_start(tp); done: @@ -16967,7 +16626,7 @@ static struct pci_driver tg3_driver = { .name = DRV_MODULE_NAME, .id_table = tg3_pci_tbl, .probe = tg3_init_one, - .remove = tg3_remove_one, + .remove = __devexit_p(tg3_remove_one), .err_handler = &tg3_err_handler, .driver.pm = TG3_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/broadcom/tg3.h b/trunk/drivers/net/ethernet/broadcom/tg3.h index d330e81f5793..4534804469bf 100644 --- a/trunk/drivers/net/ethernet/broadcom/tg3.h +++ b/trunk/drivers/net/ethernet/broadcom/tg3.h @@ -772,10 +772,7 @@ #define SG_DIG_MAC_ACK_STATUS 0x00000004 #define SG_DIG_AUTONEG_COMPLETE 0x00000002 #define SG_DIG_AUTONEG_ERROR 0x00000001 -#define TG3_TX_TSTAMP_LSB 0x000005c0 -#define TG3_TX_TSTAMP_MSB 0x000005c4 -#define TG3_TSTAMP_MASK 0x7fffffffffffffff -/* 0x5c8 --> 0x600 unused */ +/* 0x5b8 --> 0x600 unused */ #define MAC_TX_MAC_STATE_BASE 0x00000600 /* 16 bytes */ #define MAC_RX_MAC_STATE_BASE 0x00000610 /* 20 bytes */ /* 0x624 --> 0x670 unused */ @@ -792,36 +789,7 @@ #define MAC_RSS_HASH_KEY_7 0x0000068c #define MAC_RSS_HASH_KEY_8 0x00000690 #define MAC_RSS_HASH_KEY_9 0x00000694 -/* 0x698 --> 0x6b0 unused */ - -#define TG3_RX_TSTAMP_LSB 0x000006b0 -#define TG3_RX_TSTAMP_MSB 0x000006b4 -/* 0x6b8 --> 0x6c8 unused */ - -#define TG3_RX_PTP_CTL 0x000006c8 -#define TG3_RX_PTP_CTL_SYNC_EVNT 0x00000001 -#define TG3_RX_PTP_CTL_DELAY_REQ 0x00000002 -#define TG3_RX_PTP_CTL_PDLAY_REQ 0x00000004 -#define TG3_RX_PTP_CTL_PDLAY_RES 0x00000008 -#define TG3_RX_PTP_CTL_ALL_V1_EVENTS (TG3_RX_PTP_CTL_SYNC_EVNT | \ - TG3_RX_PTP_CTL_DELAY_REQ) -#define TG3_RX_PTP_CTL_ALL_V2_EVENTS (TG3_RX_PTP_CTL_SYNC_EVNT | \ - TG3_RX_PTP_CTL_DELAY_REQ | \ - TG3_RX_PTP_CTL_PDLAY_REQ | \ - TG3_RX_PTP_CTL_PDLAY_RES) -#define TG3_RX_PTP_CTL_FOLLOW_UP 0x00000100 -#define TG3_RX_PTP_CTL_DELAY_RES 0x00000200 -#define TG3_RX_PTP_CTL_PDRES_FLW_UP 0x00000400 -#define TG3_RX_PTP_CTL_ANNOUNCE 0x00000800 -#define TG3_RX_PTP_CTL_SIGNALING 0x00001000 -#define TG3_RX_PTP_CTL_MANAGEMENT 0x00002000 -#define TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN 0x00800000 -#define TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN 0x01000000 -#define TG3_RX_PTP_CTL_RX_PTP_V2_EN (TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | \ - TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN) -#define TG3_RX_PTP_CTL_RX_PTP_V1_EN 0x02000000 -#define TG3_RX_PTP_CTL_HWTS_INTERLOCK 0x04000000 -/* 0x6cc --> 0x800 unused */ +/* 0x698 --> 0x800 unused */ #define MAC_TX_STATS_OCTETS 0x00000800 #define MAC_TX_STATS_RESV1 0x00000804 @@ -1701,7 +1669,6 @@ #define GRC_MODE_HOST_STACKUP 0x00010000 #define GRC_MODE_HOST_SENDBDS 0x00020000 #define GRC_MODE_HTX2B_ENABLE 0x00040000 -#define GRC_MODE_TIME_SYNC_ENABLE 0x00080000 #define GRC_MODE_NO_TX_PHDR_CSUM 0x00100000 #define GRC_MODE_NVRAM_WR_ENABLE 0x00200000 #define GRC_MODE_PCIE_TL_SEL 0x00000000 @@ -1804,17 +1771,7 @@ #define GRC_VCPU_EXT_CTRL_DISABLE_WOL 0x20000000 #define GRC_FASTBOOT_PC 0x00006894 /* 5752, 5755, 5787 */ -#define TG3_EAV_REF_CLCK_LSB 0x00006900 -#define TG3_EAV_REF_CLCK_MSB 0x00006904 -#define TG3_EAV_REF_CLCK_CTL 0x00006908 -#define TG3_EAV_REF_CLCK_CTL_STOP 0x00000002 -#define TG3_EAV_REF_CLCK_CTL_RESUME 0x00000004 -#define TG3_EAV_REF_CLK_CORRECT_CTL 0x00006928 -#define TG3_EAV_REF_CLK_CORRECT_EN (1 << 31) -#define TG3_EAV_REF_CLK_CORRECT_NEG (1 << 30) - -#define TG3_EAV_REF_CLK_CORRECT_MASK 0xffffff -/* 0x690c --> 0x7000 unused */ +/* 0x6c00 --> 0x7000 unused */ /* NVRAM Control registers */ #define NVRAM_CMD 0x00007000 @@ -2482,7 +2439,6 @@ struct tg3_tx_buffer_desc { #define TXD_FLAG_IP_FRAG 0x0008 #define TXD_FLAG_JMB_PKT 0x0008 #define TXD_FLAG_IP_FRAG_END 0x0010 -#define TXD_FLAG_HWTSTAMP 0x0020 #define TXD_FLAG_VLAN 0x0040 #define TXD_FLAG_COAL_NOW 0x0080 #define TXD_FLAG_CPU_PRE_DMA 0x0100 @@ -2524,9 +2480,6 @@ struct tg3_rx_buffer_desc { #define RXD_FLAG_IP_CSUM 0x1000 #define RXD_FLAG_TCPUDP_CSUM 0x2000 #define RXD_FLAG_IS_TCP 0x4000 -#define RXD_FLAG_PTPSTAT_MASK 0x0210 -#define RXD_FLAG_PTPSTAT_PTPV1 0x0010 -#define RXD_FLAG_PTPSTAT_PTPV2 0x0200 u32 ip_tcp_csum; #define RXD_IPCSUM_MASK 0xffff0000 @@ -3017,11 +2970,9 @@ enum TG3_FLAGS { TG3_FLAG_USE_JUMBO_BDFLAG, TG3_FLAG_L1PLLPD_EN, TG3_FLAG_APE_HAS_NCSI, - TG3_FLAG_TX_TSTAMP_EN, TG3_FLAG_4K_FIFO_LIMIT, TG3_FLAG_5719_RDMA_BUG, TG3_FLAG_RESET_TASK_PENDING, - TG3_FLAG_PTP_CAPABLE, TG3_FLAG_5705_PLUS, TG3_FLAG_IS_5788, TG3_FLAG_5750_PLUS, @@ -3090,10 +3041,6 @@ struct tg3 { u32 coal_now; u32 msg_enable; - struct ptp_clock_info ptp_info; - struct ptp_clock *ptp_clock; - s64 ptp_adjust; - /* begin "tx thread" cacheline section */ void (*write32_tx_mbox) (struct tg3 *, u32, u32); @@ -3161,7 +3108,6 @@ struct tg3 { u32 dma_rwctrl; u32 coalesce_mode; u32 pwrmgmt_thresh; - u32 rxptpctl; /* PCI block */ u32 pci_chip_rev_id; diff --git a/trunk/drivers/net/ethernet/brocade/bna/bnad.c b/trunk/drivers/net/ethernet/brocade/bna/bnad.c index 76b2af64adc2..ce1eac529470 100644 --- a/trunk/drivers/net/ethernet/brocade/bna/bnad.c +++ b/trunk/drivers/net/ethernet/brocade/bna/bnad.c @@ -3226,7 +3226,7 @@ bnad_pci_uninit(struct pci_dev *pdev) pci_disable_device(pdev); } -static int +static int __devinit bnad_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pcidev_id) { @@ -3426,7 +3426,7 @@ bnad_pci_probe(struct pci_dev *pdev, return err; } -static void +static void __devexit bnad_pci_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); @@ -3490,7 +3490,7 @@ static struct pci_driver bnad_pci_driver = { .name = BNAD_NAME, .id_table = bnad_pci_id_table, .probe = bnad_pci_probe, - .remove = bnad_pci_remove, + .remove = __devexit_p(bnad_pci_remove), }; static int __init diff --git a/trunk/drivers/net/ethernet/cadence/at91_ether.c b/trunk/drivers/net/ethernet/cadence/at91_ether.c index 3becdb2deb46..716cc014a56e 100644 --- a/trunk/drivers/net/ethernet/cadence/at91_ether.c +++ b/trunk/drivers/net/ethernet/cadence/at91_ether.c @@ -456,7 +456,7 @@ static int __init at91ether_probe(struct platform_device *pdev) return res; } -static int at91ether_remove(struct platform_device *pdev) +static int __devexit at91ether_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct macb *lp = netdev_priv(dev); @@ -509,7 +509,7 @@ static int at91ether_resume(struct platform_device *pdev) #endif static struct platform_driver at91ether_driver = { - .remove = at91ether_remove, + .remove = __devexit_p(at91ether_remove), .suspend = at91ether_suspend, .resume = at91ether_resume, .driver = { diff --git a/trunk/drivers/net/ethernet/cadence/macb.c b/trunk/drivers/net/ethernet/cadence/macb.c index a9b0830fb39d..6a59bce38a8c 100644 --- a/trunk/drivers/net/ethernet/cadence/macb.c +++ b/trunk/drivers/net/ethernet/cadence/macb.c @@ -1470,7 +1470,7 @@ static const struct of_device_id macb_dt_ids[] = { MODULE_DEVICE_TABLE(of, macb_dt_ids); -static int macb_get_phy_mode_dt(struct platform_device *pdev) +static int __devinit macb_get_phy_mode_dt(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; @@ -1480,7 +1480,7 @@ static int macb_get_phy_mode_dt(struct platform_device *pdev) return -ENODEV; } -static int macb_get_hwaddr_dt(struct macb *bp) +static int __devinit macb_get_hwaddr_dt(struct macb *bp) { struct device_node *np = bp->pdev->dev.of_node; if (np) { @@ -1494,11 +1494,11 @@ static int macb_get_hwaddr_dt(struct macb *bp) return -ENODEV; } #else -static int macb_get_phy_mode_dt(struct platform_device *pdev) +static int __devinit macb_get_phy_mode_dt(struct platform_device *pdev) { return -ENODEV; } -static int macb_get_hwaddr_dt(struct macb *bp) +static int __devinit macb_get_hwaddr_dt(struct macb *bp) { return -ENODEV; } diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb/cxgb2.c b/trunk/drivers/net/ethernet/chelsio/cxgb/cxgb2.c index 5f60623dd7fd..1d17c92f2dda 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb/cxgb2.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb/cxgb2.c @@ -974,7 +974,7 @@ static const struct net_device_ops cxgb_netdev_ops = { #endif }; -static int init_one(struct pci_dev *pdev, +static int __devinit init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { static int version_printed; @@ -1332,7 +1332,7 @@ static inline void t1_sw_reset(struct pci_dev *pdev) pci_write_config_dword(pdev, A_PCICFG_PM_CSR, 0); } -static void remove_one(struct pci_dev *pdev) +static void __devexit remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct adapter *adapter = dev->ml_priv; @@ -1361,7 +1361,7 @@ static struct pci_driver driver = { .name = DRV_NAME, .id_table = t1_pci_tbl, .probe = init_one, - .remove = remove_one, + .remove = __devexit_p(remove_one), }; static int __init t1_init_module(void) diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb/sge.c b/trunk/drivers/net/ethernet/chelsio/cxgb/sge.c index 9a0a85898a50..47a84359d4e4 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb/sge.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb/sge.c @@ -2071,7 +2071,7 @@ static void espibug_workaround(unsigned long data) /* * Creates a t1_sge structure and returns suggested resource parameters. */ -struct sge *t1_sge_create(struct adapter *adapter, +struct sge * __devinit t1_sge_create(struct adapter *adapter, struct sge_params *p) { struct sge *sge = kzalloc(sizeof(*sge), GFP_KERNEL); diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb/subr.c b/trunk/drivers/net/ethernet/chelsio/cxgb/subr.c index 9527dc196f87..8a43c7e19701 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb/subr.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb/subr.c @@ -892,7 +892,7 @@ static void power_sequence_xpak(adapter_t* adapter) } } -int t1_get_board_rev(adapter_t *adapter, const struct board_info *bi, +int __devinit t1_get_board_rev(adapter_t *adapter, const struct board_info *bi, struct adapter_params *p) { p->chip_version = bi->chip_term; @@ -992,7 +992,7 @@ int t1_init_hw_modules(adapter_t *adapter) /* * Determine a card's PCI mode. */ -static void get_pci_mode(adapter_t *adapter, struct chelsio_pci_params *p) +static void __devinit get_pci_mode(adapter_t *adapter, struct chelsio_pci_params *p) { static const unsigned short speed_map[] = { 33, 66, 100, 133 }; u32 pci_mode; @@ -1028,7 +1028,7 @@ void t1_free_sw_modules(adapter_t *adapter) t1_espi_destroy(adapter->espi); } -static void init_link_config(struct link_config *lc, +static void __devinit init_link_config(struct link_config *lc, const struct board_info *bi) { lc->supported = bi->caps; @@ -1049,7 +1049,7 @@ static void init_link_config(struct link_config *lc, * Allocate and initialize the data structures that hold the SW state of * the Terminator HW modules. */ -int t1_init_sw_modules(adapter_t *adapter, +int __devinit t1_init_sw_modules(adapter_t *adapter, const struct board_info *bi) { unsigned int i; diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb/tp.c b/trunk/drivers/net/ethernet/chelsio/cxgb/tp.c index b146acabf982..8bed4a59e65f 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb/tp.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb/tp.c @@ -55,7 +55,7 @@ void t1_tp_destroy(struct petp *tp) kfree(tp); } -struct petp *t1_tp_create(adapter_t *adapter, struct tp_params *p) +struct petp *__devinit t1_tp_create(adapter_t * adapter, struct tp_params *p) { struct petp *tp = kzalloc(sizeof(*tp), GFP_KERNEL); diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/trunk/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c index 4aa3b21c6f7f..9c9f3260344a 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c @@ -3078,7 +3078,7 @@ static void set_nqsets(struct adapter *adap) } } -static int cxgb_enable_msix(struct adapter *adap) +static int __devinit cxgb_enable_msix(struct adapter *adap) { struct msix_entry entries[SGE_QSETS + 1]; int vectors; @@ -3108,7 +3108,7 @@ static int cxgb_enable_msix(struct adapter *adap) return err; } -static void print_port_info(struct adapter *adap, +static void __devinit print_port_info(struct adapter *adap, const struct adapter_info *ai) { static const char *pci_variant[] = { @@ -3165,7 +3165,7 @@ static const struct net_device_ops cxgb_netdev_ops = { #endif }; -static void cxgb3_init_iscsi_mac(struct net_device *dev) +static void __devinit cxgb3_init_iscsi_mac(struct net_device *dev) { struct port_info *pi = netdev_priv(dev); @@ -3176,7 +3176,7 @@ static void cxgb3_init_iscsi_mac(struct net_device *dev) #define TSO_FLAGS (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN) #define VLAN_FEAT (NETIF_F_SG | NETIF_F_IP_CSUM | TSO_FLAGS | \ NETIF_F_IPV6_CSUM | NETIF_F_HIGHDMA) -static int init_one(struct pci_dev *pdev, +static int __devinit init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { static int version_printed; @@ -3381,7 +3381,7 @@ static int init_one(struct pci_dev *pdev, return err; } -static void remove_one(struct pci_dev *pdev) +static void __devexit remove_one(struct pci_dev *pdev) { struct adapter *adapter = pci_get_drvdata(pdev); @@ -3425,7 +3425,7 @@ static struct pci_driver driver = { .name = DRV_NAME, .id_table = cxgb3_pci_tbl, .probe = init_one, - .remove = remove_one, + .remove = __devexit_p(remove_one), .err_handler = &t3_err_handler, }; diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c b/trunk/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c index 942dace361d2..2dbbcbb450d3 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c @@ -1382,7 +1382,7 @@ static inline int adap2type(struct adapter *adapter) return type; } -void cxgb3_adapter_ofld(struct adapter *adapter) +void __devinit cxgb3_adapter_ofld(struct adapter *adapter) { struct t3cdev *tdev = &adapter->tdev; @@ -1396,7 +1396,7 @@ void cxgb3_adapter_ofld(struct adapter *adapter) register_tdev(tdev); } -void cxgb3_adapter_unofld(struct adapter *adapter) +void __devexit cxgb3_adapter_unofld(struct adapter *adapter) { struct t3cdev *tdev = &adapter->tdev; diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/trunk/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index bef893d4c68a..0df1284df497 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c @@ -2148,7 +2148,7 @@ static const struct file_operations mem_debugfs_fops = { .llseek = default_llseek, }; -static void add_debugfs_mem(struct adapter *adap, const char *name, +static void __devinit add_debugfs_mem(struct adapter *adap, const char *name, unsigned int idx, unsigned int size_mb) { struct dentry *de; @@ -2159,7 +2159,7 @@ static void add_debugfs_mem(struct adapter *adap, const char *name, de->d_inode->i_size = size_mb << 20; } -static int setup_debugfs(struct adapter *adap) +static int __devinit setup_debugfs(struct adapter *adap) { int i; @@ -4173,7 +4173,7 @@ static inline void init_rspq(struct sge_rspq *q, u8 timer_idx, u8 pkt_cnt_idx, * of ports we found and the number of available CPUs. Most settings can be * modified by the admin prior to actual use. */ -static void cfg_queues(struct adapter *adap) +static void __devinit cfg_queues(struct adapter *adap) { struct sge *s = &adap->sge; int i, q10g = 0, n10g = 0, qidx = 0; @@ -4257,7 +4257,7 @@ static void cfg_queues(struct adapter *adap) * Reduce the number of Ethernet queues across all ports to at most n. * n provides at least one queue per port. */ -static void reduce_ethqs(struct adapter *adap, int n) +static void __devinit reduce_ethqs(struct adapter *adap, int n) { int i; struct port_info *pi; @@ -4284,7 +4284,7 @@ static void reduce_ethqs(struct adapter *adap, int n) /* 2 MSI-X vectors needed for the FW queue and non-data interrupts */ #define EXTRA_VECS 2 -static int enable_msix(struct adapter *adap) +static int __devinit enable_msix(struct adapter *adap) { int ofld_need = 0; int i, err, want, need; @@ -4333,7 +4333,7 @@ static int enable_msix(struct adapter *adap) #undef EXTRA_VECS -static int init_rss(struct adapter *adap) +static int __devinit init_rss(struct adapter *adap) { unsigned int i, j; @@ -4349,7 +4349,7 @@ static int init_rss(struct adapter *adap) return 0; } -static void print_port_info(const struct net_device *dev) +static void __devinit print_port_info(const struct net_device *dev) { static const char *base[] = { "R XFI", "R XAUI", "T SGMII", "T XFI", "T XAUI", "KX4", "CX4", @@ -4386,7 +4386,7 @@ static void print_port_info(const struct net_device *dev) adap->params.vpd.sn, adap->params.vpd.ec); } -static void enable_pcie_relaxed_ordering(struct pci_dev *dev) +static void __devinit enable_pcie_relaxed_ordering(struct pci_dev *dev) { pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_RELAX_EN); } @@ -4419,7 +4419,7 @@ static void free_some_resources(struct adapter *adapter) #define VLAN_FEAT (NETIF_F_SG | NETIF_F_IP_CSUM | TSO_FLAGS | \ NETIF_F_IPV6_CSUM | NETIF_F_HIGHDMA) -static int init_one(struct pci_dev *pdev, +static int __devinit init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { int func, i, err; @@ -4640,7 +4640,7 @@ static int init_one(struct pci_dev *pdev, return err; } -static void remove_one(struct pci_dev *pdev) +static void __devexit remove_one(struct pci_dev *pdev) { struct adapter *adapter = pci_get_drvdata(pdev); @@ -4680,7 +4680,7 @@ static struct pci_driver cxgb4_driver = { .name = KBUILD_MODNAME, .id_table = cxgb4_pci_tbl, .probe = init_one, - .remove = remove_one, + .remove = __devexit_p(remove_one), .err_handler = &cxgb4_eeh, }; diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/trunk/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c index 8ea773630d10..730ae2cfa49e 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c @@ -2003,7 +2003,7 @@ void t4_tp_wr_bits_indirect(struct adapter *adap, unsigned int addr, * * Initialize the congestion control parameters. */ -static void init_cong_ctrl(unsigned short *a, unsigned short *b) +static void __devinit init_cong_ctrl(unsigned short *a, unsigned short *b) { a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = a[8] = 1; a[9] = 2; @@ -3440,7 +3440,7 @@ int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl) return 0; } -static void get_pci_mode(struct adapter *adapter, +static void __devinit get_pci_mode(struct adapter *adapter, struct pci_params *p) { u16 val; @@ -3460,7 +3460,7 @@ static void get_pci_mode(struct adapter *adapter, * Initializes the SW state maintained for each link, including the link's * capabilities and default speed/flow-control/autonegotiation settings. */ -static void init_link_config(struct link_config *lc, +static void __devinit init_link_config(struct link_config *lc, unsigned int caps) { lc->supported = caps; @@ -3485,7 +3485,7 @@ int t4_wait_dev_ready(struct adapter *adap) return t4_read_reg(adap, PL_WHOAMI) != 0xffffffff ? 0 : -EIO; } -static int get_flash_params(struct adapter *adap) +static int __devinit get_flash_params(struct adapter *adap) { int ret; u32 info; @@ -3521,7 +3521,7 @@ static int get_flash_params(struct adapter *adap) * values for some adapter tunables, take PHYs out of reset, and * initialize the MDIO interface. */ -int t4_prep_adapter(struct adapter *adapter) +int __devinit t4_prep_adapter(struct adapter *adapter) { int ret; @@ -3549,7 +3549,7 @@ int t4_prep_adapter(struct adapter *adapter) return 0; } -int t4_port_init(struct adapter *adap, int mbox, int pf, int vf) +int __devinit t4_port_init(struct adapter *adap, int mbox, int pf, int vf) { u8 addr[6]; int ret, i, j = 0; diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/trunk/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c index f866eb5e35de..9dad56101e23 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c @@ -2023,7 +2023,7 @@ static struct cxgb4vf_debugfs_entry debugfs_files[] = { * Set up out /sys/kernel/debug/cxgb4vf sub-nodes. We assume that the * directory (debugfs_root) has already been set up. */ -static int setup_debugfs(struct adapter *adapter) +static int __devinit setup_debugfs(struct adapter *adapter) { int i; @@ -2064,7 +2064,7 @@ static void cleanup_debugfs(struct adapter *adapter) * adapter parameters we're going to be using and initialize basic adapter * hardware support. */ -static int adap_init0(struct adapter *adapter) +static int __devinit adap_init0(struct adapter *adapter) { struct vf_resources *vfres = &adapter->params.vfres; struct sge_params *sge_params = &adapter->params.sge; @@ -2266,7 +2266,7 @@ static inline void init_rspq(struct sge_rspq *rspq, u8 timer_idx, * be modified by the admin via ethtool and cxgbtool prior to the adapter * being brought up for the first time. */ -static void cfg_queues(struct adapter *adapter) +static void __devinit cfg_queues(struct adapter *adapter) { struct sge *s = &adapter->sge; int q10g, n10g, qidx, pidx, qs; @@ -2361,7 +2361,7 @@ static void cfg_queues(struct adapter *adapter) * Reduce the number of Ethernet queues across all ports to at most n. * n provides at least one queue per port. */ -static void reduce_ethqs(struct adapter *adapter, int n) +static void __devinit reduce_ethqs(struct adapter *adapter, int n) { int i; struct port_info *pi; @@ -2400,7 +2400,7 @@ static void reduce_ethqs(struct adapter *adapter, int n) * for our "extras". Note that this process may lower the maximum number of * allowed Queue Sets ... */ -static int enable_msix(struct adapter *adapter) +static int __devinit enable_msix(struct adapter *adapter) { int i, err, want, need; struct msix_entry entries[MSIX_ENTRIES]; @@ -2462,7 +2462,7 @@ static const struct net_device_ops cxgb4vf_netdev_ops = { * state needed to manage the device. This routine is called "init_one" in * the PF Driver ... */ -static int cxgb4vf_pci_probe(struct pci_dev *pdev, +static int __devinit cxgb4vf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { static int version_printed; @@ -2769,7 +2769,7 @@ static int cxgb4vf_pci_probe(struct pci_dev *pdev, * "probe" routine and quiesce the device (disable interrupts, etc.). (Note * that this is called "remove_one" in the PF Driver.) */ -static void cxgb4vf_pci_remove(struct pci_dev *pdev) +static void __devexit cxgb4vf_pci_remove(struct pci_dev *pdev) { struct adapter *adapter = pci_get_drvdata(pdev); @@ -2835,7 +2835,7 @@ static void cxgb4vf_pci_remove(struct pci_dev *pdev) * "Shutdown" quiesce the device, stopping Ingress Packet and Interrupt * delivery. */ -static void cxgb4vf_pci_shutdown(struct pci_dev *pdev) +static void __devexit cxgb4vf_pci_shutdown(struct pci_dev *pdev) { struct adapter *adapter; int pidx; @@ -2905,8 +2905,8 @@ static struct pci_driver cxgb4vf_driver = { .name = KBUILD_MODNAME, .id_table = cxgb4vf_pci_tbl, .probe = cxgb4vf_pci_probe, - .remove = cxgb4vf_pci_remove, - .shutdown = cxgb4vf_pci_shutdown, + .remove = __devexit_p(cxgb4vf_pci_remove), + .shutdown = __devexit_p(cxgb4vf_pci_shutdown), }; /* diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h b/trunk/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h index 283f9d0d37fd..a65c80aed1f2 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h +++ b/trunk/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h @@ -232,8 +232,8 @@ static inline int t4vf_wr_mbox_ns(struct adapter *adapter, const void *cmd, return t4vf_wr_mbox_core(adapter, cmd, size, rpl, false); } -int t4vf_wait_dev_ready(struct adapter *); -int t4vf_port_init(struct adapter *, int); +int __devinit t4vf_wait_dev_ready(struct adapter *); +int __devinit t4vf_port_init(struct adapter *, int); int t4vf_fw_reset(struct adapter *); int t4vf_query_params(struct adapter *, unsigned int, const u32 *, u32 *); diff --git a/trunk/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c b/trunk/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c index 9b70cccf8437..fe3fd3dad6f7 100644 --- a/trunk/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c +++ b/trunk/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c @@ -46,7 +46,7 @@ * returning a value other than all 1's). Return an error if it doesn't * become ready ... */ -int t4vf_wait_dev_ready(struct adapter *adapter) +int __devinit t4vf_wait_dev_ready(struct adapter *adapter) { const u32 whoami = T4VF_PL_BASE_ADDR + PL_VF_WHOAMI; const u32 notready1 = 0xffffffff; @@ -253,7 +253,7 @@ static int hash_mac_addr(const u8 *addr) * Initializes the SW state maintained for each link, including the link's * capabilities and default speed/flow-control/autonegotiation settings. */ -static void init_link_config(struct link_config *lc, +static void __devinit init_link_config(struct link_config *lc, unsigned int caps) { lc->supported = caps; @@ -275,7 +275,7 @@ static void init_link_config(struct link_config *lc, * @adapter: the adapter * @pidx: the adapter port index */ -int t4vf_port_init(struct adapter *adapter, int pidx) +int __devinit t4vf_port_init(struct adapter *adapter, int pidx) { struct port_info *pi = adap2pinfo(adapter, pidx); struct fw_vi_cmd vi_cmd, vi_rpl; diff --git a/trunk/drivers/net/ethernet/cisco/enic/enic_main.c b/trunk/drivers/net/ethernet/cisco/enic/enic_main.c index 930f03bd1263..ad1468b3ab91 100644 --- a/trunk/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/trunk/drivers/net/ethernet/cisco/enic/enic_main.c @@ -2275,7 +2275,7 @@ static void enic_iounmap(struct enic *enic) iounmap(enic->bar[i].vaddr); } -static int enic_probe(struct pci_dev *pdev, +static int __devinit enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct device *dev = &pdev->dev; @@ -2552,7 +2552,7 @@ static int enic_probe(struct pci_dev *pdev, return err; } -static void enic_remove(struct pci_dev *pdev) +static void __devexit enic_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); @@ -2584,7 +2584,7 @@ static struct pci_driver enic_driver = { .name = DRV_NAME, .id_table = enic_id_table, .probe = enic_probe, - .remove = enic_remove, + .remove = __devexit_p(enic_remove), }; static int __init enic_init_module(void) diff --git a/trunk/drivers/net/ethernet/davicom/dm9000.c b/trunk/drivers/net/ethernet/davicom/dm9000.c index c716e95a61fe..36499d5edd95 100644 --- a/trunk/drivers/net/ethernet/davicom/dm9000.c +++ b/trunk/drivers/net/ethernet/davicom/dm9000.c @@ -1359,7 +1359,7 @@ static const struct net_device_ops dm9000_netdev_ops = { /* * Search DM9000 board, allocate space and register it */ -static int +static int __devinit dm9000_probe(struct platform_device *pdev) { struct dm9000_plat_data *pdata = pdev->dev.platform_data; @@ -1661,7 +1661,7 @@ static const struct dev_pm_ops dm9000_drv_pm_ops = { .resume = dm9000_drv_resume, }; -static int +static int __devexit dm9000_drv_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); @@ -1683,7 +1683,7 @@ static struct platform_driver dm9000_driver = { .pm = &dm9000_drv_pm_ops, }, .probe = dm9000_probe, - .remove = dm9000_drv_remove, + .remove = __devexit_p(dm9000_drv_remove), }; static int __init diff --git a/trunk/drivers/net/ethernet/dec/tulip/de2104x.c b/trunk/drivers/net/ethernet/dec/tulip/de2104x.c index 0918e3879abe..77335853ac36 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/de2104x.c +++ b/trunk/drivers/net/ethernet/dec/tulip/de2104x.c @@ -1700,7 +1700,7 @@ static const struct ethtool_ops de_ethtool_ops = { .get_regs = de_get_regs, }; -static void de21040_get_mac_address(struct de_private *de) +static void __devinit de21040_get_mac_address (struct de_private *de) { unsigned i; @@ -1721,7 +1721,7 @@ static void de21040_get_mac_address(struct de_private *de) } } -static void de21040_get_media_info(struct de_private *de) +static void __devinit de21040_get_media_info(struct de_private *de) { unsigned int i; @@ -1748,8 +1748,7 @@ static void de21040_get_media_info(struct de_private *de) } /* Note: this routine returns extra data bits for size detection. */ -static unsigned tulip_read_eeprom(void __iomem *regs, int location, - int addr_len) +static unsigned __devinit tulip_read_eeprom(void __iomem *regs, int location, int addr_len) { int i; unsigned retval = 0; @@ -1784,7 +1783,7 @@ static unsigned tulip_read_eeprom(void __iomem *regs, int location, return retval; } -static void de21041_get_srom_info(struct de_private *de) +static void __devinit de21041_get_srom_info (struct de_private *de) { unsigned i, sa_offset = 0, ofs; u8 ee_data[DE_EEPROM_SIZE + 6] = {}; @@ -1962,8 +1961,8 @@ static const struct net_device_ops de_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int de_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit de_init_one (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct net_device *dev; struct de_private *de; @@ -2100,7 +2099,7 @@ static int de_init_one(struct pci_dev *pdev, return rc; } -static void de_remove_one(struct pci_dev *pdev) +static void __devexit de_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct de_private *de = netdev_priv(dev); @@ -2185,7 +2184,7 @@ static struct pci_driver de_driver = { .name = DRV_NAME, .id_table = de_pci_tbl, .probe = de_init_one, - .remove = de_remove_one, + .remove = __devexit_p(de_remove_one), #ifdef CONFIG_PM .suspend = de_suspend, .resume = de_resume, diff --git a/trunk/drivers/net/ethernet/dec/tulip/de4x5.c b/trunk/drivers/net/ethernet/dec/tulip/de4x5.c index c411aedd8e60..f879e9224846 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/de4x5.c +++ b/trunk/drivers/net/ethernet/dec/tulip/de4x5.c @@ -479,7 +479,7 @@ #include "de4x5.h" -static const char version[] = +static const char version[] __devinitconst = KERN_INFO "de4x5.c:V0.546 2001/02/22 davies@maniac.ultranet.com\n"; #define c_char const char @@ -1092,7 +1092,7 @@ static const struct net_device_ops de4x5_netdev_ops = { }; -static int +static int __devinit de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev) { char name[DE4X5_NAME_LENGTH + 1]; @@ -2077,7 +2077,7 @@ static int __init de4x5_eisa_probe (struct device *gendev) return status; } -static int de4x5_eisa_remove(struct device *device) +static int __devexit de4x5_eisa_remove (struct device *device) { struct net_device *dev; u_long iobase; @@ -2104,7 +2104,7 @@ static struct eisa_driver de4x5_eisa_driver = { .driver = { .name = "de4x5", .probe = de4x5_eisa_probe, - .remove = de4x5_eisa_remove, + .remove = __devexit_p (de4x5_eisa_remove), } }; MODULE_DEVICE_TABLE(eisa, de4x5_eisa_ids); @@ -2118,7 +2118,7 @@ MODULE_DEVICE_TABLE(eisa, de4x5_eisa_ids); ** DECchips, we can find the base SROM irrespective of the BIOS scan direction. ** For single port cards this is a time waster... */ -static void +static void __devinit srom_search(struct net_device *dev, struct pci_dev *pdev) { u_char pb; @@ -2192,8 +2192,8 @@ srom_search(struct net_device *dev, struct pci_dev *pdev) ** kernels use the V0.535[n] drivers. */ -static int de4x5_pci_probe(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit de4x5_pci_probe (struct pci_dev *pdev, + const struct pci_device_id *ent) { u_char pb, pbus = 0, dev_num, dnum = 0, timer; u_short vendor, status; @@ -2314,7 +2314,7 @@ static int de4x5_pci_probe(struct pci_dev *pdev, return error; } -static void de4x5_pci_remove(struct pci_dev *pdev) +static void __devexit de4x5_pci_remove (struct pci_dev *pdev) { struct net_device *dev; u_long iobase; @@ -2344,7 +2344,7 @@ static struct pci_driver de4x5_pci_driver = { .name = "de4x5", .id_table = de4x5_pci_tbl, .probe = de4x5_pci_probe, - .remove = de4x5_pci_remove, + .remove = __devexit_p (de4x5_pci_remove), }; #endif diff --git a/trunk/drivers/net/ethernet/dec/tulip/dmfe.c b/trunk/drivers/net/ethernet/dec/tulip/dmfe.c index 56a8fe7d4ef2..d23755ea9bc7 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/dmfe.c +++ b/trunk/drivers/net/ethernet/dec/tulip/dmfe.c @@ -291,8 +291,8 @@ enum dmfe_CR6_bits { }; /* Global variable declaration ----------------------------- */ -static int printed_version; -static const char version[] = +static int __devinitdata printed_version; +static const char version[] __devinitconst = "Davicom DM9xxx net driver, version " DRV_VERSION " (" DRV_RELDATE ")"; static int dmfe_debug; @@ -367,8 +367,8 @@ static const struct net_device_ops netdev_ops = { * Search DM910X board ,allocate space and register it */ -static int dmfe_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit dmfe_init_one (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct dmfe_board_info *db; /* board information structure */ struct net_device *dev; @@ -531,7 +531,7 @@ static int dmfe_init_one(struct pci_dev *pdev, } -static void dmfe_remove_one(struct pci_dev *pdev) +static void __devexit dmfe_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct dmfe_board_info *db = netdev_priv(dev); @@ -2187,7 +2187,7 @@ static struct pci_driver dmfe_driver = { .name = "dmfe", .id_table = dmfe_pci_tbl, .probe = dmfe_init_one, - .remove = dmfe_remove_one, + .remove = __devexit_p(dmfe_remove_one), .suspend = dmfe_suspend, .resume = dmfe_resume }; diff --git a/trunk/drivers/net/ethernet/dec/tulip/eeprom.c b/trunk/drivers/net/ethernet/dec/tulip/eeprom.c index df5a892fb49c..44f7e8e82d85 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/eeprom.c +++ b/trunk/drivers/net/ethernet/dec/tulip/eeprom.c @@ -26,7 +26,7 @@ */ /* Known cards that have old-style EEPROMs. */ -static struct eeprom_fixup eeprom_fixups[] = { +static struct eeprom_fixup eeprom_fixups[] __devinitdata = { {"Asante", 0, 0, 0x94, {0x1e00, 0x0000, 0x0800, 0x0100, 0x018c, 0x0000, 0x0000, 0xe078, 0x0001, 0x0050, 0x0018 }}, {"SMC9332DST", 0, 0, 0xC0, { 0x1e00, 0x0000, 0x0800, 0x041f, @@ -79,7 +79,7 @@ static struct eeprom_fixup eeprom_fixups[] = { {NULL}}; -static const char *const block_name[] = { +static const char *const block_name[] __devinitconst = { "21140 non-MII", "21140 MII PHY", "21142 Serial PHY", @@ -102,7 +102,7 @@ static const char *const block_name[] = { * #ifdef __hppa__ should completely optimize this function away for * non-parisc hardware. */ -static void tulip_build_fake_mediatable(struct tulip_private *tp) +static void __devinit tulip_build_fake_mediatable(struct tulip_private *tp) { #ifdef CONFIG_GSC if (tp->flags & NEEDS_FAKE_MEDIA_TABLE) { @@ -140,7 +140,7 @@ static void tulip_build_fake_mediatable(struct tulip_private *tp) #endif } -void tulip_parse_eeprom(struct net_device *dev) +void __devinit tulip_parse_eeprom(struct net_device *dev) { /* dev is not registered at this point, so logging messages can't @@ -339,7 +339,7 @@ void tulip_parse_eeprom(struct net_device *dev) #define EE_READ_CMD (6) /* Note: this routine returns extra data bits for size detection. */ -int tulip_read_eeprom(struct net_device *dev, int location, int addr_len) +int __devinit tulip_read_eeprom(struct net_device *dev, int location, int addr_len) { int i; unsigned retval = 0; diff --git a/trunk/drivers/net/ethernet/dec/tulip/media.c b/trunk/drivers/net/ethernet/dec/tulip/media.c index 93a4afaa09f1..ae937c6749e7 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/media.c +++ b/trunk/drivers/net/ethernet/dec/tulip/media.c @@ -447,7 +447,7 @@ int tulip_check_duplex(struct net_device *dev) return 0; } -void tulip_find_mii(struct net_device *dev, int board_idx) +void __devinit tulip_find_mii (struct net_device *dev, int board_idx) { struct tulip_private *tp = netdev_priv(dev); int phyn, phy_idx = 0; diff --git a/trunk/drivers/net/ethernet/dec/tulip/tulip_core.c b/trunk/drivers/net/ethernet/dec/tulip/tulip_core.c index 157c8e6e93f9..885700a19978 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/tulip_core.c +++ b/trunk/drivers/net/ethernet/dec/tulip/tulip_core.c @@ -37,7 +37,7 @@ #include #endif -static char version[] = +static char version[] __devinitdata = "Linux Tulip driver version " DRV_VERSION " (" DRV_RELDATE ")\n"; /* A few user-configurable values. */ @@ -1191,8 +1191,8 @@ static void set_rx_mode(struct net_device *dev) } #ifdef CONFIG_TULIP_MWI -static void tulip_mwi_config(struct pci_dev *pdev, - struct net_device *dev) +static void __devinit tulip_mwi_config (struct pci_dev *pdev, + struct net_device *dev) { struct tulip_private *tp = netdev_priv(dev); u8 cache; @@ -1301,8 +1301,8 @@ DEFINE_PCI_DEVICE_TABLE(early_486_chipsets) = { { }, }; -static int tulip_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit tulip_init_one (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct tulip_private *tp; /* See note below on the multiport cards. */ @@ -1927,7 +1927,7 @@ static int tulip_resume(struct pci_dev *pdev) #endif /* CONFIG_PM */ -static void tulip_remove_one(struct pci_dev *pdev) +static void __devexit tulip_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata (pdev); struct tulip_private *tp; @@ -1974,7 +1974,7 @@ static struct pci_driver tulip_driver = { .name = DRV_NAME, .id_table = tulip_pci_tbl, .probe = tulip_init_one, - .remove = tulip_remove_one, + .remove = __devexit_p(tulip_remove_one), #ifdef CONFIG_PM .suspend = tulip_suspend, .resume = tulip_resume, diff --git a/trunk/drivers/net/ethernet/dec/tulip/uli526x.c b/trunk/drivers/net/ethernet/dec/tulip/uli526x.c index 93845afe1cea..75d45f8a37dc 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/uli526x.c +++ b/trunk/drivers/net/ethernet/dec/tulip/uli526x.c @@ -204,8 +204,8 @@ enum uli526x_CR6_bits { }; /* Global variable declaration ----------------------------- */ -static int printed_version; -static const char version[] = +static int __devinitdata printed_version; +static const char version[] __devinitconst = "ULi M5261/M5263 net driver, version " DRV_VERSION " (" DRV_RELDATE ")"; static int uli526x_debug; @@ -281,8 +281,8 @@ static const struct net_device_ops netdev_ops = { * Search ULI526X board, allocate space and register it */ -static int uli526x_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit uli526x_init_one (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct uli526x_board_info *db; /* board information structure */ struct net_device *dev; @@ -436,7 +436,7 @@ static int uli526x_init_one(struct pci_dev *pdev, } -static void uli526x_remove_one(struct pci_dev *pdev) +static void __devexit uli526x_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct uli526x_board_info *db = netdev_priv(dev); @@ -1788,7 +1788,7 @@ static struct pci_driver uli526x_driver = { .name = "uli526x", .id_table = uli526x_pci_tbl, .probe = uli526x_init_one, - .remove = uli526x_remove_one, + .remove = __devexit_p(uli526x_remove_one), .suspend = uli526x_suspend, .resume = uli526x_resume, }; diff --git a/trunk/drivers/net/ethernet/dec/tulip/winbond-840.c b/trunk/drivers/net/ethernet/dec/tulip/winbond-840.c index 0a1bda857e76..7c1ec4d7920b 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/winbond-840.c +++ b/trunk/drivers/net/ethernet/dec/tulip/winbond-840.c @@ -236,7 +236,7 @@ struct pci_id_info { int drv_flags; /* Driver use, intended as capability flags. */ }; -static const struct pci_id_info pci_id_tbl[] = { +static const struct pci_id_info pci_id_tbl[] __devinitconst = { { /* Sometime a Level-One switch card. */ "Winbond W89c840", CanHaveMII | HasBrokenTx | FDXOnNoMII}, { "Winbond W89c840", CanHaveMII | HasBrokenTx}, @@ -358,8 +358,8 @@ static const struct net_device_ops netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int w840_probe1(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit w840_probe1 (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct net_device *dev; struct netdev_private *np; @@ -1532,7 +1532,7 @@ static int netdev_close(struct net_device *dev) return 0; } -static void w840_remove1(struct pci_dev *pdev) +static void __devexit w840_remove1 (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -1647,7 +1647,7 @@ static struct pci_driver w840_driver = { .name = DRV_NAME, .id_table = w840_pci_tbl, .probe = w840_probe1, - .remove = w840_remove1, + .remove = __devexit_p(w840_remove1), #ifdef CONFIG_PM .suspend = w840_suspend, .resume = w840_resume, diff --git a/trunk/drivers/net/ethernet/dec/tulip/xircom_cb.c b/trunk/drivers/net/ethernet/dec/tulip/xircom_cb.c index 88feced9a629..138bf83bc98e 100644 --- a/trunk/drivers/net/ethernet/dec/tulip/xircom_cb.c +++ b/trunk/drivers/net/ethernet/dec/tulip/xircom_cb.c @@ -148,7 +148,7 @@ static struct pci_driver xircom_ops = { .name = "xircom_cb", .id_table = xircom_pci_table, .probe = xircom_probe, - .remove = xircom_remove, + .remove = __devexit_p(xircom_remove), }; @@ -190,7 +190,7 @@ static const struct net_device_ops netdev_ops = { first two packets that get send, and pump hates that. */ -static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id) +static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct device *d = &pdev->dev; struct net_device *dev = NULL; @@ -312,7 +312,7 @@ static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id) Interrupts and such are already stopped in the "ifconfig ethX down" code. */ -static void xircom_remove(struct pci_dev *pdev) +static void __devexit xircom_remove(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct xircom_private *card = netdev_priv(dev); diff --git a/trunk/drivers/net/ethernet/dlink/dl2k.c b/trunk/drivers/net/ethernet/dlink/dl2k.c index 1d342d37915c..2fb01bf18155 100644 --- a/trunk/drivers/net/ethernet/dlink/dl2k.c +++ b/trunk/drivers/net/ethernet/dlink/dl2k.c @@ -23,7 +23,7 @@ #define dr16(reg) ioread16(ioaddr + (reg)) #define dr8(reg) ioread8(ioaddr + (reg)) -static char version[] = +static char version[] __devinitdata = KERN_INFO DRV_NAME " " DRV_VERSION " " DRV_RELDATE "\n"; #define MAX_UNITS 8 static int mtu[MAX_UNITS]; @@ -110,7 +110,7 @@ static const struct net_device_ops netdev_ops = { .ndo_change_mtu = change_mtu, }; -static int +static int __devinit rio_probe1 (struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; @@ -1727,7 +1727,7 @@ rio_close (struct net_device *dev) return 0; } -static void +static void __devexit rio_remove1 (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata (pdev); @@ -1755,7 +1755,7 @@ static struct pci_driver rio_driver = { .name = "dl2k", .id_table = rio_pci_tbl, .probe = rio_probe1, - .remove = rio_remove1, + .remove = __devexit_p(rio_remove1), }; module_pci_driver(rio_driver); diff --git a/trunk/drivers/net/ethernet/dlink/sundance.c b/trunk/drivers/net/ethernet/dlink/sundance.c index 28fc11b2f1ea..3b83588e51f6 100644 --- a/trunk/drivers/net/ethernet/dlink/sundance.c +++ b/trunk/drivers/net/ethernet/dlink/sundance.c @@ -102,7 +102,7 @@ static char *media[MAX_UNITS]; #include /* These identify the driver base version and may not be removed. */ -static const char version[] = +static const char version[] __devinitconst = KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Written by Donald Becker\n"; @@ -218,7 +218,7 @@ enum { struct pci_id_info { const char *name; }; -static const struct pci_id_info pci_id_tbl[] = { +static const struct pci_id_info pci_id_tbl[] __devinitconst = { {"D-Link DFE-550TX FAST Ethernet Adapter"}, {"D-Link DFE-550FX 100Mbps Fiber-optics Adapter"}, {"D-Link DFE-580TX 4 port Server Adapter"}, @@ -259,7 +259,6 @@ enum alta_offsets { EECtrl = 0x36, FlashAddr = 0x40, FlashData = 0x44, - WakeEvent = 0x45, TxStatus = 0x46, TxFrameId = 0x47, DownCounter = 0x18, @@ -334,14 +333,6 @@ enum mac_ctrl1_bits { RxEnable=0x0800, RxDisable=0x1000, RxEnabled=0x2000, }; -/* Bits in WakeEvent register. */ -enum wake_event_bits { - WakePktEnable = 0x01, - MagicPktEnable = 0x02, - LinkEventEnable = 0x04, - WolEnable = 0x80, -}; - /* The Rx and Tx buffer descriptors. */ /* Note that using only 32 bit fields simplifies conversion to big-endian architectures. */ @@ -401,7 +392,6 @@ struct netdev_private { unsigned int default_port:4; /* Last dev->if_port value. */ unsigned int an_enable:1; unsigned int speed; - unsigned int wol_enabled:1; /* Wake on LAN enabled */ struct tasklet_struct rx_tasklet; struct tasklet_struct tx_tasklet; int budget; @@ -482,8 +472,8 @@ static const struct net_device_ops netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int sundance_probe1(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit sundance_probe1 (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct net_device *dev; struct netdev_private *np; @@ -711,7 +701,7 @@ static int change_mtu(struct net_device *dev, int new_mtu) #define eeprom_delay(ee_addr) ioread32(ee_addr) /* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. */ -static int eeprom_read(void __iomem *ioaddr, int location) +static int __devinit eeprom_read(void __iomem *ioaddr, int location) { int boguscnt = 10000; /* Typical 1900 ticks. */ iowrite16(0x0200 | (location & 0xff), ioaddr + EECtrl); @@ -839,7 +829,7 @@ static int netdev_open(struct net_device *dev) unsigned long flags; int i; - sundance_reset(dev, 0x00ff << 16); + /* Do we need to reset the chip??? */ i = request_irq(irq, intr_handler, IRQF_SHARED, dev->name, dev); if (i) @@ -887,10 +877,6 @@ static int netdev_open(struct net_device *dev) iowrite16 (StatsEnable | RxEnable | TxEnable, ioaddr + MACCtrl1); - /* Disable Wol */ - iowrite8(ioread8(ioaddr + WakeEvent) | 0x00, ioaddr + WakeEvent); - np->wol_enabled = 0; - if (netif_msg_ifup(np)) printk(KERN_DEBUG "%s: Done netdev_open(), status: Rx %x Tx %x " "MAC Control %x, %4.4x %4.4x.\n", @@ -1729,60 +1715,6 @@ static void get_ethtool_stats(struct net_device *dev, data[i++] = np->xstats.rx_mcasts; } -#ifdef CONFIG_PM - -static void sundance_get_wol(struct net_device *dev, - struct ethtool_wolinfo *wol) -{ - struct netdev_private *np = netdev_priv(dev); - void __iomem *ioaddr = np->base; - u8 wol_bits; - - wol->wolopts = 0; - - wol->supported = (WAKE_PHY | WAKE_MAGIC); - if (!np->wol_enabled) - return; - - wol_bits = ioread8(ioaddr + WakeEvent); - if (wol_bits & MagicPktEnable) - wol->wolopts |= WAKE_MAGIC; - if (wol_bits & LinkEventEnable) - wol->wolopts |= WAKE_PHY; -} - -static int sundance_set_wol(struct net_device *dev, - struct ethtool_wolinfo *wol) -{ - struct netdev_private *np = netdev_priv(dev); - void __iomem *ioaddr = np->base; - u8 wol_bits; - - if (!device_can_wakeup(&np->pci_dev->dev)) - return -EOPNOTSUPP; - - np->wol_enabled = !!(wol->wolopts); - wol_bits = ioread8(ioaddr + WakeEvent); - wol_bits &= ~(WakePktEnable | MagicPktEnable | - LinkEventEnable | WolEnable); - - if (np->wol_enabled) { - if (wol->wolopts & WAKE_MAGIC) - wol_bits |= (MagicPktEnable | WolEnable); - if (wol->wolopts & WAKE_PHY) - wol_bits |= (LinkEventEnable | WolEnable); - } - iowrite8(wol_bits, ioaddr + WakeEvent); - - device_set_wakeup_enable(&np->pci_dev->dev, np->wol_enabled); - - return 0; -} -#else -#define sundance_get_wol NULL -#define sundance_set_wol NULL -#endif /* CONFIG_PM */ - static const struct ethtool_ops ethtool_ops = { .begin = check_if_running, .get_drvinfo = get_drvinfo, @@ -1790,8 +1722,6 @@ static const struct ethtool_ops ethtool_ops = { .set_settings = set_settings, .nway_reset = nway_reset, .get_link = get_link, - .get_wol = sundance_get_wol, - .set_wol = sundance_set_wol, .get_msglevel = get_msglevel, .set_msglevel = set_msglevel, .get_strings = get_strings, @@ -1914,7 +1844,7 @@ static int netdev_close(struct net_device *dev) return 0; } -static void sundance_remove1(struct pci_dev *pdev) +static void __devexit sundance_remove1 (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -1937,8 +1867,6 @@ static void sundance_remove1(struct pci_dev *pdev) static int sundance_suspend(struct pci_dev *pci_dev, pm_message_t state) { struct net_device *dev = pci_get_drvdata(pci_dev); - struct netdev_private *np = netdev_priv(dev); - void __iomem *ioaddr = np->base; if (!netif_running(dev)) return 0; @@ -1947,12 +1875,6 @@ static int sundance_suspend(struct pci_dev *pci_dev, pm_message_t state) netif_device_detach(dev); pci_save_state(pci_dev); - if (np->wol_enabled) { - iowrite8(AcceptBroadcast | AcceptMyPhys, ioaddr + RxMode); - iowrite16(RxEnable, ioaddr + MACCtrl1); - } - pci_enable_wake(pci_dev, pci_choose_state(pci_dev, state), - np->wol_enabled); pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state)); return 0; @@ -1968,7 +1890,6 @@ static int sundance_resume(struct pci_dev *pci_dev) pci_set_power_state(pci_dev, PCI_D0); pci_restore_state(pci_dev); - pci_enable_wake(pci_dev, PCI_D0, 0); err = netdev_open(dev); if (err) { @@ -1989,7 +1910,7 @@ static struct pci_driver sundance_driver = { .name = DRV_NAME, .id_table = sundance_pci_tbl, .probe = sundance_probe1, - .remove = sundance_remove1, + .remove = __devexit_p(sundance_remove1), #ifdef CONFIG_PM .suspend = sundance_suspend, .resume = sundance_resume, diff --git a/trunk/drivers/net/ethernet/dnet.c b/trunk/drivers/net/ethernet/dnet.c index 2c177b329c8b..feb5095d81b7 100644 --- a/trunk/drivers/net/ethernet/dnet.c +++ b/trunk/drivers/net/ethernet/dnet.c @@ -72,7 +72,7 @@ static void __dnet_set_hwaddr(struct dnet *bp) dnet_writew_mac(bp, DNET_INTERNAL_MAC_ADDR_2_REG, tmp); } -static void dnet_get_hwaddr(struct dnet *bp) +static void __devinit dnet_get_hwaddr(struct dnet *bp) { u16 tmp; u8 addr[6]; @@ -826,7 +826,7 @@ static const struct net_device_ops dnet_netdev_ops = { .ndo_change_mtu = eth_change_mtu, }; -static int dnet_probe(struct platform_device *pdev) +static int __devinit dnet_probe(struct platform_device *pdev) { struct resource *res; struct net_device *dev; @@ -942,7 +942,7 @@ static int dnet_probe(struct platform_device *pdev) return err; } -static int dnet_remove(struct platform_device *pdev) +static int __devexit dnet_remove(struct platform_device *pdev) { struct net_device *dev; @@ -968,7 +968,7 @@ static int dnet_remove(struct platform_device *pdev) static struct platform_driver dnet_driver = { .probe = dnet_probe, - .remove = dnet_remove, + .remove = __devexit_p(dnet_remove), .driver = { .name = "dnet", }, diff --git a/trunk/drivers/net/ethernet/emulex/benet/be_main.c b/trunk/drivers/net/ethernet/emulex/benet/be_main.c index b003abc24227..0661e9379583 100644 --- a/trunk/drivers/net/ethernet/emulex/benet/be_main.c +++ b/trunk/drivers/net/ethernet/emulex/benet/be_main.c @@ -3761,7 +3761,7 @@ static int be_stats_init(struct be_adapter *adapter) return 0; } -static void be_remove(struct pci_dev *pdev) +static void __devexit be_remove(struct pci_dev *pdev) { struct be_adapter *adapter = pci_get_drvdata(pdev); @@ -3994,7 +3994,7 @@ static inline char *func_name(struct be_adapter *adapter) return be_physfn(adapter) ? "PF" : "VF"; } -static int be_probe(struct pci_dev *pdev, +static int __devinit be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id) { int status = 0; diff --git a/trunk/drivers/net/ethernet/ethoc.c b/trunk/drivers/net/ethernet/ethoc.c index 8db1c06008de..94b7bfcdb24e 100644 --- a/trunk/drivers/net/ethernet/ethoc.c +++ b/trunk/drivers/net/ethernet/ethoc.c @@ -665,7 +665,7 @@ static void ethoc_mdio_poll(struct net_device *dev) { } -static int ethoc_mdio_probe(struct net_device *dev) +static int __devinit ethoc_mdio_probe(struct net_device *dev) { struct ethoc *priv = netdev_priv(dev); struct phy_device *phy; @@ -905,7 +905,7 @@ static const struct net_device_ops ethoc_netdev_ops = { * ethoc_probe - initialize OpenCores ethernet MAC * pdev: platform device */ -static int ethoc_probe(struct platform_device *pdev) +static int __devinit ethoc_probe(struct platform_device *pdev) { struct net_device *netdev = NULL; struct resource *res = NULL; @@ -1143,7 +1143,7 @@ static int ethoc_probe(struct platform_device *pdev) * ethoc_remove - shutdown OpenCores ethernet MAC * @pdev: platform device */ -static int ethoc_remove(struct platform_device *pdev) +static int __devexit ethoc_remove(struct platform_device *pdev) { struct net_device *netdev = platform_get_drvdata(pdev); struct ethoc *priv = netdev_priv(netdev); @@ -1190,7 +1190,7 @@ MODULE_DEVICE_TABLE(of, ethoc_match); static struct platform_driver ethoc_driver = { .probe = ethoc_probe, - .remove = ethoc_remove, + .remove = __devexit_p(ethoc_remove), .suspend = ethoc_suspend, .resume = ethoc_resume, .driver = { diff --git a/trunk/drivers/net/ethernet/fealnx.c b/trunk/drivers/net/ethernet/fealnx.c index 519c2895e8f7..0e4a0ac86aa8 100644 --- a/trunk/drivers/net/ethernet/fealnx.c +++ b/trunk/drivers/net/ethernet/fealnx.c @@ -92,7 +92,7 @@ static int full_duplex[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; #include /* These identify the driver base version and may not be removed. */ -static const char version[] = +static const char version[] __devinitconst = KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE "\n"; @@ -150,7 +150,7 @@ struct chip_info { int flags; }; -static const struct chip_info skel_netdrv_tbl[] = { +static const struct chip_info skel_netdrv_tbl[] __devinitconst = { { "100/10M Ethernet PCI Adapter", HAS_MII_XCVR }, { "100/10M Ethernet PCI Adapter", HAS_CHIP_XCVR }, { "1000/100/10M Ethernet PCI Adapter", HAS_MII_XCVR }, @@ -477,7 +477,7 @@ static const struct net_device_ops netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int fealnx_init_one(struct pci_dev *pdev, +static int __devinit fealnx_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct netdev_private *np; @@ -684,7 +684,7 @@ static int fealnx_init_one(struct pci_dev *pdev, } -static void fealnx_remove_one(struct pci_dev *pdev) +static void __devexit fealnx_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -1950,7 +1950,7 @@ static struct pci_driver fealnx_driver = { .name = "fealnx", .id_table = fealnx_pci_tbl, .probe = fealnx_init_one, - .remove = fealnx_remove_one, + .remove = __devexit_p(fealnx_remove_one), }; static int __init fealnx_init(void) diff --git a/trunk/drivers/net/ethernet/freescale/fec.c b/trunk/drivers/net/ethernet/freescale/fec.c index 0704bcab178a..2665162ff4e5 100644 --- a/trunk/drivers/net/ethernet/freescale/fec.c +++ b/trunk/drivers/net/ethernet/freescale/fec.c @@ -1484,7 +1484,7 @@ static int fec_enet_init(struct net_device *ndev) } #ifdef CONFIG_OF -static int fec_get_phy_mode_dt(struct platform_device *pdev) +static int __devinit fec_get_phy_mode_dt(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; @@ -1494,7 +1494,7 @@ static int fec_get_phy_mode_dt(struct platform_device *pdev) return -ENODEV; } -static void fec_reset_phy(struct platform_device *pdev) +static void __devinit fec_reset_phy(struct platform_device *pdev) { int err, phy_reset; int msec = 1; @@ -1533,7 +1533,7 @@ static inline void fec_reset_phy(struct platform_device *pdev) } #endif /* CONFIG_OF */ -static int +static int __devinit fec_probe(struct platform_device *pdev) { struct fec_enet_private *fep; @@ -1701,7 +1701,7 @@ fec_probe(struct platform_device *pdev) return ret; } -static int +static int __devexit fec_drv_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); @@ -1790,7 +1790,7 @@ static struct platform_driver fec_driver = { }, .id_table = fec_devtype, .probe = fec_probe, - .remove = fec_drv_remove, + .remove = __devexit_p(fec_drv_remove), }; module_platform_driver(fec_driver); diff --git a/trunk/drivers/net/ethernet/freescale/fec_mpc52xx.c b/trunk/drivers/net/ethernet/freescale/fec_mpc52xx.c index 817d081d2cd8..2933d08b036e 100644 --- a/trunk/drivers/net/ethernet/freescale/fec_mpc52xx.c +++ b/trunk/drivers/net/ethernet/freescale/fec_mpc52xx.c @@ -845,7 +845,7 @@ static const struct net_device_ops mpc52xx_fec_netdev_ops = { /* OF Driver */ /* ======================================================================== */ -static int mpc52xx_fec_probe(struct platform_device *op) +static int __devinit mpc52xx_fec_probe(struct platform_device *op) { int rv; struct net_device *ndev; diff --git a/trunk/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c b/trunk/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c index e9879c5af7ba..2b7633f766d9 100644 --- a/trunk/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c +++ b/trunk/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c @@ -1004,7 +1004,7 @@ static const struct net_device_ops fs_enet_netdev_ops = { }; static struct of_device_id fs_enet_match[]; -static int fs_enet_probe(struct platform_device *ofdev) +static int __devinit fs_enet_probe(struct platform_device *ofdev) { const struct of_device_id *match; struct net_device *ndev; diff --git a/trunk/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c b/trunk/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c index 3f35b6a983e9..151453309401 100644 --- a/trunk/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c +++ b/trunk/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c @@ -108,7 +108,7 @@ static struct mdiobb_ops bb_ops = { .get_mdio_data = mdio_read, }; -static int fs_mii_bitbang_init(struct mii_bus *bus, +static int __devinit fs_mii_bitbang_init(struct mii_bus *bus, struct device_node *np) { struct resource res; @@ -150,7 +150,7 @@ static int fs_mii_bitbang_init(struct mii_bus *bus, return 0; } -static int fs_enet_mdio_probe(struct platform_device *ofdev) +static int __devinit fs_enet_mdio_probe(struct platform_device *ofdev) { struct mii_bus *new_bus; struct bb_info *bitbang; diff --git a/trunk/drivers/net/ethernet/freescale/fs_enet/mii-fec.c b/trunk/drivers/net/ethernet/freescale/fs_enet/mii-fec.c index 18e8ef203736..cdf702a59485 100644 --- a/trunk/drivers/net/ethernet/freescale/fs_enet/mii-fec.c +++ b/trunk/drivers/net/ethernet/freescale/fs_enet/mii-fec.c @@ -102,7 +102,7 @@ static int fs_enet_fec_mii_reset(struct mii_bus *bus) } static struct of_device_id fs_enet_mdio_fec_match[]; -static int fs_enet_mdio_probe(struct platform_device *ofdev) +static int __devinit fs_enet_mdio_probe(struct platform_device *ofdev) { const struct of_device_id *match; struct resource res; diff --git a/trunk/drivers/net/ethernet/freescale/xgmac_mdio.c b/trunk/drivers/net/ethernet/freescale/xgmac_mdio.c index 418068b941b1..1afb5ea2a984 100644 --- a/trunk/drivers/net/ethernet/freescale/xgmac_mdio.c +++ b/trunk/drivers/net/ethernet/freescale/xgmac_mdio.c @@ -189,7 +189,7 @@ static int xgmac_mdio_reset(struct mii_bus *bus) return ret; } -static int xgmac_mdio_probe(struct platform_device *pdev) +static int __devinit xgmac_mdio_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; struct mii_bus *bus; @@ -240,7 +240,7 @@ static int xgmac_mdio_probe(struct platform_device *pdev) return ret; } -static int xgmac_mdio_remove(struct platform_device *pdev) +static int __devexit xgmac_mdio_remove(struct platform_device *pdev) { struct mii_bus *bus = dev_get_drvdata(&pdev->dev); diff --git a/trunk/drivers/net/ethernet/hp/hp100.c b/trunk/drivers/net/ethernet/hp/hp100.c index 598e576ddf51..3f4391bede81 100644 --- a/trunk/drivers/net/ethernet/hp/hp100.c +++ b/trunk/drivers/net/ethernet/hp/hp100.c @@ -308,7 +308,7 @@ static void wait(void) * Read board id and convert to string. * Effectively same code as decode_eisa_sig */ -static const char *hp100_read_id(int ioaddr) +static __devinit const char *hp100_read_id(int ioaddr) { int i; static char str[HP100_SIG_LEN]; @@ -447,7 +447,7 @@ static const struct net_device_ops hp100_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int hp100_probe1(struct net_device *dev, int ioaddr, +static int __devinit hp100_probe1(struct net_device *dev, int ioaddr, u_char bus, struct pci_dev *pci_dev) { int i; @@ -2866,7 +2866,7 @@ static int __init hp100_eisa_probe (struct device *gendev) return err; } -static int hp100_eisa_remove(struct device *gendev) +static int __devexit hp100_eisa_remove (struct device *gendev) { struct net_device *dev = dev_get_drvdata(gendev); cleanup_dev(dev); @@ -2878,14 +2878,14 @@ static struct eisa_driver hp100_eisa_driver = { .driver = { .name = "hp100", .probe = hp100_eisa_probe, - .remove = hp100_eisa_remove, + .remove = __devexit_p (hp100_eisa_remove), } }; #endif #ifdef CONFIG_PCI -static int hp100_pci_probe(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit hp100_pci_probe (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct net_device *dev; int ioaddr; @@ -2937,7 +2937,7 @@ static int hp100_pci_probe(struct pci_dev *pdev, return err; } -static void hp100_pci_remove(struct pci_dev *pdev) +static void __devexit hp100_pci_remove (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -2950,7 +2950,7 @@ static struct pci_driver hp100_pci_driver = { .name = "hp100", .id_table = hp100_pci_tbl, .probe = hp100_pci_probe, - .remove = hp100_pci_remove, + .remove = __devexit_p(hp100_pci_remove), }; #endif diff --git a/trunk/drivers/net/ethernet/i825xx/ether1.c b/trunk/drivers/net/ethernet/i825xx/ether1.c index 5d353c660068..7b9609da6fe4 100644 --- a/trunk/drivers/net/ethernet/i825xx/ether1.c +++ b/trunk/drivers/net/ethernet/i825xx/ether1.c @@ -72,7 +72,7 @@ static void ether1_timeout(struct net_device *dev); /* ------------------------------------------------------------------------- */ -static char version[] = "ether1 ethernet driver (c) 2000 Russell King v1.07\n"; +static char version[] __devinitdata = "ether1 ethernet driver (c) 2000 Russell King v1.07\n"; #define BUS_16 16 #define BUS_8 8 @@ -250,7 +250,7 @@ ether1_readbuffer (struct net_device *dev, void *data, unsigned int start, unsig } while (thislen); } -static int +static int __devinit ether1_ramtest(struct net_device *dev, unsigned char byte) { unsigned char *buffer = kmalloc (BUFFER_SIZE, GFP_KERNEL); @@ -304,7 +304,7 @@ ether1_reset (struct net_device *dev) return BUS_16; } -static int +static int __devinit ether1_init_2(struct net_device *dev) { int i; @@ -966,7 +966,7 @@ ether1_setmulticastlist (struct net_device *dev) /* ------------------------------------------------------------------------- */ -static void ether1_banner(void) +static void __devinit ether1_banner(void) { static unsigned int version_printed = 0; @@ -985,7 +985,7 @@ static const struct net_device_ops ether1_netdev_ops = { .ndo_set_mac_address = eth_mac_addr, }; -static int +static int __devinit ether1_probe(struct expansion_card *ec, const struct ecard_id *id) { struct net_device *dev; @@ -1046,7 +1046,7 @@ ether1_probe(struct expansion_card *ec, const struct ecard_id *id) return ret; } -static void ether1_remove(struct expansion_card *ec) +static void __devexit ether1_remove(struct expansion_card *ec) { struct net_device *dev = ecard_get_drvdata(ec); @@ -1064,7 +1064,7 @@ static const struct ecard_id ether1_ids[] = { static struct ecard_driver ether1_driver = { .probe = ether1_probe, - .remove = ether1_remove, + .remove = __devexit_p(ether1_remove), .id_table = ether1_ids, .drv = { .name = "ether1", diff --git a/trunk/drivers/net/ethernet/i825xx/lasi_82596.c b/trunk/drivers/net/ethernet/i825xx/lasi_82596.c index f42f1b707733..6eba352c52e0 100644 --- a/trunk/drivers/net/ethernet/i825xx/lasi_82596.c +++ b/trunk/drivers/net/ethernet/i825xx/lasi_82596.c @@ -150,7 +150,7 @@ static void mpu_port(struct net_device *dev, int c, dma_addr_t x) #define LAN_PROM_ADDR 0xF0810000 -static int +static int __devinit lan_init_chip(struct parisc_device *dev) { struct net_device *netdevice; @@ -195,7 +195,7 @@ lan_init_chip(struct parisc_device *dev) return retval; } -static int lan_remove_chip(struct parisc_device *pdev) +static int __devexit lan_remove_chip (struct parisc_device *pdev) { struct net_device *dev = parisc_get_drvdata(pdev); struct i596_private *lp = netdev_priv(dev); @@ -219,10 +219,10 @@ static struct parisc_driver lan_driver = { .name = "lasi_82596", .id_table = lan_tbl, .probe = lan_init_chip, - .remove = lan_remove_chip, + .remove = __devexit_p(lan_remove_chip), }; -static int lasi_82596_init(void) +static int __devinit lasi_82596_init(void) { printk(KERN_INFO LASI_82596_DRIVER_VERSION "\n"); return register_parisc_driver(&lan_driver); diff --git a/trunk/drivers/net/ethernet/i825xx/lib82596.c b/trunk/drivers/net/ethernet/i825xx/lib82596.c index f045ea4dc514..3efbd8dbb63d 100644 --- a/trunk/drivers/net/ethernet/i825xx/lib82596.c +++ b/trunk/drivers/net/ethernet/i825xx/lib82596.c @@ -1048,7 +1048,7 @@ static const struct net_device_ops i596_netdev_ops = { #endif }; -static int i82596_probe(struct net_device *dev) +static int __devinit i82596_probe(struct net_device *dev) { int i; struct i596_private *lp = netdev_priv(dev); diff --git a/trunk/drivers/net/ethernet/i825xx/sni_82596.c b/trunk/drivers/net/ethernet/i825xx/sni_82596.c index 4ceae9a30274..6b2a88817473 100644 --- a/trunk/drivers/net/ethernet/i825xx/sni_82596.c +++ b/trunk/drivers/net/ethernet/i825xx/sni_82596.c @@ -75,7 +75,7 @@ static void mpu_port(struct net_device *dev, int c, dma_addr_t x) } -static int sni_82596_probe(struct platform_device *dev) +static int __devinit sni_82596_probe(struct platform_device *dev) { struct net_device *netdevice; struct i596_private *lp; @@ -147,7 +147,7 @@ static int sni_82596_probe(struct platform_device *dev) return retval; } -static int sni_82596_driver_remove(struct platform_device *pdev) +static int __devexit sni_82596_driver_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct i596_private *lp = netdev_priv(dev); @@ -163,14 +163,14 @@ static int sni_82596_driver_remove(struct platform_device *pdev) static struct platform_driver sni_82596_driver = { .probe = sni_82596_probe, - .remove = sni_82596_driver_remove, + .remove = __devexit_p(sni_82596_driver_remove), .driver = { .name = sni_82596_string, .owner = THIS_MODULE, }, }; -static int sni_82596_init(void) +static int __devinit sni_82596_init(void) { printk(KERN_INFO SNI_82596_DRIVER_VERSION "\n"); return platform_driver_register(&sni_82596_driver); diff --git a/trunk/drivers/net/ethernet/ibm/ehea/ehea_main.c b/trunk/drivers/net/ethernet/ibm/ehea/ehea_main.c index e238130574ca..09faf333e941 100644 --- a/trunk/drivers/net/ethernet/ibm/ehea/ehea_main.c +++ b/trunk/drivers/net/ethernet/ibm/ehea/ehea_main.c @@ -98,10 +98,10 @@ static struct ehea_fw_handle_array ehea_fw_handles; static struct ehea_bcmc_reg_array ehea_bcmc_regs; -static int ehea_probe_adapter(struct platform_device *dev, +static int __devinit ehea_probe_adapter(struct platform_device *dev, const struct of_device_id *id); -static int ehea_remove(struct platform_device *dev); +static int __devexit ehea_remove(struct platform_device *dev); static struct of_device_id ehea_device_table[] = { { @@ -2909,7 +2909,7 @@ static ssize_t ehea_show_port_id(struct device *dev, static DEVICE_ATTR(log_port_id, S_IRUSR | S_IRGRP | S_IROTH, ehea_show_port_id, NULL); -static void logical_port_release(struct device *dev) +static void __devinit logical_port_release(struct device *dev) { struct ehea_port *port = container_of(dev, struct ehea_port, ofdev.dev); of_node_put(port->ofdev.dev.of_node); @@ -3257,7 +3257,7 @@ static void ehea_remove_device_sysfs(struct platform_device *dev) device_remove_file(&dev->dev, &dev_attr_remove_port); } -static int ehea_probe_adapter(struct platform_device *dev, +static int __devinit ehea_probe_adapter(struct platform_device *dev, const struct of_device_id *id) { struct ehea_adapter *adapter; @@ -3364,7 +3364,7 @@ static int ehea_probe_adapter(struct platform_device *dev, return ret; } -static int ehea_remove(struct platform_device *dev) +static int __devexit ehea_remove(struct platform_device *dev) { struct ehea_adapter *adapter = dev_get_drvdata(&dev->dev); int i; diff --git a/trunk/drivers/net/ethernet/ibm/emac/core.c b/trunk/drivers/net/ethernet/ibm/emac/core.c index c791ad3907b2..a0fe6e3fce61 100644 --- a/trunk/drivers/net/ethernet/ibm/emac/core.c +++ b/trunk/drivers/net/ethernet/ibm/emac/core.c @@ -2261,7 +2261,7 @@ struct emac_depentry { #define EMAC_DEP_PREV_IDX 5 #define EMAC_DEP_COUNT 6 -static int emac_check_deps(struct emac_instance *dev, +static int __devinit emac_check_deps(struct emac_instance *dev, struct emac_depentry *deps) { int i, there = 0; @@ -2314,7 +2314,7 @@ static void emac_put_deps(struct emac_instance *dev) of_dev_put(dev->tah_dev); } -static int emac_of_bus_notify(struct notifier_block *nb, +static int __devinit emac_of_bus_notify(struct notifier_block *nb, unsigned long action, void *data) { /* We are only intereted in device addition */ @@ -2323,11 +2323,11 @@ static int emac_of_bus_notify(struct notifier_block *nb, return 0; } -static struct notifier_block emac_of_bus_notifier = { +static struct notifier_block emac_of_bus_notifier __devinitdata = { .notifier_call = emac_of_bus_notify }; -static int emac_wait_deps(struct emac_instance *dev) +static int __devinit emac_wait_deps(struct emac_instance *dev) { struct emac_depentry deps[EMAC_DEP_COUNT]; int i, err; @@ -2367,7 +2367,7 @@ static int emac_wait_deps(struct emac_instance *dev) return err; } -static int emac_read_uint_prop(struct device_node *np, const char *name, +static int __devinit emac_read_uint_prop(struct device_node *np, const char *name, u32 *val, int fatal) { int len; @@ -2382,7 +2382,7 @@ static int emac_read_uint_prop(struct device_node *np, const char *name, return 0; } -static int emac_init_phy(struct emac_instance *dev) +static int __devinit emac_init_phy(struct emac_instance *dev) { struct device_node *np = dev->ofdev->dev.of_node; struct net_device *ndev = dev->ndev; @@ -2518,7 +2518,7 @@ static int emac_init_phy(struct emac_instance *dev) return 0; } -static int emac_init_config(struct emac_instance *dev) +static int __devinit emac_init_config(struct emac_instance *dev) { struct device_node *np = dev->ofdev->dev.of_node; const void *p; @@ -2703,7 +2703,7 @@ static const struct net_device_ops emac_gige_netdev_ops = { .ndo_change_mtu = emac_change_mtu, }; -static int emac_probe(struct platform_device *ofdev) +static int __devinit emac_probe(struct platform_device *ofdev) { struct net_device *ndev; struct emac_instance *dev; @@ -2930,7 +2930,7 @@ static int emac_probe(struct platform_device *ofdev) return err; } -static int emac_remove(struct platform_device *ofdev) +static int __devexit emac_remove(struct platform_device *ofdev) { struct emac_instance *dev = dev_get_drvdata(&ofdev->dev); diff --git a/trunk/drivers/net/ethernet/ibm/emac/mal.c b/trunk/drivers/net/ethernet/ibm/emac/mal.c index 8becaaf6eb5c..84c6b6cf9c14 100644 --- a/trunk/drivers/net/ethernet/ibm/emac/mal.c +++ b/trunk/drivers/net/ethernet/ibm/emac/mal.c @@ -33,7 +33,7 @@ static int mal_count; -int mal_register_commac(struct mal_instance *mal, +int __devinit mal_register_commac(struct mal_instance *mal, struct mal_commac *commac) { unsigned long flags; @@ -517,7 +517,7 @@ void *mal_dump_regs(struct mal_instance *mal, void *buf) return regs + 1; } -static int mal_probe(struct platform_device *ofdev) +static int __devinit mal_probe(struct platform_device *ofdev) { struct mal_instance *mal; int err = 0, i, bd_size; @@ -729,7 +729,7 @@ static int mal_probe(struct platform_device *ofdev) return err; } -static int mal_remove(struct platform_device *ofdev) +static int __devexit mal_remove(struct platform_device *ofdev) { struct mal_instance *mal = dev_get_drvdata(&ofdev->dev); diff --git a/trunk/drivers/net/ethernet/ibm/emac/rgmii.c b/trunk/drivers/net/ethernet/ibm/emac/rgmii.c index 39251765b55d..d3123282e18e 100644 --- a/trunk/drivers/net/ethernet/ibm/emac/rgmii.c +++ b/trunk/drivers/net/ethernet/ibm/emac/rgmii.c @@ -93,7 +93,7 @@ static inline u32 rgmii_mode_mask(int mode, int input) } } -int rgmii_attach(struct platform_device *ofdev, int input, int mode) +int __devinit rgmii_attach(struct platform_device *ofdev, int input, int mode) { struct rgmii_instance *dev = dev_get_drvdata(&ofdev->dev); struct rgmii_regs __iomem *p = dev->base; @@ -228,7 +228,7 @@ void *rgmii_dump_regs(struct platform_device *ofdev, void *buf) } -static int rgmii_probe(struct platform_device *ofdev) +static int __devinit rgmii_probe(struct platform_device *ofdev) { struct device_node *np = ofdev->dev.of_node; struct rgmii_instance *dev; @@ -289,7 +289,7 @@ static int rgmii_probe(struct platform_device *ofdev) return rc; } -static int rgmii_remove(struct platform_device *ofdev) +static int __devexit rgmii_remove(struct platform_device *ofdev) { struct rgmii_instance *dev = dev_get_drvdata(&ofdev->dev); diff --git a/trunk/drivers/net/ethernet/ibm/emac/tah.c b/trunk/drivers/net/ethernet/ibm/emac/tah.c index 795f1393e2b6..872912ef518d 100644 --- a/trunk/drivers/net/ethernet/ibm/emac/tah.c +++ b/trunk/drivers/net/ethernet/ibm/emac/tah.c @@ -23,7 +23,7 @@ #include "emac.h" #include "core.h" -int tah_attach(struct platform_device *ofdev, int channel) +int __devinit tah_attach(struct platform_device *ofdev, int channel) { struct tah_instance *dev = dev_get_drvdata(&ofdev->dev); @@ -87,7 +87,7 @@ void *tah_dump_regs(struct platform_device *ofdev, void *buf) return regs + 1; } -static int tah_probe(struct platform_device *ofdev) +static int __devinit tah_probe(struct platform_device *ofdev) { struct device_node *np = ofdev->dev.of_node; struct tah_instance *dev; @@ -135,7 +135,7 @@ static int tah_probe(struct platform_device *ofdev) return rc; } -static int tah_remove(struct platform_device *ofdev) +static int __devexit tah_remove(struct platform_device *ofdev) { struct tah_instance *dev = dev_get_drvdata(&ofdev->dev); diff --git a/trunk/drivers/net/ethernet/ibm/emac/zmii.c b/trunk/drivers/net/ethernet/ibm/emac/zmii.c index f91202f42125..415e9b4d5408 100644 --- a/trunk/drivers/net/ethernet/ibm/emac/zmii.c +++ b/trunk/drivers/net/ethernet/ibm/emac/zmii.c @@ -82,7 +82,7 @@ static inline u32 zmii_mode_mask(int mode, int input) } } -int zmii_attach(struct platform_device *ofdev, int input, int *mode) +int __devinit zmii_attach(struct platform_device *ofdev, int input, int *mode) { struct zmii_instance *dev = dev_get_drvdata(&ofdev->dev); struct zmii_regs __iomem *p = dev->base; @@ -231,7 +231,7 @@ void *zmii_dump_regs(struct platform_device *ofdev, void *buf) return regs + 1; } -static int zmii_probe(struct platform_device *ofdev) +static int __devinit zmii_probe(struct platform_device *ofdev) { struct device_node *np = ofdev->dev.of_node; struct zmii_instance *dev; @@ -282,7 +282,7 @@ static int zmii_probe(struct platform_device *ofdev) return rc; } -static int zmii_remove(struct platform_device *ofdev) +static int __devexit zmii_remove(struct platform_device *ofdev) { struct zmii_instance *dev = dev_get_drvdata(&ofdev->dev); diff --git a/trunk/drivers/net/ethernet/ibm/ibmveth.c b/trunk/drivers/net/ethernet/ibm/ibmveth.c index 35485f2c144c..b68d28a130e6 100644 --- a/trunk/drivers/net/ethernet/ibm/ibmveth.c +++ b/trunk/drivers/net/ethernet/ibm/ibmveth.c @@ -1324,7 +1324,7 @@ static const struct net_device_ops ibmveth_netdev_ops = { #endif }; -static int ibmveth_probe(struct vio_dev *dev, +static int __devinit ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id) { int rc, i; @@ -1426,7 +1426,7 @@ static int ibmveth_probe(struct vio_dev *dev, return 0; } -static int ibmveth_remove(struct vio_dev *dev) +static int __devexit ibmveth_remove(struct vio_dev *dev) { struct net_device *netdev = dev_get_drvdata(&dev->dev); struct ibmveth_adapter *adapter = netdev_priv(netdev); @@ -1593,7 +1593,7 @@ static int ibmveth_resume(struct device *dev) return 0; } -static struct vio_device_id ibmveth_device_table[] = { +static struct vio_device_id ibmveth_device_table[] __devinitdata = { { "network", "IBM,l-lan"}, { "", "" } }; diff --git a/trunk/drivers/net/ethernet/icplus/ipg.c b/trunk/drivers/net/ethernet/icplus/ipg.c index f80ae745908d..1b563bb959c2 100644 --- a/trunk/drivers/net/ethernet/icplus/ipg.c +++ b/trunk/drivers/net/ethernet/icplus/ipg.c @@ -2167,7 +2167,7 @@ static const struct ethtool_ops ipg_ethtool_ops = { .nway_reset = ipg_nway_reset, }; -static void ipg_remove(struct pci_dev *pdev) +static void __devexit ipg_remove(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct ipg_nic_private *sp = netdev_priv(dev); @@ -2199,7 +2199,7 @@ static const struct net_device_ops ipg_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int ipg_probe(struct pci_dev *pdev, +static int __devinit ipg_probe(struct pci_dev *pdev, const struct pci_device_id *id) { unsigned int i = id->driver_data; @@ -2296,7 +2296,7 @@ static struct pci_driver ipg_pci_driver = { .name = IPG_DRIVER_NAME, .id_table = ipg_pci_tbl, .probe = ipg_probe, - .remove = ipg_remove, + .remove = __devexit_p(ipg_remove), }; static int __init ipg_init_module(void) diff --git a/trunk/drivers/net/ethernet/intel/e100.c b/trunk/drivers/net/ethernet/intel/e100.c index 50c205098626..29ce9bd27f94 100644 --- a/trunk/drivers/net/ethernet/intel/e100.c +++ b/trunk/drivers/net/ethernet/intel/e100.c @@ -2829,7 +2829,7 @@ static const struct net_device_ops e100_netdev_ops = { .ndo_set_features = e100_set_features, }; -static int e100_probe(struct pci_dev *pdev, +static int __devinit e100_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -2981,7 +2981,7 @@ static int e100_probe(struct pci_dev *pdev, return err; } -static void e100_remove(struct pci_dev *pdev) +static void __devexit e100_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); @@ -3167,7 +3167,7 @@ static struct pci_driver e100_driver = { .name = DRV_NAME, .id_table = e100_id_table, .probe = e100_probe, - .remove = e100_remove, + .remove = __devexit_p(e100_remove), #ifdef CONFIG_PM /* Power Management hooks */ .suspend = e100_suspend, diff --git a/trunk/drivers/net/ethernet/intel/e1000/e1000_main.c b/trunk/drivers/net/ethernet/intel/e1000/e1000_main.c index 840fb0d39034..222bfaff4622 100644 --- a/trunk/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/trunk/drivers/net/ethernet/intel/e1000/e1000_main.c @@ -111,7 +111,7 @@ void e1000_update_stats(struct e1000_adapter *adapter); static int e1000_init_module(void); static void e1000_exit_module(void); static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent); -static void e1000_remove(struct pci_dev *pdev); +static void __devexit e1000_remove(struct pci_dev *pdev); static int e1000_alloc_queues(struct e1000_adapter *adapter); static int e1000_sw_init(struct e1000_adapter *adapter); static int e1000_open(struct net_device *netdev); @@ -202,7 +202,7 @@ static struct pci_driver e1000_driver = { .name = e1000_driver_name, .id_table = e1000_pci_tbl, .probe = e1000_probe, - .remove = e1000_remove, + .remove = __devexit_p(e1000_remove), #ifdef CONFIG_PM /* Power Management Hooks */ .suspend = e1000_suspend, @@ -938,7 +938,7 @@ static int e1000_init_hw_struct(struct e1000_adapter *adapter, * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. **/ -static int e1000_probe(struct pci_dev *pdev, +static int __devinit e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -1273,7 +1273,7 @@ static int e1000_probe(struct pci_dev *pdev, * memory. **/ -static void e1000_remove(struct pci_dev *pdev) +static void __devexit e1000_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct e1000_adapter *adapter = netdev_priv(netdev); @@ -1309,7 +1309,7 @@ static void e1000_remove(struct pci_dev *pdev) * e1000_init_hw_struct MUST be called before this function **/ -static int e1000_sw_init(struct e1000_adapter *adapter) +static int __devinit e1000_sw_init(struct e1000_adapter *adapter) { adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE; @@ -1340,7 +1340,7 @@ static int e1000_sw_init(struct e1000_adapter *adapter) * number of queues at compile-time. **/ -static int e1000_alloc_queues(struct e1000_adapter *adapter) +static int __devinit e1000_alloc_queues(struct e1000_adapter *adapter) { adapter->tx_ring = kcalloc(adapter->num_tx_queues, sizeof(struct e1000_tx_ring), GFP_KERNEL); diff --git a/trunk/drivers/net/ethernet/intel/e1000/e1000_param.c b/trunk/drivers/net/ethernet/intel/e1000/e1000_param.c index 4e19aa0657f4..1301eba8b57a 100644 --- a/trunk/drivers/net/ethernet/intel/e1000/e1000_param.c +++ b/trunk/drivers/net/ethernet/intel/e1000/e1000_param.c @@ -45,7 +45,7 @@ #define E1000_PARAM_INIT { [0 ... E1000_MAX_NIC] = OPTION_UNSET } #define E1000_PARAM(X, desc) \ - static int X[E1000_MAX_NIC+1] = E1000_PARAM_INIT; \ + static int __devinitdata X[E1000_MAX_NIC+1] = E1000_PARAM_INIT; \ static unsigned int num_##X; \ module_param_array_named(X, X, int, &num_##X, 0); \ MODULE_PARM_DESC(X, desc); @@ -205,7 +205,7 @@ struct e1000_option { } arg; }; -static int e1000_validate_option(unsigned int *value, +static int __devinit e1000_validate_option(unsigned int *value, const struct e1000_option *opt, struct e1000_adapter *adapter) { @@ -268,7 +268,7 @@ static void e1000_check_copper_options(struct e1000_adapter *adapter); * in a variable in the adapter structure. **/ -void e1000_check_options(struct e1000_adapter *adapter) +void __devinit e1000_check_options(struct e1000_adapter *adapter) { struct e1000_option opt; int bd = adapter->bd_number; @@ -534,7 +534,7 @@ void e1000_check_options(struct e1000_adapter *adapter) * Handles speed and duplex options on fiber adapters **/ -static void e1000_check_fiber_options(struct e1000_adapter *adapter) +static void __devinit e1000_check_fiber_options(struct e1000_adapter *adapter) { int bd = adapter->bd_number; if (num_Speed > bd) { @@ -560,7 +560,7 @@ static void e1000_check_fiber_options(struct e1000_adapter *adapter) * Handles speed and duplex options on copper adapters **/ -static void e1000_check_copper_options(struct e1000_adapter *adapter) +static void __devinit e1000_check_copper_options(struct e1000_adapter *adapter) { struct e1000_option opt; unsigned int speed, dplx, an; diff --git a/trunk/drivers/net/ethernet/intel/e1000e/netdev.c b/trunk/drivers/net/ethernet/intel/e1000e/netdev.c index 829e81471ae7..6d06ed4e34b1 100644 --- a/trunk/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/trunk/drivers/net/ethernet/intel/e1000e/netdev.c @@ -2503,7 +2503,7 @@ void e1000e_write_itr(struct e1000_adapter *adapter, u32 itr) * e1000_alloc_queues - Allocate memory for all rings * @adapter: board private structure to initialize **/ -static int e1000_alloc_queues(struct e1000_adapter *adapter) +static int __devinit e1000_alloc_queues(struct e1000_adapter *adapter) { int size = sizeof(struct e1000_ring); @@ -3676,7 +3676,7 @@ void e1000e_reinit_locked(struct e1000_adapter *adapter) * Fields are initialized based on PCI device information and * OS network device settings (MTU size). **/ -static int e1000_sw_init(struct e1000_adapter *adapter) +static int __devinit e1000_sw_init(struct e1000_adapter *adapter) { struct net_device *netdev = adapter->netdev; @@ -6024,7 +6024,7 @@ static const struct net_device_ops e1000e_netdev_ops = { * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. **/ -static int e1000_probe(struct pci_dev *pdev, +static int __devinit e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -6361,7 +6361,7 @@ static int e1000_probe(struct pci_dev *pdev, * Hot-Plug event, or because the driver is going to be removed from * memory. **/ -static void e1000_remove(struct pci_dev *pdev) +static void __devexit e1000_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct e1000_adapter *adapter = netdev_priv(netdev); @@ -6512,7 +6512,7 @@ static struct pci_driver e1000_driver = { .name = e1000e_driver_name, .id_table = e1000_pci_tbl, .probe = e1000_probe, - .remove = e1000_remove, + .remove = __devexit_p(e1000_remove), #ifdef CONFIG_PM .driver = { .pm = &e1000_pm_ops, diff --git a/trunk/drivers/net/ethernet/intel/e1000e/param.c b/trunk/drivers/net/ethernet/intel/e1000e/param.c index b3beed2232fd..1fbb31554e4d 100644 --- a/trunk/drivers/net/ethernet/intel/e1000e/param.c +++ b/trunk/drivers/net/ethernet/intel/e1000e/param.c @@ -53,7 +53,7 @@ MODULE_PARM_DESC(copybreak, */ #define E1000_PARAM_INIT { [0 ... E1000_MAX_NIC] = OPTION_UNSET } #define E1000_PARAM(X, desc) \ - static int X[E1000_MAX_NIC+1] \ + static int __devinitdata X[E1000_MAX_NIC+1] \ = E1000_PARAM_INIT; \ static unsigned int num_##X; \ module_param_array_named(X, X, int, &num_##X, 0); \ @@ -172,7 +172,7 @@ struct e1000_option { } arg; }; -static int e1000_validate_option(unsigned int *value, +static int __devinit e1000_validate_option(unsigned int *value, const struct e1000_option *opt, struct e1000_adapter *adapter) { @@ -235,7 +235,7 @@ static int e1000_validate_option(unsigned int *value, * value exists, a default value is used. The final value is stored * in a variable in the adapter structure. **/ -void e1000e_check_options(struct e1000_adapter *adapter) +void __devinit e1000e_check_options(struct e1000_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; int bd = adapter->bd_number; diff --git a/trunk/drivers/net/ethernet/intel/igb/igb_main.c b/trunk/drivers/net/ethernet/intel/igb/igb_main.c index de4ebb306530..b85b15a88981 100644 --- a/trunk/drivers/net/ethernet/intel/igb/igb_main.c +++ b/trunk/drivers/net/ethernet/intel/igb/igb_main.c @@ -118,7 +118,7 @@ static void igb_free_all_tx_resources(struct igb_adapter *); static void igb_free_all_rx_resources(struct igb_adapter *); static void igb_setup_mrqc(struct igb_adapter *); static int igb_probe(struct pci_dev *, const struct pci_device_id *); -static void igb_remove(struct pci_dev *pdev); +static void __devexit igb_remove(struct pci_dev *pdev); static int igb_sw_init(struct igb_adapter *); static int igb_open(struct net_device *); static int igb_close(struct net_device *); @@ -228,7 +228,7 @@ static struct pci_driver igb_driver = { .name = igb_driver_name, .id_table = igb_pci_tbl, .probe = igb_probe, - .remove = igb_remove, + .remove = __devexit_p(igb_remove), #ifdef CONFIG_PM .driver.pm = &igb_pm_ops, #endif @@ -1824,7 +1824,7 @@ void igb_set_fw_version(struct igb_adapter *adapter) * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. **/ -static int igb_probe(struct pci_dev *pdev, +static int __devinit igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -2197,7 +2197,7 @@ static int igb_probe(struct pci_dev *pdev, * Hot-Plug event, or because the driver is going to be removed from * memory. **/ -static void igb_remove(struct pci_dev *pdev) +static void __devexit igb_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct igb_adapter *adapter = netdev_priv(netdev); @@ -2277,7 +2277,7 @@ static void igb_remove(struct pci_dev *pdev) * mor expensive time wise to disable SR-IOV than it is to allocate and free * the memory for the VFs. **/ -static void igb_probe_vfs(struct igb_adapter *adapter) +static void __devinit igb_probe_vfs(struct igb_adapter * adapter) { #ifdef CONFIG_PCI_IOV struct pci_dev *pdev = adapter->pdev; @@ -2338,7 +2338,7 @@ static void igb_probe_vfs(struct igb_adapter *adapter) * Fields are initialized based on PCI device information and * OS network device settings (MTU size). **/ -static int igb_sw_init(struct igb_adapter *adapter) +static int __devinit igb_sw_init(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; struct net_device *netdev = adapter->netdev; diff --git a/trunk/drivers/net/ethernet/intel/igbvf/netdev.c b/trunk/drivers/net/ethernet/intel/igbvf/netdev.c index b494309ee942..3d92ad8cdca1 100644 --- a/trunk/drivers/net/ethernet/intel/igbvf/netdev.c +++ b/trunk/drivers/net/ethernet/intel/igbvf/netdev.c @@ -1098,7 +1098,7 @@ static int igbvf_request_msix(struct igbvf_adapter *adapter) * igbvf_alloc_queues - Allocate memory for all rings * @adapter: board private structure to initialize **/ -static int igbvf_alloc_queues(struct igbvf_adapter *adapter) +static int __devinit igbvf_alloc_queues(struct igbvf_adapter *adapter) { struct net_device *netdev = adapter->netdev; @@ -1550,7 +1550,7 @@ void igbvf_reinit_locked(struct igbvf_adapter *adapter) * Fields are initialized based on PCI device information and * OS network device settings (MTU size). **/ -static int igbvf_sw_init(struct igbvf_adapter *adapter) +static int __devinit igbvf_sw_init(struct igbvf_adapter *adapter) { struct net_device *netdev = adapter->netdev; s32 rc; @@ -2618,7 +2618,7 @@ static const struct net_device_ops igbvf_netdev_ops = { * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. **/ -static int igbvf_probe(struct pci_dev *pdev, +static int __devinit igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -2818,7 +2818,7 @@ static int igbvf_probe(struct pci_dev *pdev, * Hot-Plug event, or because the driver is going to be removed from * memory. **/ -static void igbvf_remove(struct pci_dev *pdev) +static void __devexit igbvf_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct igbvf_adapter *adapter = netdev_priv(netdev); @@ -2875,7 +2875,7 @@ static struct pci_driver igbvf_driver = { .name = igbvf_driver_name, .id_table = igbvf_pci_tbl, .probe = igbvf_probe, - .remove = igbvf_remove, + .remove = __devexit_p(igbvf_remove), #ifdef CONFIG_PM /* Power Management Hooks */ .suspend = igbvf_suspend, diff --git a/trunk/drivers/net/ethernet/intel/ixgb/ixgb_main.c b/trunk/drivers/net/ethernet/intel/ixgb/ixgb_main.c index ae96c10251be..d99a2d51b948 100644 --- a/trunk/drivers/net/ethernet/intel/ixgb/ixgb_main.c +++ b/trunk/drivers/net/ethernet/intel/ixgb/ixgb_main.c @@ -73,7 +73,7 @@ MODULE_DEVICE_TABLE(pci, ixgb_pci_tbl); static int ixgb_init_module(void); static void ixgb_exit_module(void); static int ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent); -static void ixgb_remove(struct pci_dev *pdev); +static void __devexit ixgb_remove(struct pci_dev *pdev); static int ixgb_sw_init(struct ixgb_adapter *adapter); static int ixgb_open(struct net_device *netdev); static int ixgb_close(struct net_device *netdev); @@ -125,7 +125,7 @@ static struct pci_driver ixgb_driver = { .name = ixgb_driver_name, .id_table = ixgb_pci_tbl, .probe = ixgb_probe, - .remove = ixgb_remove, + .remove = __devexit_p(ixgb_remove), .err_handler = &ixgb_err_handler }; @@ -391,7 +391,7 @@ static const struct net_device_ops ixgb_netdev_ops = { * and a hardware reset occur. **/ -static int +static int __devinit ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev = NULL; @@ -558,7 +558,7 @@ ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) * memory. **/ -static void +static void __devexit ixgb_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); @@ -584,7 +584,7 @@ ixgb_remove(struct pci_dev *pdev) * OS network device settings (MTU size). **/ -static int +static int __devinit ixgb_sw_init(struct ixgb_adapter *adapter) { struct ixgb_hw *hw = &adapter->hw; diff --git a/trunk/drivers/net/ethernet/intel/ixgb/ixgb_param.c b/trunk/drivers/net/ethernet/intel/ixgb/ixgb_param.c index 04a60640ddda..07d83ab46e21 100644 --- a/trunk/drivers/net/ethernet/intel/ixgb/ixgb_param.c +++ b/trunk/drivers/net/ethernet/intel/ixgb/ixgb_param.c @@ -47,7 +47,7 @@ #define IXGB_PARAM_INIT { [0 ... IXGB_MAX_NIC] = OPTION_UNSET } #define IXGB_PARAM(X, desc) \ - static int X[IXGB_MAX_NIC+1] \ + static int __devinitdata X[IXGB_MAX_NIC+1] \ = IXGB_PARAM_INIT; \ static unsigned int num_##X = 0; \ module_param_array_named(X, X, int, &num_##X, 0); \ @@ -199,7 +199,7 @@ struct ixgb_option { } arg; }; -static int +static int __devinit ixgb_validate_option(unsigned int *value, const struct ixgb_option *opt) { if (*value == OPTION_UNSET) { @@ -257,7 +257,7 @@ ixgb_validate_option(unsigned int *value, const struct ixgb_option *opt) * in a variable in the adapter structure. **/ -void +void __devinit ixgb_check_options(struct ixgb_adapter *adapter) { int bd = adapter->bd_number; diff --git a/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 2fa16de46786..79b834583188 100644 --- a/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -4462,7 +4462,7 @@ static void ixgbe_tx_timeout(struct net_device *netdev) * Fields are initialized based on PCI device information and * OS network device settings (MTU size). **/ -static int ixgbe_sw_init(struct ixgbe_adapter *adapter) +static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter) { struct ixgbe_hw *hw = &adapter->hw; struct pci_dev *pdev = adapter->pdev; @@ -7183,7 +7183,7 @@ int ixgbe_wol_supported(struct ixgbe_adapter *adapter, u16 device_id, * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. **/ -static int ixgbe_probe(struct pci_dev *pdev, +static int __devinit ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -7590,7 +7590,7 @@ static int ixgbe_probe(struct pci_dev *pdev, * Hot-Plug event, or because the driver is going to be removed from * memory. **/ -static void ixgbe_remove(struct pci_dev *pdev) +static void __devexit ixgbe_remove(struct pci_dev *pdev) { struct ixgbe_adapter *adapter = pci_get_drvdata(pdev); struct net_device *netdev = adapter->netdev; @@ -7830,7 +7830,7 @@ static struct pci_driver ixgbe_driver = { .name = ixgbe_driver_name, .id_table = ixgbe_pci_tbl, .probe = ixgbe_probe, - .remove = ixgbe_remove, + .remove = __devexit_p(ixgbe_remove), #ifdef CONFIG_PM .suspend = ixgbe_suspend, .resume = ixgbe_resume, diff --git a/trunk/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/trunk/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 1e2f02ac268d..f267c003a1bc 100644 --- a/trunk/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/trunk/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c @@ -2009,7 +2009,7 @@ static void ixgbevf_clear_interrupt_scheme(struct ixgbevf_adapter *adapter) * Fields are initialized based on PCI device information and * OS network device settings (MTU size). **/ -static int ixgbevf_sw_init(struct ixgbevf_adapter *adapter) +static int __devinit ixgbevf_sw_init(struct ixgbevf_adapter *adapter) { struct ixgbe_hw *hw = &adapter->hw; struct pci_dev *pdev = adapter->pdev; @@ -3242,7 +3242,7 @@ static void ixgbevf_assign_netdev_ops(struct net_device *dev) * The OS initialization, configuring of the adapter private structure, * and a hardware reset occur. **/ -static int ixgbevf_probe(struct pci_dev *pdev, +static int __devinit ixgbevf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; @@ -3414,7 +3414,7 @@ static int ixgbevf_probe(struct pci_dev *pdev, * Hot-Plug event, or because the driver is going to be removed from * memory. **/ -static void ixgbevf_remove(struct pci_dev *pdev) +static void __devexit ixgbevf_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct ixgbevf_adapter *adapter = netdev_priv(netdev); @@ -3528,7 +3528,7 @@ static struct pci_driver ixgbevf_driver = { .name = ixgbevf_driver_name, .id_table = ixgbevf_pci_tbl, .probe = ixgbevf_probe, - .remove = ixgbevf_remove, + .remove = __devexit_p(ixgbevf_remove), #ifdef CONFIG_PM /* Power Management Hooks */ .suspend = ixgbevf_suspend, diff --git a/trunk/drivers/net/ethernet/jme.c b/trunk/drivers/net/ethernet/jme.c index 0519afa413d2..60ac46f4ac08 100644 --- a/trunk/drivers/net/ethernet/jme.c +++ b/trunk/drivers/net/ethernet/jme.c @@ -2965,7 +2965,7 @@ static const struct net_device_ops jme_netdev_ops = { #endif }; -static int +static int __devinit jme_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -3203,7 +3203,7 @@ jme_init_one(struct pci_dev *pdev, return rc; } -static void +static void __devexit jme_remove_one(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); @@ -3318,7 +3318,7 @@ static struct pci_driver jme_driver = { .name = DRV_NAME, .id_table = jme_pci_tbl, .probe = jme_init_one, - .remove = jme_remove_one, + .remove = __devexit_p(jme_remove_one), .shutdown = jme_shutdown, .driver.pm = JME_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/lantiq_etop.c b/trunk/drivers/net/ethernet/lantiq_etop.c index c124e67a1a1c..003c5bc7189f 100644 --- a/trunk/drivers/net/ethernet/lantiq_etop.c +++ b/trunk/drivers/net/ethernet/lantiq_etop.c @@ -774,7 +774,7 @@ ltq_etop_probe(struct platform_device *pdev) return err; } -static int +static int __devexit ltq_etop_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); @@ -789,7 +789,7 @@ ltq_etop_remove(struct platform_device *pdev) } static struct platform_driver ltq_mii_driver = { - .remove = ltq_etop_remove, + .remove = __devexit_p(ltq_etop_remove), .driver = { .name = "ltq_etop", .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/marvell/skge.c b/trunk/drivers/net/ethernet/marvell/skge.c index 3d66e959a0cc..d19a143aa5a8 100644 --- a/trunk/drivers/net/ethernet/marvell/skge.c +++ b/trunk/drivers/net/ethernet/marvell/skge.c @@ -3860,7 +3860,7 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port, return dev; } -static void skge_show_addr(struct net_device *dev) +static void __devinit skge_show_addr(struct net_device *dev) { const struct skge_port *skge = netdev_priv(dev); @@ -3869,7 +3869,7 @@ static void skge_show_addr(struct net_device *dev) static int only_32bit_dma; -static int skge_probe(struct pci_dev *pdev, +static int __devinit skge_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev, *dev1; @@ -4012,7 +4012,7 @@ static int skge_probe(struct pci_dev *pdev, return err; } -static void skge_remove(struct pci_dev *pdev) +static void __devexit skge_remove(struct pci_dev *pdev) { struct skge_hw *hw = pci_get_drvdata(pdev); struct net_device *dev0, *dev1; @@ -4142,7 +4142,7 @@ static struct pci_driver skge_driver = { .name = DRV_NAME, .id_table = skge_id_table, .probe = skge_probe, - .remove = skge_remove, + .remove = __devexit_p(skge_remove), .shutdown = skge_shutdown, .driver.pm = SKGE_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/marvell/sky2.c b/trunk/drivers/net/ethernet/marvell/sky2.c index 6ddfbcae7807..78946feab4a2 100644 --- a/trunk/drivers/net/ethernet/marvell/sky2.c +++ b/trunk/drivers/net/ethernet/marvell/sky2.c @@ -3140,7 +3140,7 @@ static inline u32 sky2_clk2us(const struct sky2_hw *hw, u32 clk) } -static int sky2_init(struct sky2_hw *hw) +static int __devinit sky2_init(struct sky2_hw *hw) { u8 t8; @@ -4741,7 +4741,7 @@ static const struct net_device_ops sky2_netdev_ops[2] = { }; /* Initialize network device */ -static struct net_device *sky2_init_netdev(struct sky2_hw *hw, +static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw, unsigned port, int highmem, int wol) { @@ -4807,7 +4807,7 @@ static struct net_device *sky2_init_netdev(struct sky2_hw *hw, return dev; } -static void sky2_show_addr(struct net_device *dev) +static void __devinit sky2_show_addr(struct net_device *dev) { const struct sky2_port *sky2 = netdev_priv(dev); @@ -4815,7 +4815,7 @@ static void sky2_show_addr(struct net_device *dev) } /* Handle software interrupt used during MSI test */ -static irqreturn_t sky2_test_intr(int irq, void *dev_id) +static irqreturn_t __devinit sky2_test_intr(int irq, void *dev_id) { struct sky2_hw *hw = dev_id; u32 status = sky2_read32(hw, B0_Y2_SP_ISRC2); @@ -4834,7 +4834,7 @@ static irqreturn_t sky2_test_intr(int irq, void *dev_id) } /* Test interrupt path by forcing a a software IRQ */ -static int sky2_test_msi(struct sky2_hw *hw) +static int __devinit sky2_test_msi(struct sky2_hw *hw) { struct pci_dev *pdev = hw->pdev; int err; @@ -4896,7 +4896,7 @@ static const char *sky2_name(u8 chipid, char *buf, int sz) return buf; } -static int sky2_probe(struct pci_dev *pdev, +static int __devinit sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev, *dev1; @@ -4919,13 +4919,13 @@ static int sky2_probe(struct pci_dev *pdev, err = pci_read_config_dword(pdev, PCI_DEV_REG2, ®); if (err) { dev_err(&pdev->dev, "PCI read config failed\n"); - goto err_out_disable; + goto err_out; } if (~reg == 0) { dev_err(&pdev->dev, "PCI configuration read error\n"); err = -EIO; - goto err_out_disable; + goto err_out; } err = pci_request_regions(pdev, DRV_NAME); @@ -5012,11 +5012,10 @@ static int sky2_probe(struct pci_dev *pdev, if (!disable_msi && pci_enable_msi(pdev) == 0) { err = sky2_test_msi(hw); - if (err) { + if (err == -EOPNOTSUPP) pci_disable_msi(pdev); - if (err != -EOPNOTSUPP) - goto err_out_free_netdev; - } + else if (err) + goto err_out_free_netdev; } err = register_netdev(dev); @@ -5064,10 +5063,10 @@ static int sky2_probe(struct pci_dev *pdev, err_out_free_dev1: free_netdev(dev1); err_out_unregister: - unregister_netdev(dev); -err_out_free_netdev: if (hw->flags & SKY2_HW_USE_MSI) pci_disable_msi(pdev); + unregister_netdev(dev); +err_out_free_netdev: free_netdev(dev); err_out_free_pci: pci_free_consistent(pdev, hw->st_size * sizeof(struct sky2_status_le), @@ -5087,7 +5086,7 @@ static int sky2_probe(struct pci_dev *pdev, return err; } -static void sky2_remove(struct pci_dev *pdev) +static void __devexit sky2_remove(struct pci_dev *pdev) { struct sky2_hw *hw = pci_get_drvdata(pdev); int i; @@ -5208,7 +5207,7 @@ static struct pci_driver sky2_driver = { .name = DRV_NAME, .id_table = sky2_id_table, .probe = sky2_probe, - .remove = sky2_remove, + .remove = __devexit_p(sky2_remove), .shutdown = sky2_shutdown, .driver.pm = SKY2_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/mellanox/mlx4/main.c b/trunk/drivers/net/ethernet/mellanox/mlx4/main.c index 340551eebedf..2aa80afd98d2 100644 --- a/trunk/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/trunk/drivers/net/ethernet/mellanox/mlx4/main.c @@ -98,7 +98,7 @@ MODULE_PARM_DESC(log_num_mgm_entry_size, "log mgm size, that defines the num" #define HCA_GLOBAL_CAP_MASK 0 #define PF_CONTEXT_BEHAVIOUR_MASK 0 -static char mlx4_version[] = +static char mlx4_version[] __devinitdata = DRV_NAME ": Mellanox ConnectX core driver v" DRV_VERSION " (" DRV_RELDATE ")\n"; @@ -2224,7 +2224,7 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data) return err; } -static int mlx4_init_one(struct pci_dev *pdev, +static int __devinit mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id) { printk_once(KERN_INFO "%s", mlx4_version); @@ -2391,7 +2391,7 @@ static struct pci_driver mlx4_driver = { .name = DRV_NAME, .id_table = mlx4_pci_table, .probe = mlx4_init_one, - .remove = mlx4_remove_one, + .remove = __devexit_p(mlx4_remove_one), .err_handler = &mlx4_err_handler, }; diff --git a/trunk/drivers/net/ethernet/micrel/ks8695net.c b/trunk/drivers/net/ethernet/micrel/ks8695net.c index 07a6ebc47c92..e62c31234cfa 100644 --- a/trunk/drivers/net/ethernet/micrel/ks8695net.c +++ b/trunk/drivers/net/ethernet/micrel/ks8695net.c @@ -1274,7 +1274,7 @@ ks8695_open(struct net_device *ndev) * This initialises the LAN switch in the KS8695 to a known-good * set of defaults. */ -static void +static void __devinit ks8695_init_switch(struct ks8695_priv *ksp) { u32 ctrl; @@ -1302,7 +1302,7 @@ ks8695_init_switch(struct ks8695_priv *ksp) * This initialises a KS8695's WAN phy to sensible values for * autonegotiation etc. */ -static void +static void __devinit ks8695_init_wan_phy(struct ks8695_priv *ksp) { u32 ctrl; @@ -1346,7 +1346,7 @@ static const struct net_device_ops ks8695_netdev_ops = { * wan ports, and an IORESOURCE_IRQ for the link IRQ for the wan * port. */ -static int +static int __devinit ks8695_probe(struct platform_device *pdev) { struct ks8695_priv *ksp; @@ -1594,7 +1594,7 @@ ks8695_drv_resume(struct platform_device *pdev) * * This unregisters and releases a KS8695 ethernet device. */ -static int +static int __devexit ks8695_drv_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); @@ -1617,7 +1617,7 @@ static struct platform_driver ks8695_driver = { .owner = THIS_MODULE, }, .probe = ks8695_probe, - .remove = ks8695_drv_remove, + .remove = __devexit_p(ks8695_drv_remove), .suspend = ks8695_drv_suspend, .resume = ks8695_drv_resume, }; diff --git a/trunk/drivers/net/ethernet/micrel/ks8842.c b/trunk/drivers/net/ethernet/micrel/ks8842.c index b71eb39ab448..24fb049ac2f2 100644 --- a/trunk/drivers/net/ethernet/micrel/ks8842.c +++ b/trunk/drivers/net/ethernet/micrel/ks8842.c @@ -1141,7 +1141,7 @@ static const struct ethtool_ops ks8842_ethtool_ops = { .get_link = ethtool_op_get_link, }; -static int ks8842_probe(struct platform_device *pdev) +static int __devinit ks8842_probe(struct platform_device *pdev) { int err = -ENOMEM; struct resource *iomem; @@ -1240,7 +1240,7 @@ static int ks8842_probe(struct platform_device *pdev) return err; } -static int ks8842_remove(struct platform_device *pdev) +static int __devexit ks8842_remove(struct platform_device *pdev) { struct net_device *netdev = platform_get_drvdata(pdev); struct ks8842_adapter *adapter = netdev_priv(netdev); @@ -1262,7 +1262,7 @@ static struct platform_driver ks8842_platform_driver = { .owner = THIS_MODULE, }, .probe = ks8842_probe, - .remove = ks8842_remove, + .remove = __devexit_p(ks8842_remove), }; module_platform_driver(ks8842_platform_driver); diff --git a/trunk/drivers/net/ethernet/micrel/ks8851.c b/trunk/drivers/net/ethernet/micrel/ks8851.c index 286816a4e783..1540ebeb8669 100644 --- a/trunk/drivers/net/ethernet/micrel/ks8851.c +++ b/trunk/drivers/net/ethernet/micrel/ks8851.c @@ -1415,7 +1415,7 @@ static int ks8851_resume(struct spi_device *spi) #define ks8851_resume NULL #endif -static int ks8851_probe(struct spi_device *spi) +static int __devinit ks8851_probe(struct spi_device *spi) { struct net_device *ndev; struct ks8851_net *ks; @@ -1534,7 +1534,7 @@ static int ks8851_probe(struct spi_device *spi) return ret; } -static int ks8851_remove(struct spi_device *spi) +static int __devexit ks8851_remove(struct spi_device *spi) { struct ks8851_net *priv = dev_get_drvdata(&spi->dev); @@ -1554,7 +1554,7 @@ static struct spi_driver ks8851_driver = { .owner = THIS_MODULE, }, .probe = ks8851_probe, - .remove = ks8851_remove, + .remove = __devexit_p(ks8851_remove), .suspend = ks8851_suspend, .resume = ks8851_resume, }; diff --git a/trunk/drivers/net/ethernet/micrel/ks8851_mll.c b/trunk/drivers/net/ethernet/micrel/ks8851_mll.c index ef8f9f92e547..38529edfe350 100644 --- a/trunk/drivers/net/ethernet/micrel/ks8851_mll.c +++ b/trunk/drivers/net/ethernet/micrel/ks8851_mll.c @@ -1506,7 +1506,7 @@ static int ks_hw_init(struct ks_net *ks) } -static int ks8851_probe(struct platform_device *pdev) +static int __devinit ks8851_probe(struct platform_device *pdev) { int err = -ENOMEM; struct resource *io_d, *io_c; @@ -1641,7 +1641,7 @@ static int ks8851_probe(struct platform_device *pdev) return err; } -static int ks8851_remove(struct platform_device *pdev) +static int __devexit ks8851_remove(struct platform_device *pdev) { struct net_device *netdev = platform_get_drvdata(pdev); struct ks_net *ks = netdev_priv(netdev); @@ -1663,7 +1663,7 @@ static struct platform_driver ks8851_platform_driver = { .owner = THIS_MODULE, }, .probe = ks8851_probe, - .remove = ks8851_remove, + .remove = __devexit_p(ks8851_remove), }; module_platform_driver(ks8851_platform_driver); diff --git a/trunk/drivers/net/ethernet/micrel/ksz884x.c b/trunk/drivers/net/ethernet/micrel/ksz884x.c index f3f09b18a707..d16ef24e622f 100644 --- a/trunk/drivers/net/ethernet/micrel/ksz884x.c +++ b/trunk/drivers/net/ethernet/micrel/ksz884x.c @@ -1487,7 +1487,7 @@ struct dev_priv { #define DRV_VERSION "1.0.0" #define DRV_RELDATE "Feb 8, 2010" -static char version[] = +static char version[] __devinitdata = "Micrel " DEVICE_NAME " " DRV_VERSION " (" DRV_RELDATE ")"; static u8 DEFAULT_MAC_ADDRESS[] = { 0x00, 0x10, 0xA1, 0x88, 0x42, 0x01 }; @@ -6919,7 +6919,7 @@ static void read_other_addr(struct ksz_hw *hw) #define PCI_VENDOR_ID_MICREL_KS 0x16c6 #endif -static int pcidev_init(struct pci_dev *pdev, +static int __devinit pcidev_init(struct pci_dev *pdev, const struct pci_device_id *id) { struct net_device *dev; diff --git a/trunk/drivers/net/ethernet/microchip/enc28j60.c b/trunk/drivers/net/ethernet/microchip/enc28j60.c index a99456c3dd87..6118bdad244f 100644 --- a/trunk/drivers/net/ethernet/microchip/enc28j60.c +++ b/trunk/drivers/net/ethernet/microchip/enc28j60.c @@ -1541,7 +1541,7 @@ static const struct net_device_ops enc28j60_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int enc28j60_probe(struct spi_device *spi) +static int __devinit enc28j60_probe(struct spi_device *spi) { struct net_device *dev; struct enc28j60_net *priv; @@ -1617,7 +1617,7 @@ static int enc28j60_probe(struct spi_device *spi) return ret; } -static int enc28j60_remove(struct spi_device *spi) +static int __devexit enc28j60_remove(struct spi_device *spi) { struct enc28j60_net *priv = dev_get_drvdata(&spi->dev); @@ -1637,7 +1637,7 @@ static struct spi_driver enc28j60_driver = { .owner = THIS_MODULE, }, .probe = enc28j60_probe, - .remove = enc28j60_remove, + .remove = __devexit_p(enc28j60_remove), }; static int __init enc28j60_init(void) diff --git a/trunk/drivers/net/ethernet/natsemi/ibmlana.c b/trunk/drivers/net/ethernet/natsemi/ibmlana.c index 923e640d604c..3f94ddbf4dc0 100644 --- a/trunk/drivers/net/ethernet/natsemi/ibmlana.c +++ b/trunk/drivers/net/ethernet/natsemi/ibmlana.c @@ -900,7 +900,7 @@ static short ibmlana_adapter_ids[] __initdata = { 0x0000 }; -static char *ibmlana_adapter_names[] = { +static char *ibmlana_adapter_names[] __devinitdata = { "IBM LAN Adapter/A", NULL }; @@ -916,7 +916,7 @@ static const struct net_device_ops ibmlana_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int ibmlana_init_one(struct device *kdev) +static int __devinit ibmlana_init_one(struct device *kdev) { struct mca_device *mdev = to_mca_device(kdev); struct net_device *dev; diff --git a/trunk/drivers/net/ethernet/natsemi/jazzsonic.c b/trunk/drivers/net/ethernet/natsemi/jazzsonic.c index b0b361546365..95dd39ffb230 100644 --- a/trunk/drivers/net/ethernet/natsemi/jazzsonic.c +++ b/trunk/drivers/net/ethernet/natsemi/jazzsonic.c @@ -117,7 +117,7 @@ static const struct net_device_ops sonic_netdev_ops = { .ndo_set_mac_address = eth_mac_addr, }; -static int sonic_probe1(struct net_device *dev) +static int __devinit sonic_probe1(struct net_device *dev) { static unsigned version_printed; unsigned int silicon_revision; @@ -220,7 +220,7 @@ static int sonic_probe1(struct net_device *dev) * Probe for a SONIC ethernet controller on a Mips Jazz board. * Actually probing is superfluous but we're paranoid. */ -static int jazz_sonic_probe(struct platform_device *pdev) +static int __devinit jazz_sonic_probe(struct platform_device *pdev) { struct net_device *dev; struct sonic_local *lp; @@ -270,7 +270,7 @@ MODULE_ALIAS("platform:jazzsonic"); #include "sonic.c" -static int jazz_sonic_device_remove(struct platform_device *pdev) +static int __devexit jazz_sonic_device_remove (struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct sonic_local* lp = netdev_priv(dev); @@ -286,7 +286,7 @@ static int jazz_sonic_device_remove(struct platform_device *pdev) static struct platform_driver jazz_sonic_driver = { .probe = jazz_sonic_probe, - .remove = jazz_sonic_device_remove, + .remove = __devexit_p(jazz_sonic_device_remove), .driver = { .name = jazz_sonic_string, .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/natsemi/macsonic.c b/trunk/drivers/net/ethernet/natsemi/macsonic.c index eaddbb7c24ab..b9680ba5a325 100644 --- a/trunk/drivers/net/ethernet/natsemi/macsonic.c +++ b/trunk/drivers/net/ethernet/natsemi/macsonic.c @@ -196,7 +196,7 @@ static const struct net_device_ops macsonic_netdev_ops = { .ndo_set_mac_address = eth_mac_addr, }; -static int macsonic_init(struct net_device *dev) +static int __devinit macsonic_init(struct net_device *dev) { struct sonic_local* lp = netdev_priv(dev); @@ -245,7 +245,7 @@ static int macsonic_init(struct net_device *dev) memcmp(mac, "\x00\x80\x19", 3) && \ memcmp(mac, "\x00\x05\x02", 3)) -static void mac_onboard_sonic_ethernet_addr(struct net_device *dev) +static void __devinit mac_onboard_sonic_ethernet_addr(struct net_device *dev) { struct sonic_local *lp = netdev_priv(dev); const int prom_addr = ONBOARD_SONIC_PROM_BASE; @@ -309,7 +309,7 @@ static void mac_onboard_sonic_ethernet_addr(struct net_device *dev) eth_hw_addr_random(dev); } -static int mac_onboard_sonic_probe(struct net_device *dev) +static int __devinit mac_onboard_sonic_probe(struct net_device *dev) { struct sonic_local* lp = netdev_priv(dev); int sr; @@ -420,7 +420,7 @@ static int mac_onboard_sonic_probe(struct net_device *dev) return macsonic_init(dev); } -static int mac_nubus_sonic_ethernet_addr(struct net_device *dev, +static int __devinit mac_nubus_sonic_ethernet_addr(struct net_device *dev, unsigned long prom_addr, int id) { @@ -435,7 +435,7 @@ static int mac_nubus_sonic_ethernet_addr(struct net_device *dev, return 0; } -static int macsonic_ident(struct nubus_dev *ndev) +static int __devinit macsonic_ident(struct nubus_dev *ndev) { if (ndev->dr_hw == NUBUS_DRHW_ASANTE_LC && ndev->dr_sw == NUBUS_DRSW_SONIC_LC) @@ -460,7 +460,7 @@ static int macsonic_ident(struct nubus_dev *ndev) return -1; } -static int mac_nubus_sonic_probe(struct net_device *dev) +static int __devinit mac_nubus_sonic_probe(struct net_device *dev) { static int slots; struct nubus_dev* ndev = NULL; @@ -573,7 +573,7 @@ static int mac_nubus_sonic_probe(struct net_device *dev) return macsonic_init(dev); } -static int mac_sonic_probe(struct platform_device *pdev) +static int __devinit mac_sonic_probe(struct platform_device *pdev) { struct net_device *dev; struct sonic_local *lp; @@ -619,7 +619,7 @@ MODULE_ALIAS("platform:macsonic"); #include "sonic.c" -static int mac_sonic_device_remove(struct platform_device *pdev) +static int __devexit mac_sonic_device_remove (struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct sonic_local* lp = netdev_priv(dev); @@ -634,7 +634,7 @@ static int mac_sonic_device_remove(struct platform_device *pdev) static struct platform_driver mac_sonic_driver = { .probe = mac_sonic_probe, - .remove = mac_sonic_device_remove, + .remove = __devexit_p(mac_sonic_device_remove), .driver = { .name = mac_sonic_string, .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/natsemi/natsemi.c b/trunk/drivers/net/ethernet/natsemi/natsemi.c index 77f7cd37ad30..dbaaa99a0d43 100644 --- a/trunk/drivers/net/ethernet/natsemi/natsemi.c +++ b/trunk/drivers/net/ethernet/natsemi/natsemi.c @@ -127,7 +127,7 @@ static int full_duplex[MAX_UNITS]; #define NATSEMI_RX_LIMIT 2046 /* maximum supported by hardware */ /* These identify the driver base version and may not be removed. */ -static const char version[] = +static const char version[] __devinitconst = KERN_INFO DRV_NAME " dp8381x driver, version " DRV_VERSION ", " DRV_RELDATE "\n" " originally by Donald Becker \n" @@ -242,7 +242,7 @@ static struct { const char *name; unsigned long flags; unsigned int eeprom_size; -} natsemi_pci_info[] = { +} natsemi_pci_info[] __devinitdata = { { "Aculab E1/T1 PMXc cPCI carrier card", NATSEMI_FLAG_IGNORE_PHY, 128 }, { "NatSemi DP8381[56]", 0, 24 }, }; @@ -742,7 +742,7 @@ static void move_int_phy(struct net_device *dev, int addr) udelay(1); } -static void natsemi_init_media(struct net_device *dev) +static void __devinit natsemi_init_media (struct net_device *dev) { struct netdev_private *np = netdev_priv(dev); u32 tmp; @@ -797,8 +797,8 @@ static const struct net_device_ops natsemi_netdev_ops = { #endif }; -static int natsemi_probe1(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit natsemi_probe1 (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct net_device *dev; struct netdev_private *np; @@ -3214,7 +3214,7 @@ static int netdev_close(struct net_device *dev) } -static void natsemi_remove1(struct pci_dev *pdev) +static void __devexit natsemi_remove1 (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); void __iomem * ioaddr = ns_ioaddr(dev); @@ -3353,7 +3353,7 @@ static struct pci_driver natsemi_driver = { .name = DRV_NAME, .id_table = natsemi_pci_tbl, .probe = natsemi_probe1, - .remove = natsemi_remove1, + .remove = __devexit_p(natsemi_remove1), #ifdef CONFIG_PM .suspend = natsemi_suspend, .resume = natsemi_resume, diff --git a/trunk/drivers/net/ethernet/natsemi/ns83820.c b/trunk/drivers/net/ethernet/natsemi/ns83820.c index 0281755200a7..d52728b3c436 100644 --- a/trunk/drivers/net/ethernet/natsemi/ns83820.c +++ b/trunk/drivers/net/ethernet/natsemi/ns83820.c @@ -1941,7 +1941,7 @@ static const struct net_device_ops netdev_ops = { .ndo_tx_timeout = ns83820_tx_timeout, }; -static int ns83820_init_one(struct pci_dev *pci_dev, +static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_device_id *id) { struct net_device *ndev; @@ -2241,7 +2241,7 @@ static int ns83820_init_one(struct pci_dev *pci_dev, return err; } -static void ns83820_remove_one(struct pci_dev *pci_dev) +static void __devexit ns83820_remove_one(struct pci_dev *pci_dev) { struct net_device *ndev = pci_get_drvdata(pci_dev); struct ns83820 *dev = PRIV(ndev); /* ok even if NULL */ @@ -2272,7 +2272,7 @@ static struct pci_driver driver = { .name = "ns83820", .id_table = ns83820_pci_tbl, .probe = ns83820_init_one, - .remove = ns83820_remove_one, + .remove = __devexit_p(ns83820_remove_one), #if 0 /* FIXME: implement */ .suspend = , .resume = , diff --git a/trunk/drivers/net/ethernet/natsemi/xtsonic.c b/trunk/drivers/net/ethernet/natsemi/xtsonic.c index 5e4748e855f6..7dfe88398d7d 100644 --- a/trunk/drivers/net/ethernet/natsemi/xtsonic.c +++ b/trunk/drivers/net/ethernet/natsemi/xtsonic.c @@ -249,7 +249,7 @@ static int __init sonic_probe1(struct net_device *dev) * Actually probing is superfluous but we're paranoid. */ -int xtsonic_probe(struct platform_device *pdev) +int __devinit xtsonic_probe(struct platform_device *pdev) { struct net_device *dev; struct sonic_local *lp; @@ -297,7 +297,7 @@ MODULE_PARM_DESC(sonic_debug, "xtsonic debug level (1-4)"); #include "sonic.c" -static int xtsonic_device_remove(struct platform_device *pdev) +static int __devexit xtsonic_device_remove (struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct sonic_local *lp = netdev_priv(dev); @@ -314,7 +314,7 @@ static int xtsonic_device_remove(struct platform_device *pdev) static struct platform_driver xtsonic_driver = { .probe = xtsonic_probe, - .remove = xtsonic_device_remove, + .remove = __devexit_p(xtsonic_device_remove), .driver = { .name = xtsonic_string, }, diff --git a/trunk/drivers/net/ethernet/neterion/s2io.c b/trunk/drivers/net/ethernet/neterion/s2io.c index 3a010e356661..c98decb19ce8 100644 --- a/trunk/drivers/net/ethernet/neterion/s2io.c +++ b/trunk/drivers/net/ethernet/neterion/s2io.c @@ -494,7 +494,7 @@ static struct pci_driver s2io_driver = { .name = "S2IO", .id_table = s2io_tbl, .probe = s2io_init_nic, - .remove = s2io_rem_nic, + .remove = __devexit_p(s2io_rem_nic), .err_handler = &s2io_err_handler, }; @@ -7702,7 +7702,7 @@ static const struct net_device_ops s2io_netdev_ops = { * returns 0 on success and negative on failure. */ -static int +static int __devinit s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) { struct s2io_nic *sp; @@ -8200,7 +8200,7 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) * from memory. */ -static void s2io_rem_nic(struct pci_dev *pdev) +static void __devexit s2io_rem_nic(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct s2io_nic *sp; diff --git a/trunk/drivers/net/ethernet/neterion/s2io.h b/trunk/drivers/net/ethernet/neterion/s2io.h index 032f9b6d850d..d5596926a1ef 100644 --- a/trunk/drivers/net/ethernet/neterion/s2io.h +++ b/trunk/drivers/net/ethernet/neterion/s2io.h @@ -1075,9 +1075,9 @@ static inline void SPECIAL_REG_WRITE(u64 val, void __iomem *addr, int order) /* * Prototype declaration. */ -static int s2io_init_nic(struct pci_dev *pdev, +static int __devinit s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre); -static void s2io_rem_nic(struct pci_dev *pdev); +static void __devexit s2io_rem_nic(struct pci_dev *pdev); static int init_shared_mem(struct s2io_nic *sp); static void free_shared_mem(struct s2io_nic *sp); static int init_nic(struct s2io_nic *nic); diff --git a/trunk/drivers/net/ethernet/neterion/vxge/vxge-config.c b/trunk/drivers/net/ethernet/neterion/vxge/vxge-config.c index fbe5363cb89c..c2e420a84d22 100644 --- a/trunk/drivers/net/ethernet/neterion/vxge/vxge-config.c +++ b/trunk/drivers/net/ethernet/neterion/vxge/vxge-config.c @@ -993,7 +993,7 @@ __vxge_hw_vpath_addr_get(struct __vxge_hw_virtualpath *vpath, * for the driver, FW version information, and the first mac address for * each vpath */ -enum vxge_hw_status +enum vxge_hw_status __devinit vxge_hw_device_hw_info_get(void __iomem *bar0, struct vxge_hw_device_hw_info *hw_info) { @@ -1310,7 +1310,7 @@ __vxge_hw_device_config_check(struct vxge_hw_device_config *new_config) * When done, the driver allocates sizeof(struct __vxge_hw_device) bytes for HW * to enable the latter to perform Titan hardware initialization. */ -enum vxge_hw_status +enum vxge_hw_status __devinit vxge_hw_device_initialize( struct __vxge_hw_device **devh, struct vxge_hw_device_attr *attr, @@ -2917,7 +2917,7 @@ __vxge_hw_ring_create(struct __vxge_hw_vpath_handle *vp, * vxge_hw_device_config_default_get - Initialize device config with defaults. * Initialize Titan device config with default values. */ -enum vxge_hw_status +enum vxge_hw_status __devinit vxge_hw_device_config_default_get(struct vxge_hw_device_config *device_config) { u32 i; diff --git a/trunk/drivers/net/ethernet/neterion/vxge/vxge-config.h b/trunk/drivers/net/ethernet/neterion/vxge/vxge-config.h index 6ce4412fcc1a..9e0c1eed5dc5 100644 --- a/trunk/drivers/net/ethernet/neterion/vxge/vxge-config.h +++ b/trunk/drivers/net/ethernet/neterion/vxge/vxge-config.h @@ -1846,11 +1846,11 @@ struct vxge_hw_vpath_attr { struct vxge_hw_fifo_attr fifo_attr; }; -enum vxge_hw_status vxge_hw_device_hw_info_get( +enum vxge_hw_status __devinit vxge_hw_device_hw_info_get( void __iomem *bar0, struct vxge_hw_device_hw_info *hw_info); -enum vxge_hw_status vxge_hw_device_config_default_get( +enum vxge_hw_status __devinit vxge_hw_device_config_default_get( struct vxge_hw_device_config *device_config); /** @@ -1877,7 +1877,7 @@ u16 vxge_hw_device_link_width_get(struct __vxge_hw_device *devh); const u8 * vxge_hw_device_product_name_get(struct __vxge_hw_device *devh); -enum vxge_hw_status vxge_hw_device_initialize( +enum vxge_hw_status __devinit vxge_hw_device_initialize( struct __vxge_hw_device **devh, struct vxge_hw_device_attr *attr, struct vxge_hw_device_config *device_config); diff --git a/trunk/drivers/net/ethernet/neterion/vxge/vxge-main.c b/trunk/drivers/net/ethernet/neterion/vxge/vxge-main.c index bb5770fc6503..3e5b7509502c 100644 --- a/trunk/drivers/net/ethernet/neterion/vxge/vxge-main.c +++ b/trunk/drivers/net/ethernet/neterion/vxge/vxge-main.c @@ -3371,7 +3371,7 @@ static const struct net_device_ops vxge_netdev_ops = { #endif }; -static int vxge_device_register(struct __vxge_hw_device *hldev, +static int __devinit vxge_device_register(struct __vxge_hw_device *hldev, struct vxge_config *config, int high_dma, int no_of_vpath, struct vxgedev **vdev_out) @@ -3672,7 +3672,7 @@ static void verify_bandwidth(void) /* * Vpath configuration */ -static int vxge_config_vpaths( +static int __devinit vxge_config_vpaths( struct vxge_hw_device_config *device_config, u64 vpath_mask, struct vxge_config *config_param) { @@ -3859,7 +3859,7 @@ static int vxge_config_vpaths( } /* initialize device configuratrions */ -static void vxge_device_config_init( +static void __devinit vxge_device_config_init( struct vxge_hw_device_config *device_config, int *intr_type) { @@ -3912,7 +3912,7 @@ static void vxge_device_config_init( device_config->rth_it_type); } -static void vxge_print_parm(struct vxgedev *vdev, u64 vpath_mask) +static void __devinit vxge_print_parm(struct vxgedev *vdev, u64 vpath_mask) { int i; @@ -4269,7 +4269,7 @@ static int vxge_probe_fw_update(struct vxgedev *vdev) return ret; } -static int is_sriov_initialized(struct pci_dev *pdev) +static int __devinit is_sriov_initialized(struct pci_dev *pdev) { int pos; u16 ctrl; @@ -4300,7 +4300,7 @@ static const struct vxge_hw_uld_cbs vxge_callbacks = { * returns 0 on success and negative on failure. * */ -static int +static int __devinit vxge_probe(struct pci_dev *pdev, const struct pci_device_id *pre) { struct __vxge_hw_device *hldev; @@ -4764,7 +4764,7 @@ vxge_probe(struct pci_dev *pdev, const struct pci_device_id *pre) * Description: This function is called by the Pci subsystem to release a * PCI device and free up all resource held up by the device. */ -static void vxge_remove(struct pci_dev *pdev) +static void __devexit vxge_remove(struct pci_dev *pdev) { struct __vxge_hw_device *hldev; struct vxgedev *vdev; @@ -4809,7 +4809,7 @@ static struct pci_driver vxge_driver = { .name = VXGE_DRIVER_NAME, .id_table = vxge_id_table, .probe = vxge_probe, - .remove = vxge_remove, + .remove = __devexit_p(vxge_remove), #ifdef CONFIG_PM .suspend = vxge_pm_suspend, .resume = vxge_pm_resume, diff --git a/trunk/drivers/net/ethernet/nuvoton/w90p910_ether.c b/trunk/drivers/net/ethernet/nuvoton/w90p910_ether.c index cbd6a529d0c0..6893a65ae55f 100644 --- a/trunk/drivers/net/ethernet/nuvoton/w90p910_ether.c +++ b/trunk/drivers/net/ethernet/nuvoton/w90p910_ether.c @@ -978,7 +978,7 @@ static int w90p910_ether_setup(struct net_device *dev) return 0; } -static int w90p910_ether_probe(struct platform_device *pdev) +static int __devinit w90p910_ether_probe(struct platform_device *pdev) { struct w90p910_ether *ether; struct net_device *dev; @@ -1071,7 +1071,7 @@ static int w90p910_ether_probe(struct platform_device *pdev) return error; } -static int w90p910_ether_remove(struct platform_device *pdev) +static int __devexit w90p910_ether_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct w90p910_ether *ether = netdev_priv(dev); @@ -1096,7 +1096,7 @@ static int w90p910_ether_remove(struct platform_device *pdev) static struct platform_driver w90p910_ether_driver = { .probe = w90p910_ether_probe, - .remove = w90p910_ether_remove, + .remove = __devexit_p(w90p910_ether_remove), .driver = { .name = "nuc900-emc", .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/nvidia/forcedeth.c b/trunk/drivers/net/ethernet/nvidia/forcedeth.c index 653487dc7b52..876beceaf2d7 100644 --- a/trunk/drivers/net/ethernet/nvidia/forcedeth.c +++ b/trunk/drivers/net/ethernet/nvidia/forcedeth.c @@ -5520,7 +5520,7 @@ static const struct net_device_ops nv_netdev_ops_optimized = { #endif }; -static int nv_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) +static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) { struct net_device *dev; struct fe_priv *np; @@ -5995,7 +5995,7 @@ static void nv_restore_mac_addr(struct pci_dev *pci_dev) base + NvRegTransmitPoll); } -static void nv_remove(struct pci_dev *pci_dev) +static void __devexit nv_remove(struct pci_dev *pci_dev) { struct net_device *dev = pci_get_drvdata(pci_dev); @@ -6271,7 +6271,7 @@ static struct pci_driver driver = { .name = DRV_NAME, .id_table = pci_tbl, .probe = nv_probe, - .remove = nv_remove, + .remove = __devexit_p(nv_remove), .shutdown = nv_shutdown, .driver.pm = NV_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/nxp/lpc_eth.c b/trunk/drivers/net/ethernet/nxp/lpc_eth.c index 3466ca1e8f6c..db6e1019be18 100644 --- a/trunk/drivers/net/ethernet/nxp/lpc_eth.c +++ b/trunk/drivers/net/ethernet/nxp/lpc_eth.c @@ -1595,7 +1595,7 @@ MODULE_DEVICE_TABLE(of, lpc_eth_match); static struct platform_driver lpc_eth_driver = { .probe = lpc_eth_drv_probe, - .remove = lpc_eth_drv_remove, + .remove = __devexit_p(lpc_eth_drv_remove), #ifdef CONFIG_PM .suspend = lpc_eth_drv_suspend, .resume = lpc_eth_drv_resume, diff --git a/trunk/drivers/net/ethernet/octeon/octeon_mgmt.c b/trunk/drivers/net/ethernet/octeon/octeon_mgmt.c index b5499198e029..f97719c48516 100644 --- a/trunk/drivers/net/ethernet/octeon/octeon_mgmt.c +++ b/trunk/drivers/net/ethernet/octeon/octeon_mgmt.c @@ -1419,7 +1419,7 @@ static const struct net_device_ops octeon_mgmt_ops = { #endif }; -static int octeon_mgmt_probe(struct platform_device *pdev) +static int __devinit octeon_mgmt_probe(struct platform_device *pdev) { struct net_device *netdev; struct octeon_mgmt *p; @@ -1559,7 +1559,7 @@ static int octeon_mgmt_probe(struct platform_device *pdev) return result; } -static int octeon_mgmt_remove(struct platform_device *pdev) +static int __devexit octeon_mgmt_remove(struct platform_device *pdev) { struct net_device *netdev = dev_get_drvdata(&pdev->dev); @@ -1583,7 +1583,7 @@ static struct platform_driver octeon_mgmt_driver = { .of_match_table = octeon_mgmt_match, }, .probe = octeon_mgmt_probe, - .remove = octeon_mgmt_remove, + .remove = __devexit_p(octeon_mgmt_remove), }; extern void octeon_mdiobus_force_mod_depencency(void); diff --git a/trunk/drivers/net/ethernet/packetengines/hamachi.c b/trunk/drivers/net/ethernet/packetengines/hamachi.c index bf829ee30077..c2367158350e 100644 --- a/trunk/drivers/net/ethernet/packetengines/hamachi.c +++ b/trunk/drivers/net/ethernet/packetengines/hamachi.c @@ -166,7 +166,7 @@ static int tx_params[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1}; #include #include -static const char version[] = +static const char version[] __devinitconst = KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Written by Donald Becker\n" " Some modifications by Eric kasten \n" " Further modifications by Keith Underwood \n"; @@ -576,8 +576,8 @@ static const struct net_device_ops hamachi_netdev_ops = { }; -static int hamachi_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit hamachi_init_one (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct hamachi_private *hmp; int option, i, rx_int_var, tx_int_var, boguscnt; @@ -791,7 +791,7 @@ static int hamachi_init_one(struct pci_dev *pdev, return ret; } -static int read_eeprom(void __iomem *ioaddr, int location) +static int __devinit read_eeprom(void __iomem *ioaddr, int location) { int bogus_cnt = 1000; @@ -1894,7 +1894,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) } -static void hamachi_remove_one(struct pci_dev *pdev) +static void __devexit hamachi_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -1923,7 +1923,7 @@ static struct pci_driver hamachi_driver = { .name = DRV_NAME, .id_table = hamachi_pci_tbl, .probe = hamachi_init_one, - .remove = hamachi_remove_one, + .remove = __devexit_p(hamachi_remove_one), }; static int __init hamachi_init (void) diff --git a/trunk/drivers/net/ethernet/packetengines/yellowfin.c b/trunk/drivers/net/ethernet/packetengines/yellowfin.c index 2800c449de4e..04e622fd468d 100644 --- a/trunk/drivers/net/ethernet/packetengines/yellowfin.c +++ b/trunk/drivers/net/ethernet/packetengines/yellowfin.c @@ -106,7 +106,7 @@ static int gx_fix; #include /* These identify the driver base version and may not be removed. */ -static const char version[] = +static const char version[] __devinitconst = KERN_INFO DRV_NAME ".c:v1.05 1/09/2001 Written by Donald Becker \n" " (unofficial 2.4.x port, " DRV_VERSION ", " DRV_RELDATE ")\n"; @@ -367,7 +367,7 @@ static const struct net_device_ops netdev_ops = { .ndo_tx_timeout = yellowfin_tx_timeout, }; -static int yellowfin_init_one(struct pci_dev *pdev, +static int __devinit yellowfin_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; @@ -522,7 +522,7 @@ static int yellowfin_init_one(struct pci_dev *pdev, return -ENODEV; } -static int read_eeprom(void __iomem *ioaddr, int location) +static int __devinit read_eeprom(void __iomem *ioaddr, int location) { int bogus_cnt = 10000; /* Typical 33Mhz: 1050 ticks */ @@ -1372,7 +1372,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) } -static void yellowfin_remove_one(struct pci_dev *pdev) +static void __devexit yellowfin_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct yellowfin_private *np; @@ -1399,7 +1399,7 @@ static struct pci_driver yellowfin_driver = { .name = DRV_NAME, .id_table = yellowfin_pci_tbl, .probe = yellowfin_init_one, - .remove = yellowfin_remove_one, + .remove = __devexit_p(yellowfin_remove_one), }; diff --git a/trunk/drivers/net/ethernet/pasemi/pasemi_mac.c b/trunk/drivers/net/ethernet/pasemi/pasemi_mac.c index 0be5844d6372..6fa74d530e44 100644 --- a/trunk/drivers/net/ethernet/pasemi/pasemi_mac.c +++ b/trunk/drivers/net/ethernet/pasemi/pasemi_mac.c @@ -1727,7 +1727,7 @@ static const struct net_device_ops pasemi_netdev_ops = { #endif }; -static int +static int __devinit pasemi_mac_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; @@ -1849,7 +1849,7 @@ pasemi_mac_probe(struct pci_dev *pdev, const struct pci_device_id *ent) } -static void pasemi_mac_remove(struct pci_dev *pdev) +static void __devexit pasemi_mac_remove(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); struct pasemi_mac *mac; @@ -1884,7 +1884,7 @@ static struct pci_driver pasemi_mac_driver = { .name = "pasemi_mac", .id_table = pasemi_mac_pci_tbl, .probe = pasemi_mac_probe, - .remove = pasemi_mac_remove, + .remove = __devexit_p(pasemi_mac_remove), }; static void __exit pasemi_mac_cleanup_module(void) diff --git a/trunk/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/trunk/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c index 6098fd4adfeb..df450616ab37 100644 --- a/trunk/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +++ b/trunk/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c @@ -60,9 +60,9 @@ static int auto_fw_reset = AUTO_FW_RESET_ENABLED; module_param(auto_fw_reset, int, 0644); MODULE_PARM_DESC(auto_fw_reset,"Auto firmware reset (0=disabled, 1=enabled"); -static int netxen_nic_probe(struct pci_dev *pdev, +static int __devinit netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent); -static void netxen_nic_remove(struct pci_dev *pdev); +static void __devexit netxen_nic_remove(struct pci_dev *pdev); static int netxen_nic_open(struct net_device *netdev); static int netxen_nic_close(struct net_device *netdev); static netdev_tx_t netxen_nic_xmit_frame(struct sk_buff *, @@ -1397,7 +1397,7 @@ static void netxen_mask_aer_correctable(struct netxen_adapter *adapter) } #endif -static int +static int __devinit netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev = NULL; @@ -1569,7 +1569,7 @@ void netxen_cleanup_minidump(struct netxen_adapter *adapter) } } -static void netxen_nic_remove(struct pci_dev *pdev) +static void __devexit netxen_nic_remove(struct pci_dev *pdev) { struct netxen_adapter *adapter; struct net_device *netdev; @@ -3350,7 +3350,7 @@ static struct pci_driver netxen_driver = { .name = netxen_nic_driver_name, .id_table = netxen_pci_tbl, .probe = netxen_nic_probe, - .remove = netxen_nic_remove, + .remove = __devexit_p(netxen_nic_remove), #ifdef CONFIG_PM .suspend = netxen_nic_suspend, .resume = netxen_nic_resume, diff --git a/trunk/drivers/net/ethernet/qlogic/qla3xxx.c b/trunk/drivers/net/ethernet/qlogic/qla3xxx.c index df6eb27fa101..12d1f2470d5c 100644 --- a/trunk/drivers/net/ethernet/qlogic/qla3xxx.c +++ b/trunk/drivers/net/ethernet/qlogic/qla3xxx.c @@ -3769,7 +3769,7 @@ static const struct net_device_ops ql3xxx_netdev_ops = { .ndo_tx_timeout = ql3xxx_tx_timeout, }; -static int ql3xxx_probe(struct pci_dev *pdev, +static int __devinit ql3xxx_probe(struct pci_dev *pdev, const struct pci_device_id *pci_entry) { struct net_device *ndev = NULL; @@ -3925,7 +3925,7 @@ static int ql3xxx_probe(struct pci_dev *pdev, return err; } -static void ql3xxx_remove(struct pci_dev *pdev) +static void __devexit ql3xxx_remove(struct pci_dev *pdev) { struct net_device *ndev = pci_get_drvdata(pdev); struct ql3_adapter *qdev = netdev_priv(ndev); @@ -3952,7 +3952,7 @@ static struct pci_driver ql3xxx_driver = { .name = DRV_NAME, .id_table = ql3xxx_pci_tbl, .probe = ql3xxx_probe, - .remove = ql3xxx_remove, + .remove = __devexit_p(ql3xxx_remove), }; module_pci_driver(ql3xxx_driver); diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h index 537902479689..082eecbf4148 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h @@ -365,41 +365,11 @@ struct qlcnic_hardware_context { u8 pci_func; u8 linkup; u8 loopback_state; - u8 beacon_state; - u8 has_link_events; - u8 fw_type; - u8 physical_port; - u8 reset_context; - u8 msix_supported; - u8 max_mac_filters; - u8 mc_enabled; - u8 max_mc_count; - u8 diag_test; - u8 num_msix; - u8 nic_mode; - char diag_cnt; - u16 port_type; u16 board_type; - u16 link_speed; - u16 link_duplex; - u16 link_autoneg; - u16 module_type; - - u16 op_mode; - u16 switch_mode; - u16 max_tx_ques; - u16 max_rx_ques; - u16 max_mtu; - u32 msg_enable; - u16 act_pci_func; + u8 beacon_state; - u32 capabilities; - u32 temp; - u32 int_vec_bit; - u32 fw_hal_version; - struct qlcnic_hardware_ops *hw_ops; struct qlcnic_nic_intr_coalesce coal; struct qlcnic_fw_dump fw_dump; }; @@ -460,7 +430,6 @@ struct qlcnic_host_sds_ring { } ____cacheline_internodealigned_in_smp; struct qlcnic_host_tx_ring { - u16 ctx_id; u32 producer; u32 sw_consumer; u32 num_desc; @@ -925,7 +894,6 @@ struct qlcnic_adapter { unsigned long state; u32 flags; - int max_drv_tx_rings; u16 num_txd; u16 num_rxd; u16 num_jumbo_rxd; @@ -934,28 +902,57 @@ struct qlcnic_adapter { u8 max_rds_rings; u8 max_sds_rings; + u8 msix_supported; u8 portnum; + u8 physical_port; + u8 reset_context; + u8 mc_enabled; + u8 max_mc_count; u8 fw_wait_cnt; u8 fw_fail_cnt; u8 tx_timeo_cnt; u8 need_fw_reset; + u8 has_link_events; + u8 fw_type; + u16 tx_context_id; u16 is_up; + + u16 link_speed; + u16 link_duplex; + u16 link_autoneg; + u16 module_type; + + u16 op_mode; + u16 switch_mode; + u16 max_tx_ques; + u16 max_rx_ques; + u16 max_mtu; u16 pvid; + u32 fw_hal_version; + u32 capabilities; u32 irq; + u32 temp; + + u32 int_vec_bit; u32 heartbeat; + u8 max_mac_filters; u8 dev_state; + u8 diag_test; + char diag_cnt; u8 reset_ack_timeo; u8 dev_init_timeo; + u16 msg_enable; u8 mac_addr[ETH_ALEN]; u64 dev_rst_time; u8 mac_learn; unsigned long vlans[BITS_TO_LONGS(VLAN_N_VID)]; + struct qlcnic_npar_info *npars; struct qlcnic_eswitch *eswitch; struct qlcnic_nic_template *nic_ops; @@ -969,8 +966,10 @@ struct qlcnic_adapter { void __iomem *isr_int_vec; struct msix_entry *msix_entries; + struct delayed_work fw_work; + struct qlcnic_filter_hash fhash; spinlock_t tx_clean_lock; @@ -1051,7 +1050,6 @@ struct qlcnic_npar_info { u8 mac_anti_spoof; u8 promisc_mode; u8 offload_flags; - u8 pci_func; }; struct qlcnic_eswitch { @@ -1280,7 +1278,7 @@ struct qlcnic_cmd_args { int qlcnic_fw_cmd_get_minidump_temp(struct qlcnic_adapter *adapter); int qlcnic_fw_cmd_set_port(struct qlcnic_adapter *adapter, u32 config); -int qlcnic_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong off); +u32 qlcnic_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong off); int qlcnic_hw_write_wx_2M(struct qlcnic_adapter *, ulong off, u32 data); int qlcnic_pci_mem_write_2M(struct qlcnic_adapter *, u64 off, u64 data); int qlcnic_pci_mem_read_2M(struct qlcnic_adapter *, u64 off, u64 *data); @@ -1346,7 +1344,7 @@ int qlcnic_rom_fast_read_words(struct qlcnic_adapter *adapter, int addr, int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter); void qlcnic_free_sw_resources(struct qlcnic_adapter *adapter); -void __iomem *qlcnic_get_ioaddr(struct qlcnic_hardware_context *, u32); +void __iomem *qlcnic_get_ioaddr(struct qlcnic_adapter *, u32); int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter); void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter); @@ -1445,7 +1443,7 @@ void qlcnic_set_eswitch_port_features(struct qlcnic_adapter *, */ #define QLCNIC_MAX_BOARD_NAME_LEN 100 -struct qlcnic_board_info { +struct qlcnic_brdinfo { unsigned short vendor; unsigned short device; unsigned short sub_vendor; @@ -1453,6 +1451,30 @@ struct qlcnic_board_info { char short_name[QLCNIC_MAX_BOARD_NAME_LEN]; }; +static const struct qlcnic_brdinfo qlcnic_boards[] = { + {0x1077, 0x8020, 0x1077, 0x203, + "8200 Series Single Port 10GbE Converged Network Adapter " + "(TCP/IP Networking)"}, + {0x1077, 0x8020, 0x1077, 0x207, + "8200 Series Dual Port 10GbE Converged Network Adapter " + "(TCP/IP Networking)"}, + {0x1077, 0x8020, 0x1077, 0x20b, + "3200 Series Dual Port 10Gb Intelligent Ethernet Adapter"}, + {0x1077, 0x8020, 0x1077, 0x20c, + "3200 Series Quad Port 1Gb Intelligent Ethernet Adapter"}, + {0x1077, 0x8020, 0x1077, 0x20f, + "3200 Series Single Port 10Gb Intelligent Ethernet Adapter"}, + {0x1077, 0x8020, 0x103c, 0x3733, + "NC523SFP 10Gb 2-port Server Adapter"}, + {0x1077, 0x8020, 0x103c, 0x3346, + "CN1000Q Dual Port Converged Network Adapter"}, + {0x1077, 0x8020, 0x1077, 0x210, + "QME8242-k 10GbE Dual Port Mezzanine Card"}, + {0x1077, 0x8020, 0x0, 0x0, "cLOM8214 1/10GbE Controller"}, +}; + +#define NUM_SUPPORTED_BOARDS ARRAY_SIZE(qlcnic_boards) + static inline u32 qlcnic_tx_avail(struct qlcnic_host_tx_ring *tx_ring) { if (likely(tx_ring->producer < tx_ring->sw_consumer)) @@ -1487,17 +1509,10 @@ struct qlcnic_nic_template { }; #define QLCDB(adapter, lvl, _fmt, _args...) do { \ - if (NETIF_MSG_##lvl & adapter->ahw->msg_enable) \ + if (NETIF_MSG_##lvl & adapter->msg_enable) \ printk(KERN_INFO "%s: %s: " _fmt, \ dev_name(&adapter->pdev->dev), \ __func__, ##_args); \ } while (0) -#define PCI_DEVICE_ID_QLOGIC_QLE824X 0x8020 -static inline bool qlcnic_82xx_check(struct qlcnic_adapter *adapter) -{ - unsigned short device = adapter->pdev->device; - return (device == PCI_DEVICE_ID_QLOGIC_QLE824X) ? true : false; -} - #endif /* __QLCNIC_H_ */ diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c index 58f094ca052e..bd31104557b4 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c @@ -7,18 +7,6 @@ #include "qlcnic.h" -static int qlcnic_is_valid_nic_func(struct qlcnic_adapter *adapter, u8 pci_func) -{ - int i; - - for (i = 0; i < adapter->ahw->act_pci_func; i++) { - if (adapter->npars[i].pci_func == pci_func) - return i; - } - - return -1; -} - static u32 qlcnic_poll_rsp(struct qlcnic_adapter *adapter) { @@ -47,7 +35,7 @@ qlcnic_issue_cmd(struct qlcnic_adapter *adapter, struct qlcnic_cmd_args *cmd) struct qlcnic_hardware_context *ahw = adapter->ahw; signature = QLCNIC_CDRP_SIGNATURE_MAKE(ahw->pci_func, - adapter->ahw->fw_hal_version); + adapter->fw_hal_version); /* Acquire semaphore before accessing CRB */ if (qlcnic_api_lock(adapter)) { @@ -467,7 +455,8 @@ qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter) temp = le32_to_cpu(prsp->cds_ring.host_producer_crb); tx_ring->crb_cmd_producer = adapter->ahw->pci_base0 + temp; - adapter->tx_ring->ctx_id = le16_to_cpu(prsp->context_id); + adapter->tx_context_id = + le16_to_cpu(prsp->context_id); } else { dev_err(&adapter->pdev->dev, "Failed to create tx ctx in firmware%d\n", err); @@ -489,7 +478,7 @@ qlcnic_fw_cmd_destroy_tx_ctx(struct qlcnic_adapter *adapter) struct qlcnic_cmd_args cmd; memset(&cmd, 0, sizeof(cmd)); - cmd.req.arg1 = adapter->tx_ring->ctx_id; + cmd.req.arg1 = adapter->tx_context_id; cmd.req.arg2 = QLCNIC_DESTROY_CTX_RESET; cmd.req.arg3 = 0; cmd.req.cmd = QLCNIC_CDRP_CMD_DESTROY_TX_CTX; @@ -761,7 +750,7 @@ int qlcnic_set_nic_info(struct qlcnic_adapter *adapter, struct qlcnic_info *nic) struct qlcnic_info_le *nic_info; size_t nic_size = sizeof(struct qlcnic_info_le); - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) + if (adapter->op_mode != QLCNIC_MGMT_FUNC) return err; nic_info_addr = dma_alloc_coherent(&adapter->pdev->dev, nic_size, @@ -829,14 +818,11 @@ int qlcnic_get_pci_info(struct qlcnic_adapter *adapter, qlcnic_issue_cmd(adapter, &cmd); err = cmd.rsp.cmd; - adapter->ahw->act_pci_func = 0; if (err == QLCNIC_RCODE_SUCCESS) { for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++, npar++, pci_info++) { pci_info->id = le16_to_cpu(npar->id); pci_info->active = le16_to_cpu(npar->active); pci_info->type = le16_to_cpu(npar->type); - if (pci_info->type == QLCNIC_TYPE_NIC) - adapter->ahw->act_pci_func++; pci_info->default_port = le16_to_cpu(npar->default_port); pci_info->tx_min_bw = @@ -864,8 +850,8 @@ int qlcnic_config_port_mirroring(struct qlcnic_adapter *adapter, u8 id, u32 arg1; struct qlcnic_cmd_args cmd; - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC || - !(adapter->eswitch[id].flags & QLCNIC_SWITCH_ENABLE)) + if (adapter->op_mode != QLCNIC_MGMT_FUNC || + !(adapter->eswitch[id].flags & QLCNIC_SWITCH_ENABLE)) return err; arg1 = id | (enable_mirroring ? BIT_4 : 0); @@ -904,8 +890,8 @@ int qlcnic_get_port_stats(struct qlcnic_adapter *adapter, const u8 func, if (esw_stats == NULL) return -ENOMEM; - if ((adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) && - (func != adapter->ahw->pci_func)) { + if (adapter->op_mode != QLCNIC_MGMT_FUNC && + func != adapter->ahw->pci_func) { dev_err(&adapter->pdev->dev, "Not privilege to query stats for func=%d", func); return -EIO; @@ -1016,7 +1002,7 @@ int qlcnic_get_eswitch_stats(struct qlcnic_adapter *adapter, const u8 eswitch, if (esw_stats == NULL) return -ENOMEM; - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) + if (adapter->op_mode != QLCNIC_MGMT_FUNC) return -EIO; if (adapter->npars == NULL) return -EIO; @@ -1031,13 +1017,12 @@ int qlcnic_get_eswitch_stats(struct qlcnic_adapter *adapter, const u8 eswitch, esw_stats->numbytes = QLCNIC_STATS_NOT_AVAIL; esw_stats->context_id = eswitch; - for (i = 0; i < adapter->ahw->act_pci_func; i++) { + for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) { if (adapter->npars[i].phy_port != eswitch) continue; memset(&port_stats, 0, sizeof(struct __qlcnic_esw_statistics)); - if (qlcnic_get_port_stats(adapter, adapter->npars[i].pci_func, - rx_tx, &port_stats)) + if (qlcnic_get_port_stats(adapter, i, rx_tx, &port_stats)) continue; esw_stats->size = port_stats.size; @@ -1068,7 +1053,7 @@ int qlcnic_clear_esw_stats(struct qlcnic_adapter *adapter, const u8 func_esw, u32 arg1; struct qlcnic_cmd_args cmd; - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) + if (adapter->op_mode != QLCNIC_MGMT_FUNC) return -EIO; if (func_esw == QLCNIC_STATS_PORT) { @@ -1136,18 +1121,15 @@ op_type = 1 for port vlan_id int qlcnic_config_switch_port(struct qlcnic_adapter *adapter, struct qlcnic_esw_func_cfg *esw_cfg) { - int err = -EIO, index; + int err = -EIO; u32 arg1, arg2 = 0; struct qlcnic_cmd_args cmd; u8 pci_func; - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) + if (adapter->op_mode != QLCNIC_MGMT_FUNC) return err; pci_func = esw_cfg->pci_func; - index = qlcnic_is_valid_nic_func(adapter, pci_func); - if (index < 0) - return err; - arg1 = (adapter->npars[index].phy_port & BIT_0); + arg1 = (adapter->npars[pci_func].phy_port & BIT_0); arg1 |= (pci_func << 8); if (__qlcnic_get_eswitch_port_config(adapter, &arg1, &arg2)) @@ -1159,7 +1141,7 @@ int qlcnic_config_switch_port(struct qlcnic_adapter *adapter, case QLCNIC_PORT_DEFAULTS: arg1 |= (BIT_4 | BIT_6 | BIT_7); arg2 |= (BIT_0 | BIT_1); - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_TSO) + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) arg2 |= (BIT_2 | BIT_3); if (!(esw_cfg->discard_tagged)) arg1 &= ~BIT_4; @@ -1211,17 +1193,11 @@ qlcnic_get_eswitch_port_config(struct qlcnic_adapter *adapter, struct qlcnic_esw_func_cfg *esw_cfg) { u32 arg1, arg2; - int index; u8 phy_port; - - if (adapter->ahw->op_mode == QLCNIC_MGMT_FUNC) { - index = qlcnic_is_valid_nic_func(adapter, esw_cfg->pci_func); - if (index < 0) - return -EIO; - phy_port = adapter->npars[index].phy_port; - } else { - phy_port = adapter->ahw->physical_port; - } + if (adapter->op_mode == QLCNIC_MGMT_FUNC) + phy_port = adapter->npars[esw_cfg->pci_func].phy_port; + else + phy_port = adapter->physical_port; arg1 = phy_port; arg1 |= (esw_cfg->pci_func << 8); if (__qlcnic_get_eswitch_port_config(adapter, &arg1, &arg2)) diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c index 74b98110c5b4..4a9425b56edc 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c @@ -208,9 +208,9 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full); - ethtool_cmd_speed_set(ecmd, adapter->ahw->link_speed); - ecmd->duplex = adapter->ahw->link_duplex; - ecmd->autoneg = adapter->ahw->link_autoneg; + ethtool_cmd_speed_set(ecmd, adapter->link_speed); + ecmd->duplex = adapter->link_duplex; + ecmd->autoneg = adapter->link_autoneg; } else if (adapter->ahw->port_type == QLCNIC_XGBE) { u32 val; @@ -224,10 +224,10 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ecmd->advertising = ADVERTISED_10000baseT_Full; } - if (netif_running(dev) && adapter->ahw->has_link_events) { - ethtool_cmd_speed_set(ecmd, adapter->ahw->link_speed); - ecmd->autoneg = adapter->ahw->link_autoneg; - ecmd->duplex = adapter->ahw->link_duplex; + if (netif_running(dev) && adapter->has_link_events) { + ethtool_cmd_speed_set(ecmd, adapter->link_speed); + ecmd->autoneg = adapter->link_autoneg; + ecmd->duplex = adapter->link_duplex; goto skip; } @@ -238,7 +238,7 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) return -EIO; skip: - ecmd->phy_address = adapter->ahw->physical_port; + ecmd->phy_address = adapter->physical_port; ecmd->transceiver = XCVR_EXTERNAL; switch (adapter->ahw->board_type) { @@ -254,7 +254,7 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ecmd->supported |= SUPPORTED_TP; ecmd->advertising |= ADVERTISED_TP; ecmd->port = PORT_TP; - ecmd->autoneg = adapter->ahw->link_autoneg; + ecmd->autoneg = adapter->link_autoneg; break; case QLCNIC_BRDTYPE_P3P_IMEZ: case QLCNIC_BRDTYPE_P3P_XG_LOM: @@ -270,7 +270,7 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ecmd->advertising |= ADVERTISED_TP; ecmd->supported |= SUPPORTED_TP; check_sfp_module = netif_running(dev) && - adapter->ahw->has_link_events; + adapter->has_link_events; case QLCNIC_BRDTYPE_P3P_10G_XFP: ecmd->supported |= SUPPORTED_FIBRE; ecmd->advertising |= ADVERTISED_FIBRE; @@ -285,7 +285,7 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) (ADVERTISED_FIBRE | ADVERTISED_TP); ecmd->port = PORT_FIBRE; check_sfp_module = netif_running(dev) && - adapter->ahw->has_link_events; + adapter->has_link_events; } else { ecmd->autoneg = AUTONEG_ENABLE; ecmd->supported |= (SUPPORTED_TP | SUPPORTED_Autoneg); @@ -301,7 +301,7 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) } if (check_sfp_module) { - switch (adapter->ahw->module_type) { + switch (adapter->module_type) { case LINKEVENT_MODULE_OPTICAL_UNKNOWN: case LINKEVENT_MODULE_OPTICAL_SRLR: case LINKEVENT_MODULE_OPTICAL_LRM: @@ -359,9 +359,9 @@ qlcnic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) else if (ret) return -EIO; - adapter->ahw->link_speed = ethtool_cmd_speed(ecmd); - adapter->ahw->link_duplex = ecmd->duplex; - adapter->ahw->link_autoneg = ecmd->autoneg; + adapter->link_speed = ethtool_cmd_speed(ecmd); + adapter->link_duplex = ecmd->duplex; + adapter->link_autoneg = ecmd->autoneg; if (!netif_running(dev)) return 0; @@ -508,15 +508,14 @@ qlcnic_set_ringparam(struct net_device *dev, static void qlcnic_get_channels(struct net_device *dev, struct ethtool_channels *channel) { - int min; struct qlcnic_adapter *adapter = netdev_priv(dev); - min = min_t(int, adapter->ahw->max_rx_ques, num_online_cpus()); - channel->max_rx = rounddown_pow_of_two(min); - channel->max_tx = adapter->ahw->max_tx_ques; + channel->max_rx = rounddown_pow_of_two(min_t(int, + adapter->max_rx_ques, num_online_cpus())); + channel->max_tx = adapter->max_tx_ques; channel->rx_count = adapter->max_sds_rings; - channel->tx_count = adapter->ahw->max_tx_ques; + channel->tx_count = adapter->max_tx_ques; } static int qlcnic_set_channels(struct net_device *dev, @@ -544,7 +543,7 @@ qlcnic_get_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause) { struct qlcnic_adapter *adapter = netdev_priv(netdev); - int port = adapter->ahw->physical_port; + int port = adapter->physical_port; __u32 val; if (adapter->ahw->port_type == QLCNIC_GBE) { @@ -589,7 +588,7 @@ qlcnic_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause) { struct qlcnic_adapter *adapter = netdev_priv(netdev); - int port = adapter->ahw->physical_port; + int port = adapter->physical_port; __u32 val; /* read mode */ @@ -704,7 +703,7 @@ static int qlcnic_irq_test(struct net_device *netdev) if (ret) goto clear_it; - adapter->ahw->diag_cnt = 0; + adapter->diag_cnt = 0; memset(&cmd, 0, sizeof(cmd)); cmd.req.cmd = QLCNIC_CDRP_CMD_INTRPT_TEST; cmd.req.arg1 = adapter->ahw->pci_func; @@ -716,7 +715,7 @@ static int qlcnic_irq_test(struct net_device *netdev) msleep(10); - ret = !adapter->ahw->diag_cnt; + ret = !adapter->diag_cnt; done: qlcnic_diag_free_res(netdev, max_sds_rings); @@ -762,7 +761,7 @@ static int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode) qlcnic_create_loopback_buff(skb->data, adapter->mac_addr); skb_put(skb, QLCNIC_ILB_PKT_SIZE); - adapter->ahw->diag_cnt = 0; + adapter->diag_cnt = 0; qlcnic_xmit_frame(skb, adapter->netdev); loop = 0; @@ -771,11 +770,11 @@ static int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode) qlcnic_process_rcv_ring_diag(sds_ring); if (loop++ > QLCNIC_ILB_MAX_RCV_LOOP) break; - } while (!adapter->ahw->diag_cnt); + } while (!adapter->diag_cnt); dev_kfree_skb_any(skb); - if (!adapter->ahw->diag_cnt) + if (!adapter->diag_cnt) QLCDB(adapter, DRV, "LB Test: packet #%d was not received\n", i + 1); else @@ -801,15 +800,14 @@ static int qlcnic_loopback_test(struct net_device *netdev, u8 mode) int loop = 0; int ret; - if (!(adapter->ahw->capabilities & - QLCNIC_FW_CAPABILITY_MULTI_LOOPBACK)) { + if (!(adapter->capabilities & QLCNIC_FW_CAPABILITY_MULTI_LOOPBACK)) { netdev_info(netdev, "Firmware is not loopback test capable\n"); return -EOPNOTSUPP; } QLCDB(adapter, DRV, "%s loopback test in progress\n", mode == QLCNIC_ILB_MODE ? "internal" : "external"); - if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { + if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) { netdev_warn(netdev, "Loopback test not supported for non " "privilege function\n"); return 0; @@ -828,7 +826,7 @@ static int qlcnic_loopback_test(struct net_device *netdev, u8 mode) if (ret) goto free_res; - adapter->ahw->diag_cnt = 0; + adapter->diag_cnt = 0; do { msleep(500); qlcnic_process_rcv_ring_diag(sds_ring); @@ -837,8 +835,8 @@ static int qlcnic_loopback_test(struct net_device *netdev, u8 mode) " configure request\n"); ret = -QLCNIC_FW_NOT_RESPOND; goto free_res; - } else if (adapter->ahw->diag_cnt) { - ret = adapter->ahw->diag_cnt; + } else if (adapter->diag_cnt) { + ret = adapter->diag_cnt; goto free_res; } } while (!QLCNIC_IS_LB_CONFIGURED(adapter->ahw->loopback_state)); @@ -1030,7 +1028,7 @@ static int qlcnic_set_led(struct net_device *dev, int max_sds_rings = adapter->max_sds_rings; int err = -EIO, active = 1; - if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { + if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) { netdev_warn(dev, "LED test not supported for non " "privilege function\n"); return -EOPNOTSUPP; @@ -1209,14 +1207,14 @@ static u32 qlcnic_get_msglevel(struct net_device *netdev) { struct qlcnic_adapter *adapter = netdev_priv(netdev); - return adapter->ahw->msg_enable; + return adapter->msg_enable; } static void qlcnic_set_msglevel(struct net_device *netdev, u32 msglvl) { struct qlcnic_adapter *adapter = netdev_priv(netdev); - adapter->ahw->msg_enable = msglvl; + adapter->msg_enable = msglvl; } static int diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hdr.h b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hdr.h index 49cc1ac4f057..bd5030e51240 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hdr.h +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hdr.h @@ -816,63 +816,55 @@ enum { #define LSD(x) ((uint32_t)((uint64_t)(x))) #define MSD(x) ((uint32_t)((((uint64_t)(x)) >> 16) >> 16)) -#define QLCNIC_MS_CTRL 0x41000090 -#define QLCNIC_MS_ADDR_LO 0x41000094 -#define QLCNIC_MS_ADDR_HI 0x41000098 -#define QLCNIC_MS_WRTDATA_LO 0x410000A0 -#define QLCNIC_MS_WRTDATA_HI 0x410000A4 -#define QLCNIC_MS_WRTDATA_ULO 0x410000B0 -#define QLCNIC_MS_WRTDATA_UHI 0x410000B4 -#define QLCNIC_MS_RDDATA_LO 0x410000A8 -#define QLCNIC_MS_RDDATA_HI 0x410000AC -#define QLCNIC_MS_RDDATA_ULO 0x410000B8 -#define QLCNIC_MS_RDDATA_UHI 0x410000BC - -#define QLCNIC_TA_WRITE_ENABLE (TA_CTL_ENABLE | TA_CTL_WRITE) -#define QLCNIC_TA_WRITE_START (TA_CTL_START | TA_CTL_ENABLE | TA_CTL_WRITE) -#define QLCNIC_TA_START_ENABLE (TA_CTL_START | TA_CTL_ENABLE) - #define QLCNIC_LEGACY_INTR_CONFIG \ { \ { \ .int_vec_bit = PCIX_INT_VECTOR_BIT_F0, \ .tgt_status_reg = ISR_INT_TARGET_STATUS, \ - .tgt_mask_reg = ISR_INT_TARGET_MASK, }, \ + .tgt_mask_reg = ISR_INT_TARGET_MASK, \ + .pci_int_reg = ISR_MSI_INT_TRIGGER(0) }, \ \ { \ .int_vec_bit = PCIX_INT_VECTOR_BIT_F1, \ .tgt_status_reg = ISR_INT_TARGET_STATUS_F1, \ - .tgt_mask_reg = ISR_INT_TARGET_MASK_F1, }, \ + .tgt_mask_reg = ISR_INT_TARGET_MASK_F1, \ + .pci_int_reg = ISR_MSI_INT_TRIGGER(1) }, \ \ { \ .int_vec_bit = PCIX_INT_VECTOR_BIT_F2, \ .tgt_status_reg = ISR_INT_TARGET_STATUS_F2, \ - .tgt_mask_reg = ISR_INT_TARGET_MASK_F2, }, \ + .tgt_mask_reg = ISR_INT_TARGET_MASK_F2, \ + .pci_int_reg = ISR_MSI_INT_TRIGGER(2) }, \ \ { \ .int_vec_bit = PCIX_INT_VECTOR_BIT_F3, \ .tgt_status_reg = ISR_INT_TARGET_STATUS_F3, \ - .tgt_mask_reg = ISR_INT_TARGET_MASK_F3, }, \ + .tgt_mask_reg = ISR_INT_TARGET_MASK_F3, \ + .pci_int_reg = ISR_MSI_INT_TRIGGER(3) }, \ \ { \ .int_vec_bit = PCIX_INT_VECTOR_BIT_F4, \ .tgt_status_reg = ISR_INT_TARGET_STATUS_F4, \ - .tgt_mask_reg = ISR_INT_TARGET_MASK_F4, }, \ + .tgt_mask_reg = ISR_INT_TARGET_MASK_F4, \ + .pci_int_reg = ISR_MSI_INT_TRIGGER(4) }, \ \ { \ .int_vec_bit = PCIX_INT_VECTOR_BIT_F5, \ .tgt_status_reg = ISR_INT_TARGET_STATUS_F5, \ - .tgt_mask_reg = ISR_INT_TARGET_MASK_F5, }, \ + .tgt_mask_reg = ISR_INT_TARGET_MASK_F5, \ + .pci_int_reg = ISR_MSI_INT_TRIGGER(5) }, \ \ { \ .int_vec_bit = PCIX_INT_VECTOR_BIT_F6, \ .tgt_status_reg = ISR_INT_TARGET_STATUS_F6, \ - .tgt_mask_reg = ISR_INT_TARGET_MASK_F6, }, \ + .tgt_mask_reg = ISR_INT_TARGET_MASK_F6, \ + .pci_int_reg = ISR_MSI_INT_TRIGGER(6) }, \ \ { \ .int_vec_bit = PCIX_INT_VECTOR_BIT_F7, \ .tgt_status_reg = ISR_INT_TARGET_STATUS_F7, \ - .tgt_mask_reg = ISR_INT_TARGET_MASK_F7, }, \ + .tgt_mask_reg = ISR_INT_TARGET_MASK_F7, \ + .pci_int_reg = ISR_MSI_INT_TRIGGER(7) }, \ } /* NIU REGS */ diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c index fc48e000f35f..ff879cd2925b 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c @@ -6,7 +6,6 @@ */ #include "qlcnic.h" -#include "qlcnic_hdr.h" #include #include @@ -23,15 +22,6 @@ #define CRB_HI(off) ((crb_hub_agt[CRB_BLK(off)] << 20) | ((off) & 0xf0000)) #define CRB_INDIRECT_2M (0x1e0000UL) -struct qlcnic_ms_reg_ctrl { - u32 ocm_window; - u32 control; - u32 hi; - u32 low; - u32 rd[4]; - u32 wd[4]; - u64 off; -}; #ifndef readq static inline u64 readq(void __iomem *addr) @@ -276,44 +266,10 @@ static const unsigned crb_hub_agt[64] = { 0, }; -static const u32 msi_tgt_status[8] = { - ISR_INT_TARGET_STATUS, ISR_INT_TARGET_STATUS_F1, - ISR_INT_TARGET_STATUS_F2, ISR_INT_TARGET_STATUS_F3, - ISR_INT_TARGET_STATUS_F4, ISR_INT_TARGET_STATUS_F5, - ISR_INT_TARGET_STATUS_F6, ISR_INT_TARGET_STATUS_F7 -}; - /* PCI Windowing for DDR regions. */ #define QLCNIC_PCIE_SEM_TIMEOUT 10000 -static void qlcnic_read_window_reg(u32 addr, void __iomem *bar0, u32 *data) -{ - u32 dest; - void __iomem *val; - - dest = addr & 0xFFFF0000; - val = bar0 + QLCNIC_FW_DUMP_REG1; - writel(dest, val); - readl(val); - val = bar0 + QLCNIC_FW_DUMP_REG2 + LSW(addr); - *data = readl(val); -} - -static void qlcnic_write_window_reg(u32 addr, void __iomem *bar0, u32 data) -{ - u32 dest; - void __iomem *val; - - dest = addr & 0xFFFF0000; - val = bar0 + QLCNIC_FW_DUMP_REG1; - writel(dest, val); - readl(val); - val = bar0 + QLCNIC_FW_DUMP_REG2 + LSW(addr); - writel(data, val); - readl(val); -} - int qlcnic_pcie_sem_lock(struct qlcnic_adapter *adapter, int sem, u32 id_reg) { @@ -344,23 +300,6 @@ qlcnic_pcie_sem_unlock(struct qlcnic_adapter *adapter, int sem) QLCRD32(adapter, QLCNIC_PCIE_REG(PCIE_SEM_UNLOCK(sem))); } -static int qlcnic_ind_rd(struct qlcnic_adapter *adapter, u32 addr) -{ - u32 data; - - if (qlcnic_82xx_check(adapter)) - qlcnic_read_window_reg(addr, adapter->ahw->pci_base0, &data); - else - return -EIO; - return data; -} - -static void qlcnic_ind_wr(struct qlcnic_adapter *adapter, u32 addr, u32 data) -{ - if (qlcnic_82xx_check(adapter)) - qlcnic_write_window_reg(addr, adapter->ahw->pci_base0, data); -} - static int qlcnic_send_cmd_descs(struct qlcnic_adapter *adapter, struct cmd_desc_type0 *cmd_desc_arr, int nr_desc) @@ -495,7 +434,7 @@ void qlcnic_set_multi(struct net_device *netdev) } if ((netdev->flags & IFF_ALLMULTI) || - (netdev_mc_count(netdev) > adapter->ahw->max_mc_count)) { + (netdev_mc_count(netdev) > adapter->max_mc_count)) { mode = VPORT_MISS_MODE_ACCEPT_MULTI; goto send_fw_cmd; } @@ -924,8 +863,9 @@ int qlcnic_set_features(struct net_device *netdev, netdev_features_t features) * 0 if no window access is needed. 'off' is set to 2M addr * In: 'off' is offset from base in 128M pci map */ -static int qlcnic_pci_get_crb_addr_2M(struct qlcnic_hardware_context *ahw, - ulong off, void __iomem **addr) +static int +qlcnic_pci_get_crb_addr_2M(struct qlcnic_adapter *adapter, + ulong off, void __iomem **addr) { const struct crb_128M_2M_sub_block_map *m; @@ -940,7 +880,7 @@ static int qlcnic_pci_get_crb_addr_2M(struct qlcnic_hardware_context *ahw, m = &crb_128M_2M_map[CRB_BLK(off)].sub_block[CRB_SUBBLK(off)]; if (m->valid && (m->start_128M <= off) && (m->end_128M > off)) { - *addr = ahw->pci_base0 + m->start_2M + + *addr = adapter->ahw->pci_base0 + m->start_2M + (off - m->start_128M); return 0; } @@ -948,7 +888,7 @@ static int qlcnic_pci_get_crb_addr_2M(struct qlcnic_hardware_context *ahw, /* * Not in direct map, use crb window */ - *addr = ahw->pci_base0 + CRB_INDIRECT_2M + (off & MASK(16)); + *addr = adapter->ahw->pci_base0 + CRB_INDIRECT_2M + (off & MASK(16)); return 1; } @@ -989,7 +929,7 @@ qlcnic_hw_write_wx_2M(struct qlcnic_adapter *adapter, ulong off, u32 data) int rv; void __iomem *addr = NULL; - rv = qlcnic_pci_get_crb_addr_2M(adapter->ahw, off, &addr); + rv = qlcnic_pci_get_crb_addr_2M(adapter, off, &addr); if (rv == 0) { writel(data, addr); @@ -1014,14 +954,15 @@ qlcnic_hw_write_wx_2M(struct qlcnic_adapter *adapter, ulong off, u32 data) return -EIO; } -int qlcnic_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong off) +u32 +qlcnic_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong off) { unsigned long flags; int rv; u32 data = -1; void __iomem *addr = NULL; - rv = qlcnic_pci_get_crb_addr_2M(adapter->ahw, off, &addr); + rv = qlcnic_pci_get_crb_addr_2M(adapter, off, &addr); if (rv == 0) return readl(addr); @@ -1044,28 +985,46 @@ int qlcnic_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong off) } -void __iomem *qlcnic_get_ioaddr(struct qlcnic_hardware_context *ahw, - u32 offset) +void __iomem * +qlcnic_get_ioaddr(struct qlcnic_adapter *adapter, u32 offset) { void __iomem *addr = NULL; - WARN_ON(qlcnic_pci_get_crb_addr_2M(ahw, offset, &addr)); + WARN_ON(qlcnic_pci_get_crb_addr_2M(adapter, offset, &addr)); return addr; } -static int qlcnic_pci_mem_access_direct(struct qlcnic_adapter *adapter, - u32 window, u64 off, u64 *data, int op) + +static int +qlcnic_pci_set_window_2M(struct qlcnic_adapter *adapter, + u64 addr, u32 *start) { - void __iomem *addr; - u32 start; + u32 window; - mutex_lock(&adapter->ahw->mem_lock); + window = OCM_WIN_P3P(addr); writel(window, adapter->ahw->ocm_win_crb); /* read back to flush */ readl(adapter->ahw->ocm_win_crb); - start = QLCNIC_PCI_OCM0_2M + off; + + *start = QLCNIC_PCI_OCM0_2M + GET_MEM_OFFS_2M(addr); + return 0; +} + +static int +qlcnic_pci_mem_access_direct(struct qlcnic_adapter *adapter, u64 off, + u64 *data, int op) +{ + void __iomem *addr; + int ret; + u32 start; + + mutex_lock(&adapter->ahw->mem_lock); + + ret = qlcnic_pci_set_window_2M(adapter, off, &start); + if (ret != 0) + goto unlock; addr = adapter->ahw->pci_base0 + start; @@ -1074,12 +1033,10 @@ static int qlcnic_pci_mem_access_direct(struct qlcnic_adapter *adapter, else /* write */ writeq(*data, addr); - /* Set window to 0 */ - writel(0, adapter->ahw->ocm_win_crb); - readl(adapter->ahw->ocm_win_crb); - +unlock: mutex_unlock(&adapter->ahw->mem_lock); - return 0; + + return ret; } void @@ -1104,74 +1061,52 @@ qlcnic_pci_camqm_write_2M(struct qlcnic_adapter *adapter, u64 off, u64 data) mutex_unlock(&adapter->ahw->mem_lock); } - - -/* Set MS memory control data for different adapters */ -static void qlcnic_set_ms_controls(struct qlcnic_adapter *adapter, u64 off, - struct qlcnic_ms_reg_ctrl *ms) -{ - ms->control = QLCNIC_MS_CTRL; - ms->low = QLCNIC_MS_ADDR_LO; - ms->hi = QLCNIC_MS_ADDR_HI; - if (off & 0xf) { - ms->wd[0] = QLCNIC_MS_WRTDATA_LO; - ms->rd[0] = QLCNIC_MS_RDDATA_LO; - ms->wd[1] = QLCNIC_MS_WRTDATA_HI; - ms->rd[1] = QLCNIC_MS_RDDATA_HI; - ms->wd[2] = QLCNIC_MS_WRTDATA_ULO; - ms->wd[3] = QLCNIC_MS_WRTDATA_UHI; - ms->rd[2] = QLCNIC_MS_RDDATA_ULO; - ms->rd[3] = QLCNIC_MS_RDDATA_UHI; - } else { - ms->wd[0] = QLCNIC_MS_WRTDATA_ULO; - ms->rd[0] = QLCNIC_MS_RDDATA_ULO; - ms->wd[1] = QLCNIC_MS_WRTDATA_UHI; - ms->rd[1] = QLCNIC_MS_RDDATA_UHI; - ms->wd[2] = QLCNIC_MS_WRTDATA_LO; - ms->wd[3] = QLCNIC_MS_WRTDATA_HI; - ms->rd[2] = QLCNIC_MS_RDDATA_LO; - ms->rd[3] = QLCNIC_MS_RDDATA_HI; - } - - ms->ocm_window = OCM_WIN_P3P(off); - ms->off = GET_MEM_OFFS_2M(off); -} - -int qlcnic_pci_mem_write_2M(struct qlcnic_adapter *adapter, u64 off, u64 data) +int +qlcnic_pci_mem_write_2M(struct qlcnic_adapter *adapter, + u64 off, u64 data) { - int j, ret = 0; + int i, j, ret; u32 temp, off8; - struct qlcnic_ms_reg_ctrl ms; + void __iomem *mem_crb; /* Only 64-bit aligned access */ if (off & 7) return -EIO; - memset(&ms, 0, sizeof(struct qlcnic_ms_reg_ctrl)); - if (!(ADDR_IN_RANGE(off, QLCNIC_ADDR_QDR_NET, - QLCNIC_ADDR_QDR_NET_MAX) || - ADDR_IN_RANGE(off, QLCNIC_ADDR_DDR_NET, - QLCNIC_ADDR_DDR_NET_MAX))) - return -EIO; + /* P3 onward, test agent base for MIU and SIU is same */ + if (ADDR_IN_RANGE(off, QLCNIC_ADDR_QDR_NET, + QLCNIC_ADDR_QDR_NET_MAX)) { + mem_crb = qlcnic_get_ioaddr(adapter, + QLCNIC_CRB_QDR_NET+MIU_TEST_AGT_BASE); + goto correct; + } - qlcnic_set_ms_controls(adapter, off, &ms); + if (ADDR_IN_RANGE(off, QLCNIC_ADDR_DDR_NET, QLCNIC_ADDR_DDR_NET_MAX)) { + mem_crb = qlcnic_get_ioaddr(adapter, + QLCNIC_CRB_DDR_NET+MIU_TEST_AGT_BASE); + goto correct; + } if (ADDR_IN_RANGE(off, QLCNIC_ADDR_OCM0, QLCNIC_ADDR_OCM0_MAX)) - return qlcnic_pci_mem_access_direct(adapter, ms.ocm_window, - ms.off, &data, 1); + return qlcnic_pci_mem_access_direct(adapter, off, &data, 1); + + return -EIO; +correct: off8 = off & ~0xf; mutex_lock(&adapter->ahw->mem_lock); - qlcnic_ind_wr(adapter, ms.low, off8); - qlcnic_ind_wr(adapter, ms.hi, 0); + writel(off8, (mem_crb + MIU_TEST_AGT_ADDR_LO)); + writel(0, (mem_crb + MIU_TEST_AGT_ADDR_HI)); - qlcnic_ind_wr(adapter, ms.control, TA_CTL_ENABLE); - qlcnic_ind_wr(adapter, ms.control, QLCNIC_TA_START_ENABLE); + i = 0; + writel(TA_CTL_ENABLE, (mem_crb + TEST_AGT_CTRL)); + writel((TA_CTL_START | TA_CTL_ENABLE), + (mem_crb + TEST_AGT_CTRL)); for (j = 0; j < MAX_CTL_CHECK; j++) { - temp = qlcnic_ind_rd(adapter, ms.control); + temp = readl(mem_crb + TEST_AGT_CTRL); if ((temp & TA_CTL_BUSY) == 0) break; } @@ -1181,18 +1116,24 @@ int qlcnic_pci_mem_write_2M(struct qlcnic_adapter *adapter, u64 off, u64 data) goto done; } - /* This is the modify part of read-modify-write */ - qlcnic_ind_wr(adapter, ms.wd[0], qlcnic_ind_rd(adapter, ms.rd[0])); - qlcnic_ind_wr(adapter, ms.wd[1], qlcnic_ind_rd(adapter, ms.rd[1])); - /* This is the write part of read-modify-write */ - qlcnic_ind_wr(adapter, ms.wd[2], data & 0xffffffff); - qlcnic_ind_wr(adapter, ms.wd[3], (data >> 32) & 0xffffffff); + i = (off & 0xf) ? 0 : 2; + writel(readl(mem_crb + MIU_TEST_AGT_RDDATA(i)), + mem_crb + MIU_TEST_AGT_WRDATA(i)); + writel(readl(mem_crb + MIU_TEST_AGT_RDDATA(i+1)), + mem_crb + MIU_TEST_AGT_WRDATA(i+1)); + i = (off & 0xf) ? 2 : 0; + + writel(data & 0xffffffff, + mem_crb + MIU_TEST_AGT_WRDATA(i)); + writel((data >> 32) & 0xffffffff, + mem_crb + MIU_TEST_AGT_WRDATA(i+1)); - qlcnic_ind_wr(adapter, ms.control, QLCNIC_TA_WRITE_ENABLE); - qlcnic_ind_wr(adapter, ms.control, QLCNIC_TA_WRITE_START); + writel((TA_CTL_ENABLE | TA_CTL_WRITE), (mem_crb + TEST_AGT_CTRL)); + writel((TA_CTL_START | TA_CTL_ENABLE | TA_CTL_WRITE), + (mem_crb + TEST_AGT_CTRL)); for (j = 0; j < MAX_CTL_CHECK; j++) { - temp = qlcnic_ind_rd(adapter, ms.control); + temp = readl(mem_crb + TEST_AGT_CTRL); if ((temp & TA_CTL_BUSY) == 0) break; } @@ -1211,41 +1152,52 @@ int qlcnic_pci_mem_write_2M(struct qlcnic_adapter *adapter, u64 off, u64 data) return ret; } -int qlcnic_pci_mem_read_2M(struct qlcnic_adapter *adapter, u64 off, u64 *data) +int +qlcnic_pci_mem_read_2M(struct qlcnic_adapter *adapter, + u64 off, u64 *data) { int j, ret; u32 temp, off8; u64 val; - struct qlcnic_ms_reg_ctrl ms; + void __iomem *mem_crb; /* Only 64-bit aligned access */ if (off & 7) return -EIO; - if (!(ADDR_IN_RANGE(off, QLCNIC_ADDR_QDR_NET, - QLCNIC_ADDR_QDR_NET_MAX) || - ADDR_IN_RANGE(off, QLCNIC_ADDR_DDR_NET, - QLCNIC_ADDR_DDR_NET_MAX))) - return -EIO; - memset(&ms, 0, sizeof(struct qlcnic_ms_reg_ctrl)); - qlcnic_set_ms_controls(adapter, off, &ms); + /* P3 onward, test agent base for MIU and SIU is same */ + if (ADDR_IN_RANGE(off, QLCNIC_ADDR_QDR_NET, + QLCNIC_ADDR_QDR_NET_MAX)) { + mem_crb = qlcnic_get_ioaddr(adapter, + QLCNIC_CRB_QDR_NET+MIU_TEST_AGT_BASE); + goto correct; + } - if (ADDR_IN_RANGE(off, QLCNIC_ADDR_OCM0, QLCNIC_ADDR_OCM0_MAX)) - return qlcnic_pci_mem_access_direct(adapter, ms.ocm_window, - ms.off, data, 0); + if (ADDR_IN_RANGE(off, QLCNIC_ADDR_DDR_NET, QLCNIC_ADDR_DDR_NET_MAX)) { + mem_crb = qlcnic_get_ioaddr(adapter, + QLCNIC_CRB_DDR_NET+MIU_TEST_AGT_BASE); + goto correct; + } - mutex_lock(&adapter->ahw->mem_lock); + if (ADDR_IN_RANGE(off, QLCNIC_ADDR_OCM0, QLCNIC_ADDR_OCM0_MAX)) { + return qlcnic_pci_mem_access_direct(adapter, + off, data, 0); + } + + return -EIO; +correct: off8 = off & ~0xf; - qlcnic_ind_wr(adapter, ms.low, off8); - qlcnic_ind_wr(adapter, ms.hi, 0); + mutex_lock(&adapter->ahw->mem_lock); - qlcnic_ind_wr(adapter, ms.control, TA_CTL_ENABLE); - qlcnic_ind_wr(adapter, ms.control, QLCNIC_TA_START_ENABLE); + writel(off8, (mem_crb + MIU_TEST_AGT_ADDR_LO)); + writel(0, (mem_crb + MIU_TEST_AGT_ADDR_HI)); + writel(TA_CTL_ENABLE, (mem_crb + TEST_AGT_CTRL)); + writel((TA_CTL_START | TA_CTL_ENABLE), (mem_crb + TEST_AGT_CTRL)); for (j = 0; j < MAX_CTL_CHECK; j++) { - temp = qlcnic_ind_rd(adapter, ms.control); + temp = readl(mem_crb + TEST_AGT_CTRL); if ((temp & TA_CTL_BUSY) == 0) break; } @@ -1256,10 +1208,13 @@ int qlcnic_pci_mem_read_2M(struct qlcnic_adapter *adapter, u64 off, u64 *data) "failed to read through agent\n"); ret = -EIO; } else { + off8 = MIU_TEST_AGT_RDDATA_LO; + if (off & 0xf) + off8 = MIU_TEST_AGT_RDDATA_UPPER_LO; - temp = qlcnic_ind_rd(adapter, ms.rd[3]); + temp = readl(mem_crb + off8 + 4); val = (u64)temp << 32; - val |= qlcnic_ind_rd(adapter, ms.rd[2]); + val |= readl(mem_crb + off8); *data = val; ret = 0; } diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c index de79cde233de..d8610ea56a48 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c @@ -246,8 +246,7 @@ int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter) rds_ring->dma_size = QLCNIC_P3P_RX_JUMBO_BUF_MAX_LEN; - if (adapter->ahw->capabilities & - QLCNIC_FW_CAPABILITY_HW_LRO) + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO) rds_ring->dma_size += QLCNIC_LRO_BUFFER_EXTRA; rds_ring->skb_size = @@ -656,7 +655,7 @@ qlcnic_setup_idc_param(struct qlcnic_adapter *adapter) { "Not an Ethernet NIC func=%u\n", val); return -EIO; } - adapter->ahw->physical_port = (val >> 2); + adapter->physical_port = (val >> 2); if (qlcnic_rom_fast_read(adapter, QLCNIC_ROM_DEV_INIT_TIMEOUT, &timeo)) timeo = QLCNIC_INIT_TIMEOUT_SECS; @@ -997,7 +996,7 @@ qlcnic_get_bootld_offs(struct qlcnic_adapter *adapter) data_desc = qlcnic_get_data_desc(adapter, QLCNIC_UNI_DIR_SECT_BOOTLD, QLCNIC_UNI_BOOTLD_IDX_OFF); - if (adapter->ahw->fw_type == QLCNIC_UNIFIED_ROMIMAGE) + if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE) offs = le32_to_cpu(data_desc->findex); return (u8 *)&adapter->fw->data[offs]; @@ -1011,7 +1010,7 @@ qlcnic_get_fw_offs(struct qlcnic_adapter *adapter) data_desc = qlcnic_get_data_desc(adapter, QLCNIC_UNI_DIR_SECT_FW, QLCNIC_UNI_FIRMWARE_IDX_OFF); - if (adapter->ahw->fw_type == QLCNIC_UNIFIED_ROMIMAGE) + if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE) offs = le32_to_cpu(data_desc->findex); return (u8 *)&adapter->fw->data[offs]; @@ -1025,7 +1024,7 @@ static u32 qlcnic_get_fw_size(struct qlcnic_adapter *adapter) data_desc = qlcnic_get_data_desc(adapter, QLCNIC_UNI_DIR_SECT_FW, QLCNIC_UNI_FIRMWARE_IDX_OFF); - if (adapter->ahw->fw_type == QLCNIC_UNIFIED_ROMIMAGE) + if (adapter->fw_type == QLCNIC_UNIFIED_ROMIMAGE) return le32_to_cpu(data_desc->size); else return le32_to_cpu(*(__le32 *)&unirom[QLCNIC_FW_SIZE_OFFSET]); @@ -1040,7 +1039,7 @@ static u32 qlcnic_get_fw_version(struct qlcnic_adapter *adapter) const u8 *ver_str; int i, ret; - if (adapter->ahw->fw_type != QLCNIC_UNIFIED_ROMIMAGE) { + if (adapter->fw_type != QLCNIC_UNIFIED_ROMIMAGE) { version_offset = *(__le32 *)&fw->data[QLCNIC_FW_VERSION_OFFSET]; return le32_to_cpu(version_offset); } @@ -1071,7 +1070,7 @@ static u32 qlcnic_get_bios_version(struct qlcnic_adapter *adapter) u8 *version_offset; __le32 temp; - if (adapter->ahw->fw_type != QLCNIC_UNIFIED_ROMIMAGE) { + if (adapter->fw_type != QLCNIC_UNIFIED_ROMIMAGE) { version_offset = (u8 *)&fw->data[QLCNIC_BIOS_VERSION_OFFSET]; return le32_to_cpu(*(__le32 *)version_offset); } @@ -1142,7 +1141,7 @@ qlcnic_load_firmware(struct qlcnic_adapter *adapter) struct pci_dev *pdev = adapter->pdev; dev_info(&pdev->dev, "loading firmware from %s\n", - fw_name[adapter->ahw->fw_type]); + fw_name[adapter->fw_type]); if (fw) { u64 data; @@ -1234,7 +1233,7 @@ qlcnic_validate_firmware(struct qlcnic_adapter *adapter) u32 ver, bios, min_size; struct pci_dev *pdev = adapter->pdev; const struct firmware *fw = adapter->fw; - u8 fw_type = adapter->ahw->fw_type; + u8 fw_type = adapter->fw_type; if (fw_type == QLCNIC_UNIFIED_ROMIMAGE) { if (qlcnic_validate_unified_romimage(adapter)) @@ -1279,7 +1278,7 @@ qlcnic_get_next_fwtype(struct qlcnic_adapter *adapter) { u8 fw_type; - switch (adapter->ahw->fw_type) { + switch (adapter->fw_type) { case QLCNIC_UNKNOWN_ROMIMAGE: fw_type = QLCNIC_UNIFIED_ROMIMAGE; break; @@ -1290,7 +1289,7 @@ qlcnic_get_next_fwtype(struct qlcnic_adapter *adapter) break; } - adapter->ahw->fw_type = fw_type; + adapter->fw_type = fw_type; } @@ -1300,17 +1299,16 @@ void qlcnic_request_firmware(struct qlcnic_adapter *adapter) struct pci_dev *pdev = adapter->pdev; int rc; - adapter->ahw->fw_type = QLCNIC_UNKNOWN_ROMIMAGE; + adapter->fw_type = QLCNIC_UNKNOWN_ROMIMAGE; next: qlcnic_get_next_fwtype(adapter); - if (adapter->ahw->fw_type == QLCNIC_FLASH_ROMIMAGE) { + if (adapter->fw_type == QLCNIC_FLASH_ROMIMAGE) { adapter->fw = NULL; } else { rc = request_firmware(&adapter->fw, - fw_name[adapter->ahw->fw_type], - &pdev->dev); + fw_name[adapter->fw_type], &pdev->dev); if (rc != 0) goto next; diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c index 6f82812d0fab..ba352c18c358 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c @@ -66,7 +66,7 @@ (((sts_data) >> 58) & 0x03F) #define qlcnic_get_lro_sts_refhandle(sts_data) \ - ((sts_data) & 0x07FFF) + ((sts_data) & 0x0FFFF) #define qlcnic_get_lro_sts_length(sts_data) \ (((sts_data) >> 16) & 0x0FFFF) #define qlcnic_get_lro_sts_l2_hdr_offset(sts_data) \ @@ -709,7 +709,7 @@ static void qlcnic_handle_linkevent(struct qlcnic_adapter *adapter, u8 link_status, module, duplex, autoneg, lb_status = 0; struct net_device *netdev = adapter->netdev; - adapter->ahw->has_link_events = 1; + adapter->has_link_events = 1; cable_OUI = msg->body[1] & 0xffffffff; cable_len = (msg->body[1] >> 32) & 0xffff; @@ -736,18 +736,18 @@ static void qlcnic_handle_linkevent(struct qlcnic_adapter *adapter, qlcnic_advert_link_change(adapter, link_status); if (duplex == LINKEVENT_FULL_DUPLEX) - adapter->ahw->link_duplex = DUPLEX_FULL; + adapter->link_duplex = DUPLEX_FULL; else - adapter->ahw->link_duplex = DUPLEX_HALF; + adapter->link_duplex = DUPLEX_HALF; - adapter->ahw->module_type = module; - adapter->ahw->link_autoneg = autoneg; + adapter->module_type = module; + adapter->link_autoneg = autoneg; if (link_status) { - adapter->ahw->link_speed = link_speed; + adapter->link_speed = link_speed; } else { - adapter->ahw->link_speed = SPEED_UNKNOWN; - adapter->ahw->link_duplex = DUPLEX_UNKNOWN; + adapter->link_speed = SPEED_UNKNOWN; + adapter->link_duplex = DUPLEX_UNKNOWN; } } @@ -785,17 +785,17 @@ static void qlcnic_handle_fw_message(int desc_cnt, int index, break; case 1: dev_info(dev, "loopback already in progress\n"); - adapter->ahw->diag_cnt = -QLCNIC_TEST_IN_PROGRESS; + adapter->diag_cnt = -QLCNIC_TEST_IN_PROGRESS; break; case 2: dev_info(dev, "loopback cable is not connected\n"); - adapter->ahw->diag_cnt = -QLCNIC_LB_CABLE_NOT_CONN; + adapter->diag_cnt = -QLCNIC_LB_CABLE_NOT_CONN; break; default: dev_info(dev, "loopback configure request failed, err %x\n", ret); - adapter->ahw->diag_cnt = -QLCNIC_UNDEFINED_ERROR; + adapter->diag_cnt = -QLCNIC_UNDEFINED_ERROR; break; } break; @@ -1169,7 +1169,7 @@ static void qlcnic_process_rcv_diag(struct qlcnic_adapter *adapter, int ring, skb_pull(skb, pkt_offset); if (!qlcnic_check_loopback_buff(skb->data, adapter->mac_addr)) - adapter->ahw->diag_cnt++; + adapter->diag_cnt++; else dump_skb(skb, adapter); diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index 8d58092bd060..1eef0bf36aa6 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c @@ -34,29 +34,29 @@ static int qlcnic_mac_learn; module_param(qlcnic_mac_learn, int, 0444); MODULE_PARM_DESC(qlcnic_mac_learn, "Mac Filter (0=disabled, 1=enabled)"); -static int qlcnic_use_msi = 1; +static int use_msi = 1; +module_param(use_msi, int, 0444); MODULE_PARM_DESC(use_msi, "MSI interrupt (0=disabled, 1=enabled"); -module_param_named(use_msi, qlcnic_use_msi, int, 0444); -static int qlcnic_use_msi_x = 1; +static int use_msi_x = 1; +module_param(use_msi_x, int, 0444); MODULE_PARM_DESC(use_msi_x, "MSI-X interrupt (0=disabled, 1=enabled"); -module_param_named(use_msi_x, qlcnic_use_msi_x, int, 0444); -static int qlcnic_auto_fw_reset = 1; +static int auto_fw_reset = 1; +module_param(auto_fw_reset, int, 0644); MODULE_PARM_DESC(auto_fw_reset, "Auto firmware reset (0=disabled, 1=enabled"); -module_param_named(auto_fw_reset, qlcnic_auto_fw_reset, int, 0644); -static int qlcnic_load_fw_file; +static int load_fw_file; +module_param(load_fw_file, int, 0444); MODULE_PARM_DESC(load_fw_file, "Load firmware from (0=flash, 1=file"); -module_param_named(load_fw_file, qlcnic_load_fw_file, int, 0444); static int qlcnic_config_npars; module_param(qlcnic_config_npars, int, 0444); MODULE_PARM_DESC(qlcnic_config_npars, "Configure NPARs (0=disabled, 1=enabled"); -static int qlcnic_probe(struct pci_dev *pdev, +static int __devinit qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent); -static void qlcnic_remove(struct pci_dev *pdev); +static void __devexit qlcnic_remove(struct pci_dev *pdev); static int qlcnic_open(struct net_device *netdev); static int qlcnic_close(struct net_device *netdev); static void qlcnic_tx_timeout(struct net_device *netdev); @@ -91,9 +91,6 @@ static void qlcnic_set_netdev_features(struct qlcnic_adapter *, static int qlcnic_vlan_rx_add(struct net_device *, u16); static int qlcnic_vlan_rx_del(struct net_device *, u16); -#define QLCNIC_IS_TSO_CAPABLE(adapter) \ - ((adapter)->ahw->capabilities & QLCNIC_FW_CAPABILITY_TSO) - /* PCI Device ID Table */ #define ENTRY(device) \ {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, (device)), \ @@ -121,30 +118,6 @@ static const u32 msi_tgt_status[8] = { ISR_INT_TARGET_STATUS_F6, ISR_INT_TARGET_STATUS_F7 }; -static const struct qlcnic_board_info qlcnic_boards[] = { - {0x1077, 0x8020, 0x1077, 0x203, - "8200 Series Single Port 10GbE Converged Network Adapter" - "(TCP/IP Networking)"}, - {0x1077, 0x8020, 0x1077, 0x207, - "8200 Series Dual Port 10GbE Converged Network Adapter" - "(TCP/IP Networking)"}, - {0x1077, 0x8020, 0x1077, 0x20b, - "3200 Series Dual Port 10Gb Intelligent Ethernet Adapter"}, - {0x1077, 0x8020, 0x1077, 0x20c, - "3200 Series Quad Port 1Gb Intelligent Ethernet Adapter"}, - {0x1077, 0x8020, 0x1077, 0x20f, - "3200 Series Single Port 10Gb Intelligent Ethernet Adapter"}, - {0x1077, 0x8020, 0x103c, 0x3733, - "NC523SFP 10Gb 2-port Server Adapter"}, - {0x1077, 0x8020, 0x103c, 0x3346, - "CN1000Q Dual Port Converged Network Adapter"}, - {0x1077, 0x8020, 0x1077, 0x210, - "QME8242-k 10GbE Dual Port Mezzanine Card"}, - {0x1077, 0x8020, 0x0, 0x0, "cLOM8214 1/10GbE Controller"}, -}; - -#define NUM_SUPPORTED_BOARDS ARRAY_SIZE(qlcnic_boards) - static const struct qlcnic_legacy_intr_set legacy_intr[] = QLCNIC_LEGACY_INTR_CONFIG; @@ -288,7 +261,7 @@ static int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix) adapter->flags &= ~(QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED); qlcnic_set_msix_bit(pdev, 0); - if (adapter->ahw->msix_supported) { + if (adapter->msix_supported) { enable_msix: qlcnic_init_msix_entries(adapter, num_msix); err = pci_enable_msix(pdev, adapter->msix_entries, num_msix); @@ -310,31 +283,32 @@ static int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix) return err; } + static void qlcnic_enable_msi_legacy(struct qlcnic_adapter *adapter) { - u32 offset, mask_reg; const struct qlcnic_legacy_intr_set *legacy_intrp; - struct qlcnic_hardware_context *ahw = adapter->ahw; struct pci_dev *pdev = adapter->pdev; - if (qlcnic_use_msi && !pci_enable_msi(pdev)) { + if (use_msi && !pci_enable_msi(pdev)) { adapter->flags |= QLCNIC_MSI_ENABLED; - offset = msi_tgt_status[adapter->ahw->pci_func]; - adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter->ahw, - offset); + adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter, + msi_tgt_status[adapter->ahw->pci_func]); dev_info(&pdev->dev, "using msi interrupts\n"); adapter->msix_entries[0].vector = pdev->irq; return; } legacy_intrp = &legacy_intr[adapter->ahw->pci_func]; - adapter->ahw->int_vec_bit = legacy_intrp->int_vec_bit; - offset = legacy_intrp->tgt_status_reg; - adapter->tgt_status_reg = qlcnic_get_ioaddr(ahw, offset); - mask_reg = legacy_intrp->tgt_mask_reg; - adapter->tgt_mask_reg = qlcnic_get_ioaddr(ahw, mask_reg); - adapter->isr_int_vec = qlcnic_get_ioaddr(ahw, ISR_INT_VECTOR); - adapter->crb_int_state_reg = qlcnic_get_ioaddr(ahw, ISR_INT_STATE_REG); + + adapter->int_vec_bit = legacy_intrp->int_vec_bit; + adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter, + legacy_intrp->tgt_status_reg); + adapter->tgt_mask_reg = qlcnic_get_ioaddr(adapter, + legacy_intrp->tgt_mask_reg); + adapter->isr_int_vec = qlcnic_get_ioaddr(adapter, ISR_INT_VECTOR); + + adapter->crb_int_state_reg = qlcnic_get_ioaddr(adapter, + ISR_INT_STATE_REG); dev_info(&pdev->dev, "using legacy interrupts\n"); adapter->msix_entries[0].vector = pdev->irq; } @@ -344,7 +318,7 @@ qlcnic_setup_intr(struct qlcnic_adapter *adapter) { int num_msix; - if (adapter->ahw->msix_supported) { + if (adapter->msix_supported) { num_msix = rounddown_pow_of_two(min_t(int, num_online_cpus(), QLCNIC_DEF_NUM_STS_DESC_RINGS)); } else @@ -372,25 +346,19 @@ qlcnic_cleanup_pci_map(struct qlcnic_adapter *adapter) iounmap(adapter->ahw->pci_base0); } -static int qlcnic_init_pci_info(struct qlcnic_adapter *adapter) +static int +qlcnic_init_pci_info(struct qlcnic_adapter *adapter) { struct qlcnic_pci_info *pci_info; - int i, ret = 0, j = 0; - u16 act_pci_func; + int i, ret = 0; u8 pfn; pci_info = kcalloc(QLCNIC_MAX_PCI_FUNC, sizeof(*pci_info), GFP_KERNEL); if (!pci_info) return -ENOMEM; - ret = qlcnic_get_pci_info(adapter, pci_info); - if (ret) - goto err_pci_info; - - act_pci_func = adapter->ahw->act_pci_func; - adapter->npars = kzalloc(sizeof(struct qlcnic_npar_info) * - act_pci_func, GFP_KERNEL); + QLCNIC_MAX_PCI_FUNC, GFP_KERNEL); if (!adapter->npars) { ret = -ENOMEM; goto err_pci_info; @@ -403,25 +371,21 @@ static int qlcnic_init_pci_info(struct qlcnic_adapter *adapter) goto err_npars; } + ret = qlcnic_get_pci_info(adapter, pci_info); + if (ret) + goto err_eswitch; + for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) { pfn = pci_info[i].id; - if (pfn >= QLCNIC_MAX_PCI_FUNC) { ret = QL_STATUS_INVALID_PARAM; goto err_eswitch; } - - if (!pci_info[i].active || - (pci_info[i].type != QLCNIC_TYPE_NIC)) - continue; - - adapter->npars[j].pci_func = pfn; - adapter->npars[j].active = (u8)pci_info[i].active; - adapter->npars[j].type = (u8)pci_info[i].type; - adapter->npars[j].phy_port = (u8)pci_info[i].default_port; - adapter->npars[j].min_bw = pci_info[i].tx_min_bw; - adapter->npars[j].max_bw = pci_info[i].tx_max_bw; - j++; + adapter->npars[pfn].active = (u8)pci_info[i].active; + adapter->npars[pfn].type = (u8)pci_info[i].type; + adapter->npars[pfn].phy_port = (u8)pci_info[i].default_port; + adapter->npars[pfn].min_bw = pci_info[i].tx_min_bw; + adapter->npars[pfn].max_bw = pci_info[i].tx_max_bw; } for (i = 0; i < QLCNIC_NIU_MAX_XG_PORTS; i++) @@ -449,7 +413,7 @@ qlcnic_set_function_modes(struct qlcnic_adapter *adapter) u32 ref_count; int i, ret = 1; u32 data = QLCNIC_MGMT_FUNC; - struct qlcnic_hardware_context *ahw = adapter->ahw; + void __iomem *priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE; /* If other drivers are not in use set their privilege level */ ref_count = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); @@ -458,20 +422,21 @@ qlcnic_set_function_modes(struct qlcnic_adapter *adapter) goto err_lock; if (qlcnic_config_npars) { - for (i = 0; i < ahw->act_pci_func; i++) { - id = adapter->npars[i].pci_func; - if (id == ahw->pci_func) + for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) { + id = i; + if (adapter->npars[i].type != QLCNIC_TYPE_NIC || + id == adapter->ahw->pci_func) continue; data |= (qlcnic_config_npars & QLC_DEV_SET_DRV(0xf, id)); } } else { - data = QLCRD32(adapter, QLCNIC_DRV_OP_MODE); - data = (data & ~QLC_DEV_SET_DRV(0xf, ahw->pci_func)) | + data = readl(priv_op); + data = (data & ~QLC_DEV_SET_DRV(0xf, adapter->ahw->pci_func)) | (QLC_DEV_SET_DRV(QLCNIC_MGMT_FUNC, - ahw->pci_func)); + adapter->ahw->pci_func)); } - QLCWR32(adapter, QLCNIC_DRV_OP_MODE, data); + writel(data, priv_op); qlcnic_api_unlock(adapter); err_lock: return ret; @@ -487,8 +452,8 @@ qlcnic_check_vf(struct qlcnic_adapter *adapter) u32 op_mode, priv_level; /* Determine FW API version */ - adapter->ahw->fw_hal_version = readl(adapter->ahw->pci_base0 + - QLCNIC_FW_API); + adapter->fw_hal_version = readl(adapter->ahw->pci_base0 + + QLCNIC_FW_API); /* Find PCI function number */ pci_read_config_dword(adapter->pdev, QLCNIC_MSIX_TABLE_OFFSET, &func); @@ -506,41 +471,29 @@ qlcnic_check_vf(struct qlcnic_adapter *adapter) priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func); if (priv_level == QLCNIC_NON_PRIV_FUNC) { - adapter->ahw->op_mode = QLCNIC_NON_PRIV_FUNC; + adapter->op_mode = QLCNIC_NON_PRIV_FUNC; dev_info(&adapter->pdev->dev, "HAL Version: %d Non Privileged function\n", - adapter->ahw->fw_hal_version); + adapter->fw_hal_version); adapter->nic_ops = &qlcnic_vf_ops; } else adapter->nic_ops = &qlcnic_ops; } -#define QLCNIC_82XX_BAR0_LENGTH 0x00200000UL -static void qlcnic_get_bar_length(u32 dev_id, ulong *bar) -{ - switch (dev_id) { - case PCI_DEVICE_ID_QLOGIC_QLE824X: - *bar = QLCNIC_82XX_BAR0_LENGTH; - break; - default: - *bar = 0; - } -} - -static int qlcnic_setup_pci_map(struct pci_dev *pdev, - struct qlcnic_hardware_context *ahw) +static int +qlcnic_setup_pci_map(struct qlcnic_adapter *adapter) { - u32 offset; void __iomem *mem_ptr0 = NULL; resource_size_t mem_base; - unsigned long mem_len, pci_len0 = 0, bar0_len; + unsigned long mem_len, pci_len0 = 0; + + struct pci_dev *pdev = adapter->pdev; /* remap phys address */ mem_base = pci_resource_start(pdev, 0); /* 0 is for BAR 0 */ mem_len = pci_resource_len(pdev, 0); - qlcnic_get_bar_length(pdev->device, &bar0_len); - if (mem_len >= bar0_len) { + if (mem_len == QLCNIC_PCI_2MB_SIZE) { mem_ptr0 = pci_ioremap_bar(pdev, 0); if (mem_ptr0 == NULL) { @@ -553,15 +506,20 @@ static int qlcnic_setup_pci_map(struct pci_dev *pdev, } dev_info(&pdev->dev, "%dMB memory map\n", (int)(mem_len>>20)); - ahw->pci_base0 = mem_ptr0; - ahw->pci_len0 = pci_len0; - offset = QLCNIC_PCIX_PS_REG(PCIX_OCM_WINDOW_REG(ahw->pci_func)); - qlcnic_get_ioaddr(ahw, offset); + + adapter->ahw->pci_base0 = mem_ptr0; + adapter->ahw->pci_len0 = pci_len0; + + qlcnic_check_vf(adapter); + + adapter->ahw->ocm_win_crb = qlcnic_get_ioaddr(adapter, + QLCNIC_PCIX_PS_REG(PCIX_OCM_WINDOW_REG( + adapter->ahw->pci_func))); return 0; } -static void qlcnic_get_board_name(struct qlcnic_adapter *adapter, char *name) +static void get_brd_name(struct qlcnic_adapter *adapter, char *name) { struct pci_dev *pdev = adapter->pdev; int i, found = 0; @@ -599,7 +557,7 @@ qlcnic_check_options(struct qlcnic_adapter *adapter) adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build); - if (adapter->ahw->op_mode != QLCNIC_NON_PRIV_FUNC) { + if (adapter->op_mode != QLCNIC_NON_PRIV_FUNC) { if (fw_dump->tmpl_hdr == NULL || adapter->fw_version > prev_fw_version) { if (fw_dump->tmpl_hdr) @@ -631,7 +589,7 @@ qlcnic_check_options(struct qlcnic_adapter *adapter) adapter->max_rxd = MAX_RCV_DESCRIPTORS_1G; } - adapter->ahw->msix_supported = !!qlcnic_use_msi_x; + adapter->msix_supported = !!use_msi_x; adapter->num_txd = MAX_CMD_DESCRIPTORS; @@ -644,20 +602,19 @@ qlcnic_initialize_nic(struct qlcnic_adapter *adapter) int err; struct qlcnic_info nic_info; - memset(&nic_info, 0, sizeof(struct qlcnic_info)); err = qlcnic_get_nic_info(adapter, &nic_info, adapter->ahw->pci_func); if (err) return err; - adapter->ahw->physical_port = (u8)nic_info.phys_port; - adapter->ahw->switch_mode = nic_info.switch_mode; - adapter->ahw->max_tx_ques = nic_info.max_tx_ques; - adapter->ahw->max_rx_ques = nic_info.max_rx_ques; - adapter->ahw->capabilities = nic_info.capabilities; - adapter->ahw->max_mac_filters = nic_info.max_mac_filters; - adapter->ahw->max_mtu = nic_info.max_mtu; + adapter->physical_port = (u8)nic_info.phys_port; + adapter->switch_mode = nic_info.switch_mode; + adapter->max_tx_ques = nic_info.max_tx_ques; + adapter->max_rx_ques = nic_info.max_rx_ques; + adapter->capabilities = nic_info.capabilities; + adapter->max_mac_filters = nic_info.max_mac_filters; + adapter->max_mtu = nic_info.max_mtu; - if (adapter->ahw->capabilities & BIT_6) + if (adapter->capabilities & BIT_6) adapter->flags |= QLCNIC_ESWITCH_ENABLED; else adapter->flags &= ~QLCNIC_ESWITCH_ENABLED; @@ -743,7 +700,7 @@ qlcnic_set_netdev_features(struct qlcnic_adapter *adapter, vlan_features = (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_HW_VLAN_FILTER); - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_TSO) { + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) { features |= (NETIF_F_TSO | NETIF_F_TSO6); vlan_features |= (NETIF_F_TSO | NETIF_F_TSO6); } @@ -789,7 +746,7 @@ qlcnic_check_eswitch_mode(struct qlcnic_adapter *adapter) if (adapter->flags & QLCNIC_ESWITCH_ENABLED) { if (priv_level == QLCNIC_MGMT_FUNC) { - adapter->ahw->op_mode = QLCNIC_MGMT_FUNC; + adapter->op_mode = QLCNIC_MGMT_FUNC; err = qlcnic_init_pci_info(adapter); if (err) return err; @@ -797,12 +754,12 @@ qlcnic_check_eswitch_mode(struct qlcnic_adapter *adapter) qlcnic_set_function_modes(adapter); dev_info(&adapter->pdev->dev, "HAL Version: %d, Management function\n", - adapter->ahw->fw_hal_version); + adapter->fw_hal_version); } else if (priv_level == QLCNIC_PRIV_FUNC) { - adapter->ahw->op_mode = QLCNIC_PRIV_FUNC; + adapter->op_mode = QLCNIC_PRIV_FUNC; dev_info(&adapter->pdev->dev, "HAL Version: %d, Privileged function\n", - adapter->ahw->fw_hal_version); + adapter->fw_hal_version); } } @@ -811,7 +768,8 @@ qlcnic_check_eswitch_mode(struct qlcnic_adapter *adapter) return err; } -static int qlcnic_set_default_offload_settings(struct qlcnic_adapter *adapter) +static int +qlcnic_set_default_offload_settings(struct qlcnic_adapter *adapter) { struct qlcnic_esw_func_cfg esw_cfg; struct qlcnic_npar_info *npar; @@ -820,16 +778,16 @@ static int qlcnic_set_default_offload_settings(struct qlcnic_adapter *adapter) if (adapter->need_fw_reset) return 0; - for (i = 0; i < adapter->ahw->act_pci_func; i++) { + for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) { + if (adapter->npars[i].type != QLCNIC_TYPE_NIC) + continue; memset(&esw_cfg, 0, sizeof(struct qlcnic_esw_func_cfg)); - esw_cfg.pci_func = adapter->npars[i].pci_func; + esw_cfg.pci_func = i; + esw_cfg.offload_flags = BIT_0; esw_cfg.mac_override = BIT_0; esw_cfg.promisc_mode = BIT_0; - if (qlcnic_82xx_check(adapter)) { - esw_cfg.offload_flags = BIT_0; - if (QLCNIC_IS_TSO_CAPABLE(adapter)) - esw_cfg.offload_flags |= (BIT_1 | BIT_2); - } + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) + esw_cfg.offload_flags |= (BIT_1 | BIT_2); if (qlcnic_config_switch_port(adapter, &esw_cfg)) return -EIO; npar = &adapter->npars[i]; @@ -867,24 +825,22 @@ qlcnic_reset_eswitch_config(struct qlcnic_adapter *adapter, return 0; } -static int qlcnic_reset_npar_config(struct qlcnic_adapter *adapter) +static int +qlcnic_reset_npar_config(struct qlcnic_adapter *adapter) { int i, err; struct qlcnic_npar_info *npar; struct qlcnic_info nic_info; - u8 pci_func; - if (qlcnic_82xx_check(adapter)) - if (!adapter->need_fw_reset) - return 0; + if (!adapter->need_fw_reset) + return 0; /* Set the NPAR config data after FW reset */ - for (i = 0; i < adapter->ahw->act_pci_func; i++) { + for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) { npar = &adapter->npars[i]; - pci_func = npar->pci_func; - memset(&nic_info, 0, sizeof(struct qlcnic_info)); - err = qlcnic_get_nic_info(adapter, - &nic_info, pci_func); + if (npar->type != QLCNIC_TYPE_NIC) + continue; + err = qlcnic_get_nic_info(adapter, &nic_info, i); if (err) return err; nic_info.min_tx_bw = npar->min_bw; @@ -895,12 +851,11 @@ static int qlcnic_reset_npar_config(struct qlcnic_adapter *adapter) if (npar->enable_pm) { err = qlcnic_config_port_mirroring(adapter, - npar->dest_npar, 1, - pci_func); + npar->dest_npar, 1, i); if (err) return err; } - err = qlcnic_reset_eswitch_config(adapter, npar, pci_func); + err = qlcnic_reset_eswitch_config(adapter, npar, i); if (err) return err; } @@ -912,7 +867,7 @@ static int qlcnic_check_npar_opertional(struct qlcnic_adapter *adapter) u8 npar_opt_timeo = QLCNIC_DEV_NPAR_OPER_TIMEO; u32 npar_state; - if (adapter->ahw->op_mode == QLCNIC_MGMT_FUNC) + if (adapter->op_mode == QLCNIC_MGMT_FUNC) return 0; npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); @@ -934,7 +889,7 @@ qlcnic_set_mgmt_operations(struct qlcnic_adapter *adapter) int err; if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED) || - adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) + adapter->op_mode != QLCNIC_MGMT_FUNC) return 0; err = qlcnic_set_default_offload_settings(adapter); @@ -961,14 +916,14 @@ qlcnic_start_firmware(struct qlcnic_adapter *adapter) else if (!err) goto check_fw_status; - if (qlcnic_load_fw_file) + if (load_fw_file) qlcnic_request_firmware(adapter); else { err = qlcnic_check_flash_fw_ver(adapter); if (err) goto err_out; - adapter->ahw->fw_type = QLCNIC_FLASH_ROMIMAGE; + adapter->fw_type = QLCNIC_FLASH_ROMIMAGE; } err = qlcnic_need_fw_reset(adapter); @@ -1029,7 +984,7 @@ qlcnic_request_irq(struct qlcnic_adapter *adapter) struct net_device *netdev = adapter->netdev; struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; - if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) { + if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { handler = qlcnic_tmp_intr; if (!QLCNIC_IS_MSI_FAMILY(adapter)) flags |= IRQF_SHARED; @@ -1088,7 +1043,7 @@ __qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev) if (qlcnic_set_eswitch_port_config(adapter)) return -EIO; - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_MORE_CAPS) { + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_MORE_CAPS) { capab2 = QLCRD32(adapter, CRB_FW_CAPABILITIES_2); if (capab2 & QLCNIC_FW_CAPABILITY_2_LRO_MAX_TCP_SEG) adapter->flags |= QLCNIC_FW_LRO_MSS_CAP; @@ -1119,7 +1074,7 @@ __qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev) qlcnic_linkevent_request(adapter, 1); - adapter->ahw->reset_context = 0; + adapter->reset_context = 0; set_bit(__QLCNIC_DEV_UP, &adapter->state); return 0; } @@ -1252,7 +1207,7 @@ void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings) int ring; clear_bit(__QLCNIC_DEV_UP, &adapter->state); - if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) { + if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { for (ring = 0; ring < adapter->max_sds_rings; ring++) { sds_ring = &adapter->recv_ctx->sds_rings[ring]; qlcnic_disable_int(sds_ring); @@ -1263,7 +1218,7 @@ void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings) qlcnic_detach(adapter); - adapter->ahw->diag_test = 0; + adapter->diag_test = 0; adapter->max_sds_rings = max_sds_rings; if (qlcnic_attach(adapter)) @@ -1333,7 +1288,7 @@ int qlcnic_diag_alloc_res(struct net_device *netdev, int test) qlcnic_detach(adapter); adapter->max_sds_rings = 1; - adapter->ahw->diag_test = test; + adapter->diag_test = test; ret = qlcnic_attach(adapter); if (ret) { @@ -1353,14 +1308,14 @@ int qlcnic_diag_alloc_res(struct net_device *netdev, int test) qlcnic_post_rx_buffers(adapter, rds_ring); } - if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) { + if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { for (ring = 0; ring < adapter->max_sds_rings; ring++) { sds_ring = &adapter->recv_ctx->sds_rings[ring]; qlcnic_enable_int(sds_ring); } } - if (adapter->ahw->diag_test == QLCNIC_LOOPBACK_TEST) { + if (adapter->diag_test == QLCNIC_LOOPBACK_TEST) { adapter->ahw->loopback_state = 0; qlcnic_linkevent_request(adapter, 1); } @@ -1431,8 +1386,8 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev, int err; struct pci_dev *pdev = adapter->pdev; - adapter->ahw->mc_enabled = 0; - adapter->ahw->max_mc_count = 38; + adapter->mc_enabled = 0; + adapter->max_mc_count = 38; netdev->netdev_ops = &qlcnic_netdev_ops; netdev->watchdog_timeo = 5*HZ; @@ -1444,16 +1399,16 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev, netdev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM; - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_TSO) + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) netdev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6; if (pci_using_dac == 1) netdev->hw_features |= NETIF_F_HIGHDMA; netdev->vlan_features = netdev->hw_features; - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_FVLANTX) + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_FVLANTX) netdev->hw_features |= NETIF_F_HW_VLAN_TX; - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO) + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO) netdev->hw_features |= NETIF_F_LRO; netdev->features |= netdev->hw_features | @@ -1499,14 +1454,14 @@ qlcnic_alloc_msix_entries(struct qlcnic_adapter *adapter, u16 count) return -ENOMEM; } -static int +static int __devinit qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev = NULL; struct qlcnic_adapter *adapter = NULL; int err, pci_using_dac = -1; uint8_t revision_id; - char board_name[QLCNIC_MAX_BOARD_NAME_LEN]; + char brd_name[QLCNIC_MAX_BOARD_NAME_LEN]; err = pci_enable_device(pdev); if (err) @@ -1555,10 +1510,9 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) spin_lock_init(&adapter->tx_clean_lock); INIT_LIST_HEAD(&adapter->mac_list); - err = qlcnic_setup_pci_map(pdev, adapter->ahw); + err = qlcnic_setup_pci_map(adapter); if (err) goto err_out_free_hw; - qlcnic_check_vf(adapter); /* This will be reset for mezz cards */ adapter->portnum = adapter->ahw->pci_func; @@ -1586,15 +1540,16 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) dev_warn(&pdev->dev, "failed to read mac addr\n"); if (adapter->portnum == 0) { - qlcnic_get_board_name(adapter, board_name); + get_brd_name(adapter, brd_name); + pr_info("%s: %s Board Chip rev 0x%x\n", - module_name(THIS_MODULE), - board_name, adapter->ahw->revision_id); + module_name(THIS_MODULE), + brd_name, adapter->ahw->revision_id); } qlcnic_clear_stats(adapter); - err = qlcnic_alloc_msix_entries(adapter, adapter->ahw->max_rx_ques); + err = qlcnic_alloc_msix_entries(adapter, adapter->max_rx_ques); if (err) goto err_out_decr_ref; @@ -1606,9 +1561,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) pci_set_drvdata(pdev, adapter); - if (qlcnic_82xx_check(adapter)) - qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, - FW_POLL_DELAY); + qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY); switch (adapter->ahw->port_type) { case QLCNIC_GBE: @@ -1665,7 +1618,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) return 0; } -static void qlcnic_remove(struct pci_dev *pdev) +static void __devexit qlcnic_remove(struct pci_dev *pdev) { struct qlcnic_adapter *adapter; struct net_device *netdev; @@ -1687,8 +1640,7 @@ static void qlcnic_remove(struct pci_dev *pdev) if (adapter->eswitch != NULL) kfree(adapter->eswitch); - if (qlcnic_82xx_check(adapter)) - qlcnic_clr_all_drv_state(adapter, 0); + qlcnic_clr_all_drv_state(adapter, 0); clear_bit(__QLCNIC_RESETTING, &adapter->state); @@ -1724,8 +1676,7 @@ static int __qlcnic_shutdown(struct pci_dev *pdev) if (netif_running(netdev)) qlcnic_down(adapter, netdev); - if (qlcnic_82xx_check(adapter)) - qlcnic_clr_all_drv_state(adapter, 0); + qlcnic_clr_all_drv_state(adapter, 0); clear_bit(__QLCNIC_RESETTING, &adapter->state); @@ -1733,11 +1684,9 @@ static int __qlcnic_shutdown(struct pci_dev *pdev) if (retval) return retval; - if (qlcnic_82xx_check(adapter)) { - if (qlcnic_wol_supported(adapter)) { - pci_enable_wake(pdev, PCI_D3cold, 1); - pci_enable_wake(pdev, PCI_D3hot, 1); - } + if (qlcnic_wol_supported(adapter)) { + pci_enable_wake(pdev, PCI_D3cold, 1); + pci_enable_wake(pdev, PCI_D3hot, 1); } return 0; @@ -1875,11 +1824,10 @@ static void qlcnic_free_lb_filters_mem(struct qlcnic_adapter *adapter) static int qlcnic_check_temp(struct qlcnic_adapter *adapter) { struct net_device *netdev = adapter->netdev; - u32 temp_state, temp_val, temp = 0; + u32 temp, temp_state, temp_val; int rv = 0; - if (qlcnic_82xx_check(adapter)) - temp = QLCRD32(adapter, CRB_TEMP_STATE); + temp = QLCRD32(adapter, CRB_TEMP_STATE); temp_state = qlcnic_get_temp_state(temp); temp_val = qlcnic_get_temp_val(temp); @@ -1891,7 +1839,7 @@ static int qlcnic_check_temp(struct qlcnic_adapter *adapter) temp_val); rv = 1; } else if (temp_state == QLCNIC_TEMP_WARN) { - if (adapter->ahw->temp == QLCNIC_TEMP_NORMAL) { + if (adapter->temp == QLCNIC_TEMP_NORMAL) { dev_err(&netdev->dev, "Device temperature %d degrees C " "exceeds operating range." @@ -1899,13 +1847,13 @@ static int qlcnic_check_temp(struct qlcnic_adapter *adapter) temp_val); } } else { - if (adapter->ahw->temp == QLCNIC_TEMP_WARN) { + if (adapter->temp == QLCNIC_TEMP_WARN) { dev_info(&netdev->dev, "Device temperature is now %d degrees C" " in normal range.\n", temp_val); } } - adapter->ahw->temp = temp_state; + adapter->temp = temp_state; return rv; } @@ -1921,7 +1869,7 @@ static void qlcnic_tx_timeout(struct net_device *netdev) if (++adapter->tx_timeo_cnt >= QLCNIC_MAX_TX_TIMEOUTS) adapter->need_fw_reset = 1; else - adapter->ahw->reset_context = 1; + adapter->reset_context = 1; } static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev) @@ -1945,7 +1893,7 @@ static irqreturn_t qlcnic_clear_legacy_intr(struct qlcnic_adapter *adapter) status = readl(adapter->isr_int_vec); - if (!(status & adapter->ahw->int_vec_bit)) + if (!(status & adapter->int_vec_bit)) return IRQ_NONE; /* check interrupt state machine, to be sure */ @@ -1977,7 +1925,7 @@ static irqreturn_t qlcnic_tmp_intr(int irq, void *data) return IRQ_NONE; done: - adapter->ahw->diag_cnt++; + adapter->diag_cnt++; qlcnic_enable_int(sds_ring); return IRQ_HANDLED; } @@ -2258,7 +2206,7 @@ qlcnic_fwinit_work(struct work_struct *work) return; } - if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { + if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) { qlcnic_api_unlock(adapter); goto wait_npar; } @@ -2374,9 +2322,9 @@ qlcnic_detach_work(struct work_struct *work) goto err_ret; } - if (adapter->ahw->temp == QLCNIC_TEMP_PANIC) { + if (adapter->temp == QLCNIC_TEMP_PANIC) { dev_err(&adapter->pdev->dev, "Detaching the device: temp=%d\n", - adapter->ahw->temp); + adapter->temp); goto err_ret; } @@ -2501,7 +2449,7 @@ qlcnic_attach_work(struct work_struct *work) struct net_device *netdev = adapter->netdev; u32 npar_state; - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) { + if (adapter->op_mode != QLCNIC_MGMT_FUNC) { npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); if (adapter->fw_wait_cnt++ > QLCNIC_DEV_NPAR_OPER_TIMEO) qlcnic_clr_all_drv_state(adapter, 0); @@ -2558,7 +2506,7 @@ qlcnic_check_health(struct qlcnic_adapter *adapter) if (adapter->need_fw_reset) goto detach; - if (adapter->ahw->reset_context && qlcnic_auto_fw_reset) { + if (adapter->reset_context && auto_fw_reset) { qlcnic_reset_hw_context(adapter); adapter->netdev->trans_start = jiffies; } @@ -2573,7 +2521,7 @@ qlcnic_check_health(struct qlcnic_adapter *adapter) qlcnic_dev_request_reset(adapter); - if (qlcnic_auto_fw_reset) + if (auto_fw_reset) clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state); dev_err(&adapter->pdev->dev, "firmware hang detected\n"); @@ -2598,8 +2546,8 @@ qlcnic_check_health(struct qlcnic_adapter *adapter) adapter->dev_state = (state == QLCNIC_DEV_NEED_QUISCENT) ? state : QLCNIC_DEV_NEED_RESET; - if (qlcnic_auto_fw_reset && !test_and_set_bit(__QLCNIC_RESETTING, - &adapter->state)) { + if (auto_fw_reset && + !test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) { qlcnic_schedule_work(adapter, qlcnic_detach_work, 0); QLCDB(adapter, DRV, "fw recovery scheduled.\n"); @@ -2670,7 +2618,7 @@ static int qlcnic_attach_func(struct pci_dev *pdev) if (qlcnic_api_lock(adapter)) return -EINVAL; - if (adapter->ahw->op_mode != QLCNIC_NON_PRIV_FUNC && first_func) { + if (adapter->op_mode != QLCNIC_NON_PRIV_FUNC && first_func) { adapter->need_fw_reset = 1; set_bit(__QLCNIC_START_FW, &adapter->state); QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_INITIALIZING); @@ -2784,7 +2732,7 @@ qlcnicvf_start_firmware(struct qlcnic_adapter *adapter) int qlcnic_validate_max_rss(struct net_device *netdev, u8 max_hw, u8 val) { - if (!qlcnic_use_msi_x && !qlcnic_use_msi) { + if (!use_msi_x && !use_msi) { netdev_info(netdev, "no msix or msi support, hence no rss\n"); return -EINVAL; } @@ -2980,7 +2928,7 @@ static struct pci_driver qlcnic_driver = { .name = qlcnic_driver_name, .id_table = qlcnic_pci_tbl, .probe = qlcnic_probe, - .remove = qlcnic_remove, + .remove = __devexit_p(qlcnic_remove), #ifdef CONFIG_PM .suspend = qlcnic_suspend, .resume = qlcnic_resume, diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c index 341d37c867ff..bdaa8cea349c 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c @@ -31,7 +31,7 @@ static ssize_t qlcnic_store_bridged_mode(struct device *dev, unsigned long new; int ret = -EINVAL; - if (!(adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_BDG)) + if (!(adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG)) goto err_out; if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) @@ -54,7 +54,7 @@ static ssize_t qlcnic_show_bridged_mode(struct device *dev, struct qlcnic_adapter *adapter = dev_get_drvdata(dev); int bridged_mode = 0; - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_BDG) + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG) bridged_mode = !!(adapter->flags & QLCNIC_BRIDGE_ENABLED); return sprintf(buf, "%d\n", bridged_mode); @@ -116,7 +116,7 @@ static ssize_t qlcnic_store_beacon(struct device *dev, u8 b_state, b_rate; int err; - if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { + if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) { dev_warn(dev, "LED test not supported in non privileged mode\n"); return -EOPNOTSUPP; @@ -413,7 +413,7 @@ static int validate_esw_config(struct qlcnic_adapter *adapter, if (pci_func >= QLCNIC_MAX_PCI_FUNC) return QL_STATUS_INVALID_PARAM; - if (adapter->ahw->op_mode == QLCNIC_MGMT_FUNC) { + if (adapter->op_mode == QLCNIC_MGMT_FUNC) { if (adapter->npars[pci_func].type != QLCNIC_TYPE_NIC) return QL_STATUS_INVALID_PARAM; } @@ -471,7 +471,7 @@ static ssize_t qlcnic_sysfs_write_esw_config(struct file *file, return ret; for (i = 0; i < count; i++) { - if (adapter->ahw->op_mode == QLCNIC_MGMT_FUNC) { + if (adapter->op_mode == QLCNIC_MGMT_FUNC) { if (qlcnic_config_switch_port(adapter, &esw_cfg[i])) return QL_STATUS_INVALID_PARAM; } @@ -498,7 +498,7 @@ static ssize_t qlcnic_sysfs_write_esw_config(struct file *file, } } - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) + if (adapter->op_mode != QLCNIC_MGMT_FUNC) goto out; for (i = 0; i < count; i++) { @@ -880,7 +880,7 @@ void qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter) { struct device *dev = &adapter->pdev->dev; - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_BDG) + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG) if (device_create_file(dev, &dev_attr_bridged_mode)) dev_warn(dev, "failed to create bridged_mode sysfs entry\n"); @@ -890,7 +890,7 @@ void qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter) { struct device *dev = &adapter->pdev->dev; - if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_BDG) + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG) device_remove_file(dev, &dev_attr_bridged_mode); } @@ -902,7 +902,7 @@ void qlcnic_create_diag_entries(struct qlcnic_adapter *adapter) if (device_create_bin_file(dev, &bin_attr_port_stats)) dev_info(dev, "failed to create port stats sysfs entry"); - if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) + if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) return; if (device_create_file(dev, &dev_attr_diag_mode)) dev_info(dev, "failed to create diag_mode sysfs entry\n"); @@ -923,7 +923,7 @@ void qlcnic_create_diag_entries(struct qlcnic_adapter *adapter) return; if (device_create_bin_file(dev, &bin_attr_esw_config)) dev_info(dev, "failed to create esw config sysfs entry"); - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) + if (adapter->op_mode != QLCNIC_MGMT_FUNC) return; if (device_create_bin_file(dev, &bin_attr_npar_config)) dev_info(dev, "failed to create npar config sysfs entry"); @@ -940,7 +940,7 @@ void qlcnic_remove_diag_entries(struct qlcnic_adapter *adapter) device_remove_bin_file(dev, &bin_attr_port_stats); - if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) + if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) return; device_remove_file(dev, &dev_attr_diag_mode); device_remove_bin_file(dev, &bin_attr_crb); @@ -952,7 +952,7 @@ void qlcnic_remove_diag_entries(struct qlcnic_adapter *adapter) if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED)) return; device_remove_bin_file(dev, &bin_attr_esw_config); - if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) + if (adapter->op_mode != QLCNIC_MGMT_FUNC) return; device_remove_bin_file(dev, &bin_attr_npar_config); device_remove_bin_file(dev, &bin_attr_pm_config); diff --git a/trunk/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/trunk/drivers/net/ethernet/qlogic/qlge/qlge_main.c index cae881c18f0b..b262d6156816 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlge/qlge_main.c +++ b/trunk/drivers/net/ethernet/qlogic/qlge/qlge_main.c @@ -4491,7 +4491,7 @@ static void ql_release_all(struct pci_dev *pdev) pci_set_drvdata(pdev, NULL); } -static int ql_init_device(struct pci_dev *pdev, +static int __devinit ql_init_device(struct pci_dev *pdev, struct net_device *ndev, int cards_found) { struct ql_adapter *qdev = netdev_priv(ndev); @@ -4656,7 +4656,7 @@ static void ql_timer(unsigned long data) mod_timer(&qdev->timer, jiffies + (5*HZ)); } -static int qlge_probe(struct pci_dev *pdev, +static int __devinit qlge_probe(struct pci_dev *pdev, const struct pci_device_id *pci_entry) { struct net_device *ndev = NULL; @@ -4729,7 +4729,7 @@ int ql_clean_lb_rx_ring(struct rx_ring *rx_ring, int budget) return ql_clean_inbound_rx_ring(rx_ring, budget); } -static void qlge_remove(struct pci_dev *pdev) +static void __devexit qlge_remove(struct pci_dev *pdev) { struct net_device *ndev = pci_get_drvdata(pdev); struct ql_adapter *qdev = netdev_priv(ndev); @@ -4921,7 +4921,7 @@ static struct pci_driver qlge_driver = { .name = DRV_NAME, .id_table = qlge_pci_tbl, .probe = qlge_probe, - .remove = qlge_remove, + .remove = __devexit_p(qlge_remove), #ifdef CONFIG_PM .suspend = qlge_suspend, .resume = qlge_resume, diff --git a/trunk/drivers/net/ethernet/rdc/r6040.c b/trunk/drivers/net/ethernet/rdc/r6040.c index ae27e4463f97..557a26545d75 100644 --- a/trunk/drivers/net/ethernet/rdc/r6040.c +++ b/trunk/drivers/net/ethernet/rdc/r6040.c @@ -206,7 +206,7 @@ struct r6040_private { int old_duplex; }; -static char version[] = DRV_NAME +static char version[] __devinitdata = DRV_NAME ": RDC R6040 NAPI net driver," "version "DRV_VERSION " (" DRV_RELDATE ")"; @@ -1073,7 +1073,7 @@ static int r6040_mii_probe(struct net_device *dev) return 0; } -static int r6040_init_one(struct pci_dev *pdev, +static int __devinit r6040_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; @@ -1246,7 +1246,7 @@ static int r6040_init_one(struct pci_dev *pdev, return err; } -static void r6040_remove_one(struct pci_dev *pdev) +static void __devexit r6040_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct r6040_private *lp = netdev_priv(dev); @@ -1274,7 +1274,7 @@ static struct pci_driver r6040_driver = { .name = DRV_NAME, .id_table = r6040_pci_tbl, .probe = r6040_init_one, - .remove = r6040_remove_one, + .remove = __devexit_p(r6040_remove_one), }; module_pci_driver(r6040_driver); diff --git a/trunk/drivers/net/ethernet/realtek/8139cp.c b/trunk/drivers/net/ethernet/realtek/8139cp.c index 0da3f5e9b1a5..6cb96b4afdf5 100644 --- a/trunk/drivers/net/ethernet/realtek/8139cp.c +++ b/trunk/drivers/net/ethernet/realtek/8139cp.c @@ -1226,9 +1226,12 @@ static void cp_tx_timeout(struct net_device *dev) spin_unlock_irqrestore(&cp->lock, flags); } +#ifdef BROKEN static int cp_change_mtu(struct net_device *dev, int new_mtu) { struct cp_private *cp = netdev_priv(dev); + int rc; + unsigned long flags; /* check for invalid MTU, according to hardware limits */ if (new_mtu < CP_MIN_MTU || new_mtu > CP_MAX_MTU) @@ -1241,12 +1244,22 @@ static int cp_change_mtu(struct net_device *dev, int new_mtu) return 0; } - /* network IS up, close it, reset MTU, and come up again. */ - cp_close(dev); + spin_lock_irqsave(&cp->lock, flags); + + cp_stop_hw(cp); /* stop h/w and free rings */ + cp_clean_rings(cp); + dev->mtu = new_mtu; - cp_set_rxbufsize(cp); - return cp_open(dev); + cp_set_rxbufsize(cp); /* set new rx buf size */ + + rc = cp_init_rings(cp); /* realloc and restart h/w */ + cp_start_hw(cp); + + spin_unlock_irqrestore(&cp->lock, flags); + + return rc; } +#endif /* BROKEN */ static const char mii_2_8139_map[8] = { BasicModeCtrl, @@ -1822,7 +1835,9 @@ static const struct net_device_ops cp_netdev_ops = { .ndo_start_xmit = cp_start_xmit, .ndo_tx_timeout = cp_tx_timeout, .ndo_set_features = cp_set_features, +#ifdef BROKEN .ndo_change_mtu = cp_change_mtu, +#endif #ifdef CONFIG_NET_POLL_CONTROLLER .ndo_poll_controller = cp_poll_controller, diff --git a/trunk/drivers/net/ethernet/realtek/8139too.c b/trunk/drivers/net/ethernet/realtek/8139too.c index 5dc161630127..3ed7add23c12 100644 --- a/trunk/drivers/net/ethernet/realtek/8139too.c +++ b/trunk/drivers/net/ethernet/realtek/8139too.c @@ -228,7 +228,7 @@ typedef enum { static const struct { const char *name; u32 hw_flags; -} board_info[] = { +} board_info[] __devinitconst = { { "RealTek RTL8139", RTL8139_CAPS }, { "RealTek RTL8129", RTL8129_CAPS }, }; @@ -748,7 +748,7 @@ static void rtl8139_chip_reset (void __iomem *ioaddr) } -static struct net_device *rtl8139_init_board(struct pci_dev *pdev) +static __devinit struct net_device * rtl8139_init_board (struct pci_dev *pdev) { struct device *d = &pdev->dev; void __iomem *ioaddr; @@ -935,8 +935,8 @@ static const struct net_device_ops rtl8139_netdev_ops = { .ndo_set_features = rtl8139_set_features, }; -static int rtl8139_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit rtl8139_init_one (struct pci_dev *pdev, + const struct pci_device_id *ent) { struct net_device *dev = NULL; struct rtl8139_private *tp; @@ -1103,7 +1103,7 @@ static int rtl8139_init_one(struct pci_dev *pdev, } -static void rtl8139_remove_one(struct pci_dev *pdev) +static void __devexit rtl8139_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata (pdev); struct rtl8139_private *tp = netdev_priv(dev); @@ -1141,7 +1141,7 @@ static void rtl8139_remove_one(struct pci_dev *pdev) #define EE_READ_CMD (6) #define EE_ERASE_CMD (7) -static int read_eeprom(void __iomem *ioaddr, int location, int addr_len) +static int __devinit read_eeprom (void __iomem *ioaddr, int location, int addr_len) { int i; unsigned retval = 0; @@ -2652,7 +2652,7 @@ static struct pci_driver rtl8139_pci_driver = { .name = DRV_NAME, .id_table = rtl8139_pci_tbl, .probe = rtl8139_init_one, - .remove = rtl8139_remove_one, + .remove = __devexit_p(rtl8139_remove_one), #ifdef CONFIG_PM .suspend = rtl8139_suspend, .resume = rtl8139_resume, diff --git a/trunk/drivers/net/ethernet/realtek/r8169.c b/trunk/drivers/net/ethernet/realtek/r8169.c index 891feee49ba9..248f883d4434 100644 --- a/trunk/drivers/net/ethernet/realtek/r8169.c +++ b/trunk/drivers/net/ethernet/realtek/r8169.c @@ -3828,7 +3828,7 @@ static void rtl_disable_msi(struct pci_dev *pdev, struct rtl8169_private *tp) } } -static void rtl_init_mdio_ops(struct rtl8169_private *tp) +static void __devinit rtl_init_mdio_ops(struct rtl8169_private *tp) { struct mdio_ops *ops = &tp->mdio_ops; @@ -4080,7 +4080,7 @@ static void rtl_pll_power_up(struct rtl8169_private *tp) rtl_generic_op(tp, tp->pll_power_ops.up); } -static void rtl_init_pll_power_ops(struct rtl8169_private *tp) +static void __devinit rtl_init_pll_power_ops(struct rtl8169_private *tp) { struct pll_power_ops *ops = &tp->pll_power_ops; @@ -4274,7 +4274,7 @@ static void r8168b_1_hw_jumbo_disable(struct rtl8169_private *tp) RTL_W8(Config4, RTL_R8(Config4) & ~(1 << 0)); } -static void rtl_init_jumbo_ops(struct rtl8169_private *tp) +static void __devinit rtl_init_jumbo_ops(struct rtl8169_private *tp) { struct jumbo_ops *ops = &tp->jumbo_ops; @@ -4715,7 +4715,7 @@ static u32 r8402_csi_read(struct rtl8169_private *tp, int addr) RTL_R32(CSIDR) : ~0; } -static void rtl_init_csi_ops(struct rtl8169_private *tp) +static void __devinit rtl_init_csi_ops(struct rtl8169_private *tp) { struct csi_ops *ops = &tp->csi_ops; @@ -6610,7 +6610,7 @@ static void rtl_shutdown(struct pci_dev *pdev) pm_runtime_put_noidle(d); } -static void rtl_remove_one(struct pci_dev *pdev) +static void __devexit rtl_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct rtl8169_private *tp = netdev_priv(dev); @@ -6730,7 +6730,7 @@ DECLARE_RTL_COND(rtl_rxtx_empty_cond) return (RTL_R8(MCU) & RXTX_EMPTY) == RXTX_EMPTY; } -static void rtl_hw_init_8168g(struct rtl8169_private *tp) +static void __devinit rtl_hw_init_8168g(struct rtl8169_private *tp) { void __iomem *ioaddr = tp->mmio_addr; u32 data; @@ -6764,7 +6764,7 @@ static void rtl_hw_init_8168g(struct rtl8169_private *tp) return; } -static void rtl_hw_initialize(struct rtl8169_private *tp) +static void __devinit rtl_hw_initialize(struct rtl8169_private *tp) { switch (tp->mac_version) { case RTL_GIGA_MAC_VER_40: @@ -6777,7 +6777,7 @@ static void rtl_hw_initialize(struct rtl8169_private *tp) } } -static int +static int __devinit rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data; @@ -7028,7 +7028,7 @@ static struct pci_driver rtl8169_pci_driver = { .name = MODULENAME, .id_table = rtl8169_pci_tbl, .probe = rtl_init_one, - .remove = rtl_remove_one, + .remove = __devexit_p(rtl_remove_one), .shutdown = rtl_shutdown, .driver.pm = RTL8169_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/s6gmac.c b/trunk/drivers/net/ethernet/s6gmac.c index 72fc57dd084d..2ed3ab4b3c2d 100644 --- a/trunk/drivers/net/ethernet/s6gmac.c +++ b/trunk/drivers/net/ethernet/s6gmac.c @@ -954,7 +954,7 @@ static struct net_device_stats *s6gmac_stats(struct net_device *dev) return st; } -static int s6gmac_probe(struct platform_device *pdev) +static int __devinit s6gmac_probe(struct platform_device *pdev) { struct net_device *dev; struct s6gmac *pd; @@ -1030,7 +1030,7 @@ static int s6gmac_probe(struct platform_device *pdev) return res; } -static int s6gmac_remove(struct platform_device *pdev) +static int __devexit s6gmac_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); if (dev) { @@ -1046,7 +1046,7 @@ static int s6gmac_remove(struct platform_device *pdev) static struct platform_driver s6gmac_driver = { .probe = s6gmac_probe, - .remove = s6gmac_remove, + .remove = __devexit_p(s6gmac_remove), .driver = { .name = "s6gmac", .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/seeq/ether3.c b/trunk/drivers/net/ethernet/seeq/ether3.c index 3aca57853ed4..72a01748d1b1 100644 --- a/trunk/drivers/net/ethernet/seeq/ether3.c +++ b/trunk/drivers/net/ethernet/seeq/ether3.c @@ -67,7 +67,7 @@ #include #include -static char version[] = "ether3 ethernet driver (c) 1995-2000 R.M.King v1.17\n"; +static char version[] __devinitdata = "ether3 ethernet driver (c) 1995-2000 R.M.King v1.17\n"; #include "ether3.h" @@ -194,7 +194,7 @@ static inline void ether3_ledon(struct net_device *dev) * Read the ethernet address string from the on board rom. * This is an ascii string!!! */ -static int +static int __devinit ether3_addr(char *addr, struct expansion_card *ec) { struct in_chunk_dir cd; @@ -219,7 +219,7 @@ ether3_addr(char *addr, struct expansion_card *ec) /* --------------------------------------------------------------------------- */ -static int +static int __devinit ether3_ramtest(struct net_device *dev, unsigned char byte) { unsigned char *buffer = kmalloc(RX_END, GFP_KERNEL); @@ -268,7 +268,7 @@ ether3_ramtest(struct net_device *dev, unsigned char byte) /* ------------------------------------------------------------------------------- */ -static int ether3_init_2(struct net_device *dev) +static int __devinit ether3_init_2(struct net_device *dev) { int i; @@ -742,7 +742,7 @@ static void ether3_tx(struct net_device *dev) } } -static void ether3_banner(void) +static void __devinit ether3_banner(void) { static unsigned version_printed = 0; @@ -761,7 +761,7 @@ static const struct net_device_ops ether3_netdev_ops = { .ndo_set_mac_address = eth_mac_addr, }; -static int +static int __devinit ether3_probe(struct expansion_card *ec, const struct ecard_id *id) { const struct ether3_data *data = id->data; @@ -858,7 +858,7 @@ ether3_probe(struct expansion_card *ec, const struct ecard_id *id) return ret; } -static void ether3_remove(struct expansion_card *ec) +static void __devexit ether3_remove(struct expansion_card *ec) { struct net_device *dev = ecard_get_drvdata(ec); @@ -888,7 +888,7 @@ static const struct ecard_id ether3_ids[] = { static struct ecard_driver ether3_driver = { .probe = ether3_probe, - .remove = ether3_remove, + .remove = __devexit_p(ether3_remove), .id_table = ether3_ids, .drv = { .name = "ether3", diff --git a/trunk/drivers/net/ethernet/seeq/sgiseeq.c b/trunk/drivers/net/ethernet/seeq/sgiseeq.c index 0fde9ca28269..4d15bf413bdc 100644 --- a/trunk/drivers/net/ethernet/seeq/sgiseeq.c +++ b/trunk/drivers/net/ethernet/seeq/sgiseeq.c @@ -721,7 +721,7 @@ static const struct net_device_ops sgiseeq_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int sgiseeq_probe(struct platform_device *pdev) +static int __devinit sgiseeq_probe(struct platform_device *pdev) { struct sgiseeq_platform_data *pd = pdev->dev.platform_data; struct hpc3_regs *hpcregs = pd->hpc; diff --git a/trunk/drivers/net/ethernet/sfc/efx.c b/trunk/drivers/net/ethernet/sfc/efx.c index e95cc7bb2e02..d858f310b2b2 100644 --- a/trunk/drivers/net/ethernet/sfc/efx.c +++ b/trunk/drivers/net/ethernet/sfc/efx.c @@ -2669,7 +2669,7 @@ static int efx_pci_probe_main(struct efx_nic *efx) * transmission; this is left to the first time one of the network * interfaces is brought up (i.e. efx_net_open). */ -static int efx_pci_probe(struct pci_dev *pci_dev, +static int __devinit efx_pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *entry) { struct net_device *net_dev; diff --git a/trunk/drivers/net/ethernet/sgi/ioc3-eth.c b/trunk/drivers/net/ethernet/sgi/ioc3-eth.c index 4b1deec9189a..3e5519a0acc7 100644 --- a/trunk/drivers/net/ethernet/sgi/ioc3-eth.c +++ b/trunk/drivers/net/ethernet/sgi/ioc3-eth.c @@ -1143,7 +1143,7 @@ static int ioc3_is_menet(struct pci_dev *pdev) * Can't use UPF_IOREMAP as the whole of IOC3 resources have already been * registered. */ -static void ioc3_8250_register(struct ioc3_uartregs __iomem *uart) +static void __devinit ioc3_8250_register(struct ioc3_uartregs __iomem *uart) { #define COSMISC_CONSTANT 6 @@ -1169,7 +1169,7 @@ static void ioc3_8250_register(struct ioc3_uartregs __iomem *uart) serial8250_register_8250_port(&port); } -static void ioc3_serial_probe(struct pci_dev *pdev, struct ioc3 *ioc3) +static void __devinit ioc3_serial_probe(struct pci_dev *pdev, struct ioc3 *ioc3) { /* * We need to recognice and treat the fourth MENET serial as it @@ -1229,7 +1229,7 @@ static const struct net_device_ops ioc3_netdev_ops = { .ndo_change_mtu = eth_change_mtu, }; -static int ioc3_probe(struct pci_dev *pdev, +static int __devinit ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { unsigned int sw_physid1, sw_physid2; @@ -1368,7 +1368,7 @@ static int ioc3_probe(struct pci_dev *pdev, return err; } -static void ioc3_remove_one(struct pci_dev *pdev) +static void __devexit ioc3_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct ioc3_private *ip = netdev_priv(dev); @@ -1396,7 +1396,7 @@ static struct pci_driver ioc3_driver = { .name = "ioc3-eth", .id_table = ioc3_pci_tbl, .probe = ioc3_probe, - .remove = ioc3_remove_one, + .remove = __devexit_p(ioc3_remove_one), }; static int __init ioc3_init_module(void) diff --git a/trunk/drivers/net/ethernet/sgi/meth.c b/trunk/drivers/net/ethernet/sgi/meth.c index 79ad9c94a21b..53efe7c7b1c0 100644 --- a/trunk/drivers/net/ethernet/sgi/meth.c +++ b/trunk/drivers/net/ethernet/sgi/meth.c @@ -825,7 +825,7 @@ static const struct net_device_ops meth_netdev_ops = { /* * The init function. */ -static int meth_probe(struct platform_device *pdev) +static int __devinit meth_probe(struct platform_device *pdev) { struct net_device *dev; struct meth_private *priv; diff --git a/trunk/drivers/net/ethernet/silan/sc92031.c b/trunk/drivers/net/ethernet/silan/sc92031.c index 2103449a2dfe..32e55664df6e 100644 --- a/trunk/drivers/net/ethernet/silan/sc92031.c +++ b/trunk/drivers/net/ethernet/silan/sc92031.c @@ -1395,7 +1395,7 @@ static const struct net_device_ops sc92031_netdev_ops = { #endif }; -static int sc92031_probe(struct pci_dev *pdev, +static int __devinit sc92031_probe(struct pci_dev *pdev, const struct pci_device_id *id) { int err; @@ -1489,7 +1489,7 @@ static int sc92031_probe(struct pci_dev *pdev, return err; } -static void sc92031_remove(struct pci_dev *pdev) +static void __devexit sc92031_remove(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct sc92031_priv *priv = netdev_priv(dev); @@ -1574,7 +1574,7 @@ static struct pci_driver sc92031_pci_driver = { .name = SC92031_NAME, .id_table = sc92031_pci_device_id_table, .probe = sc92031_probe, - .remove = sc92031_remove, + .remove = __devexit_p(sc92031_remove), .suspend = sc92031_suspend, .resume = sc92031_resume, }; diff --git a/trunk/drivers/net/ethernet/sis/sis190.c b/trunk/drivers/net/ethernet/sis/sis190.c index c114c4f9cea8..d8166012b7d4 100644 --- a/trunk/drivers/net/ethernet/sis/sis190.c +++ b/trunk/drivers/net/ethernet/sis/sis190.c @@ -415,7 +415,7 @@ static u16 mdio_read_latched(void __iomem *ioaddr, int phy_id, int reg) return mdio_read(ioaddr, phy_id, reg); } -static u16 sis190_read_eeprom(void __iomem *ioaddr, u32 reg) +static u16 __devinit sis190_read_eeprom(void __iomem *ioaddr, u32 reg) { u16 data = 0xffff; unsigned int i; @@ -1379,7 +1379,7 @@ static void sis190_mii_probe_88e1111_fixup(struct sis190_private *tp) * Identify and set current phy if found one, * return error if it failed to found. */ -static int sis190_mii_probe(struct net_device *dev) +static int __devinit sis190_mii_probe(struct net_device *dev) { struct sis190_private *tp = netdev_priv(dev); struct mii_if_info *mii_if = &tp->mii_if; @@ -1451,7 +1451,7 @@ static void sis190_release_board(struct pci_dev *pdev) free_netdev(dev); } -static struct net_device *sis190_init_board(struct pci_dev *pdev) +static struct net_device * __devinit sis190_init_board(struct pci_dev *pdev) { struct sis190_private *tp; struct net_device *dev; @@ -1573,7 +1573,7 @@ static void sis190_set_rgmii(struct sis190_private *tp, u8 reg) tp->features |= (reg & 0x80) ? F_HAS_RGMII : 0; } -static int sis190_get_mac_addr_from_eeprom(struct pci_dev *pdev, +static int __devinit sis190_get_mac_addr_from_eeprom(struct pci_dev *pdev, struct net_device *dev) { struct sis190_private *tp = netdev_priv(dev); @@ -1615,10 +1615,10 @@ static int sis190_get_mac_addr_from_eeprom(struct pci_dev *pdev, * APC CMOS RAM is accessed through ISA bridge. * MAC address is read into @net_dev->dev_addr. */ -static int sis190_get_mac_addr_from_apc(struct pci_dev *pdev, +static int __devinit sis190_get_mac_addr_from_apc(struct pci_dev *pdev, struct net_device *dev) { - static const u16 ids[] = { 0x0965, 0x0966, 0x0968 }; + static const u16 __devinitconst ids[] = { 0x0965, 0x0966, 0x0968 }; struct sis190_private *tp = netdev_priv(dev); struct pci_dev *isa_bridge; u8 reg, tmp8; @@ -1693,7 +1693,7 @@ static inline void sis190_init_rxfilter(struct net_device *dev) SIS_PCI_COMMIT(); } -static int sis190_get_mac_addr(struct pci_dev *pdev, +static int __devinit sis190_get_mac_addr(struct pci_dev *pdev, struct net_device *dev) { int rc; @@ -1845,7 +1845,7 @@ static const struct net_device_ops sis190_netdev_ops = { #endif }; -static int sis190_init_one(struct pci_dev *pdev, +static int __devinit sis190_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { static int printed_version = 0; @@ -1916,7 +1916,7 @@ static int sis190_init_one(struct pci_dev *pdev, goto out; } -static void sis190_remove_one(struct pci_dev *pdev) +static void __devexit sis190_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct sis190_private *tp = netdev_priv(dev); @@ -1932,7 +1932,7 @@ static struct pci_driver sis190_pci_driver = { .name = DRV_NAME, .id_table = sis190_pci_tbl, .probe = sis190_init_one, - .remove = sis190_remove_one, + .remove = __devexit_p(sis190_remove_one), }; static int __init sis190_init_module(void) diff --git a/trunk/drivers/net/ethernet/sis/sis900.c b/trunk/drivers/net/ethernet/sis/sis900.c index 88c6c4243cb3..edf5edb13140 100644 --- a/trunk/drivers/net/ethernet/sis/sis900.c +++ b/trunk/drivers/net/ethernet/sis/sis900.c @@ -81,7 +81,7 @@ #define SIS900_MODULE_NAME "sis900" #define SIS900_DRV_VERSION "v1.08.10 Apr. 2 2006" -static const char version[] = +static const char version[] __devinitconst = KERN_INFO "sis900.c: " SIS900_DRV_VERSION "\n"; static int max_interrupt_work = 40; @@ -251,8 +251,7 @@ static const struct ethtool_ops sis900_ethtool_ops; * @net_dev->perm_addr. */ -static int sis900_get_mac_addr(struct pci_dev *pci_dev, - struct net_device *net_dev) +static int __devinit sis900_get_mac_addr(struct pci_dev * pci_dev, struct net_device *net_dev) { struct sis900_private *sis_priv = netdev_priv(net_dev); void __iomem *ioaddr = sis_priv->ioaddr; @@ -288,8 +287,8 @@ static int sis900_get_mac_addr(struct pci_dev *pci_dev, * @net_dev->perm_addr. */ -static int sis630e_get_mac_addr(struct pci_dev *pci_dev, - struct net_device *net_dev) +static int __devinit sis630e_get_mac_addr(struct pci_dev * pci_dev, + struct net_device *net_dev) { struct pci_dev *isa_bridge = NULL; u8 reg; @@ -331,8 +330,8 @@ static int sis630e_get_mac_addr(struct pci_dev *pci_dev, * @net_dev->dev_addr and @net_dev->perm_addr. */ -static int sis635_get_mac_addr(struct pci_dev *pci_dev, - struct net_device *net_dev) +static int __devinit sis635_get_mac_addr(struct pci_dev * pci_dev, + struct net_device *net_dev) { struct sis900_private *sis_priv = netdev_priv(net_dev); void __iomem *ioaddr = sis_priv->ioaddr; @@ -378,8 +377,8 @@ static int sis635_get_mac_addr(struct pci_dev *pci_dev, * MAC address is read into @net_dev->dev_addr and @net_dev->perm_addr. */ -static int sis96x_get_mac_addr(struct pci_dev *pci_dev, - struct net_device *net_dev) +static int __devinit sis96x_get_mac_addr(struct pci_dev * pci_dev, + struct net_device *net_dev) { struct sis900_private *sis_priv = netdev_priv(net_dev); void __iomem *ioaddr = sis_priv->ioaddr; @@ -434,7 +433,7 @@ static const struct net_device_ops sis900_netdev_ops = { * ie: sis900_open(), sis900_start_xmit(), sis900_close(), etc. */ -static int sis900_probe(struct pci_dev *pci_dev, +static int __devinit sis900_probe(struct pci_dev *pci_dev, const struct pci_device_id *pci_id) { struct sis900_private *sis_priv; @@ -606,7 +605,7 @@ static int sis900_probe(struct pci_dev *pci_dev, * return error if it failed to found. */ -static int sis900_mii_probe(struct net_device *net_dev) +static int __devinit sis900_mii_probe(struct net_device * net_dev) { struct sis900_private *sis_priv = netdev_priv(net_dev); const char *dev_name = pci_name(sis_priv->pci_dev); @@ -825,7 +824,7 @@ static void sis900_set_capability(struct net_device *net_dev, struct mii_phy *ph * Note that location is in word (16 bits) unit */ -static u16 read_eeprom(void __iomem *ioaddr, int location) +static u16 __devinit read_eeprom(void __iomem *ioaddr, int location) { u32 read_cmd = location | EEread; int i; @@ -2411,7 +2410,7 @@ static void sis900_reset(struct net_device *net_dev) * remove and release SiS900 net device */ -static void sis900_remove(struct pci_dev *pci_dev) +static void __devexit sis900_remove(struct pci_dev *pci_dev) { struct net_device *net_dev = pci_get_drvdata(pci_dev); struct sis900_private *sis_priv = netdev_priv(net_dev); @@ -2497,7 +2496,7 @@ static struct pci_driver sis900_pci_driver = { .name = SIS900_MODULE_NAME, .id_table = sis900_pci_tbl, .probe = sis900_probe, - .remove = sis900_remove, + .remove = __devexit_p(sis900_remove), #ifdef CONFIG_PM .suspend = sis900_suspend, .resume = sis900_resume, diff --git a/trunk/drivers/net/ethernet/smsc/epic100.c b/trunk/drivers/net/ethernet/smsc/epic100.c index 347cccbeb53c..d01e59c348ad 100644 --- a/trunk/drivers/net/ethernet/smsc/epic100.c +++ b/trunk/drivers/net/ethernet/smsc/epic100.c @@ -90,9 +90,9 @@ static int rx_copybreak; #include /* These identify the driver base version and may not be removed. */ -static char version[] = +static char version[] __devinitdata = DRV_NAME ".c:v1.11 1/7/2001 Written by Donald Becker \n"; -static char version2[] = +static char version2[] __devinitdata = " (unofficial 2.4.x kernel port, version " DRV_VERSION ", " DRV_RELDATE ")\n"; MODULE_AUTHOR("Donald Becker "); @@ -318,7 +318,7 @@ static const struct net_device_ops epic_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int epic_init_one(struct pci_dev *pdev, +static int __devinit epic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { static int card_idx = -1; @@ -569,7 +569,7 @@ static inline void epic_napi_irq_on(struct net_device *dev, ew32(INTMASK, ep->irq_mask | EpicNapiEvent); } -static int read_eeprom(struct epic_private *ep, int location) +static int __devinit read_eeprom(struct epic_private *ep, int location) { void __iomem *ioaddr = ep->ioaddr; int i; @@ -1524,7 +1524,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) } -static void epic_remove_one(struct pci_dev *pdev) +static void __devexit epic_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct epic_private *ep = netdev_priv(dev); @@ -1577,7 +1577,7 @@ static struct pci_driver epic_driver = { .name = DRV_NAME, .id_table = epic_pci_tbl, .probe = epic_init_one, - .remove = epic_remove_one, + .remove = __devexit_p(epic_remove_one), #ifdef CONFIG_PM .suspend = epic_suspend, .resume = epic_resume, diff --git a/trunk/drivers/net/ethernet/smsc/smc911x.c b/trunk/drivers/net/ethernet/smsc/smc911x.c index 59a6f88da867..990f57467a15 100644 --- a/trunk/drivers/net/ethernet/smsc/smc911x.c +++ b/trunk/drivers/net/ethernet/smsc/smc911x.c @@ -1712,7 +1712,7 @@ static const struct ethtool_ops smc911x_ethtool_ops = { * This routine has a simple purpose -- make the SMC chip generate an * interrupt, so an auto-detect routine can detect it, and find the IRQ, */ -static int smc911x_findirq(struct net_device *dev) +static int __devinit smc911x_findirq(struct net_device *dev) { struct smc911x_local *lp = netdev_priv(dev); int timeout = 20; @@ -1790,7 +1790,7 @@ static const struct net_device_ops smc911x_netdev_ops = { * o actually GRAB the irq. * o GRAB the region */ -static int smc911x_probe(struct net_device *dev) +static int __devinit smc911x_probe(struct net_device *dev) { struct smc911x_local *lp = netdev_priv(dev); int i, retval; @@ -2030,7 +2030,7 @@ static int smc911x_probe(struct net_device *dev) * 0 --> there is a device * anything else, error */ -static int smc911x_drv_probe(struct platform_device *pdev) +static int __devinit smc911x_drv_probe(struct platform_device *pdev) { struct net_device *ndev; struct resource *res; @@ -2105,7 +2105,7 @@ static int smc911x_drv_probe(struct platform_device *pdev) return ret; } -static int smc911x_drv_remove(struct platform_device *pdev) +static int __devexit smc911x_drv_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct smc911x_local *lp = netdev_priv(ndev); @@ -2176,7 +2176,7 @@ static int smc911x_drv_resume(struct platform_device *dev) static struct platform_driver smc911x_driver = { .probe = smc911x_drv_probe, - .remove = smc911x_drv_remove, + .remove = __devexit_p(smc911x_drv_remove), .suspend = smc911x_drv_suspend, .resume = smc911x_drv_resume, .driver = { diff --git a/trunk/drivers/net/ethernet/smsc/smc91x.c b/trunk/drivers/net/ethernet/smsc/smc91x.c index b085692f3893..f516e5a71c53 100644 --- a/trunk/drivers/net/ethernet/smsc/smc91x.c +++ b/trunk/drivers/net/ethernet/smsc/smc91x.c @@ -1779,7 +1779,7 @@ static const struct net_device_ops smc_netdev_ops = { * I just deleted auto_irq.c, since it was never built... * --jgarzik */ -static int smc_findirq(struct smc_local *lp) +static int __devinit smc_findirq(struct smc_local *lp) { void __iomem *ioaddr = lp->base; int timeout = 20; @@ -1853,7 +1853,7 @@ static int smc_findirq(struct smc_local *lp) * o actually GRAB the irq. * o GRAB the region */ -static int smc_probe(struct net_device *dev, void __iomem *ioaddr, +static int __devinit smc_probe(struct net_device *dev, void __iomem *ioaddr, unsigned long irq_flags) { struct smc_local *lp = netdev_priv(dev); @@ -2201,7 +2201,7 @@ static void smc_release_datacs(struct platform_device *pdev, struct net_device * * 0 --> there is a device * anything else, error */ -static int smc_drv_probe(struct platform_device *pdev) +static int __devinit smc_drv_probe(struct platform_device *pdev) { struct smc91x_platdata *pd = pdev->dev.platform_data; struct smc_local *lp; @@ -2314,7 +2314,7 @@ static int smc_drv_probe(struct platform_device *pdev) return ret; } -static int smc_drv_remove(struct platform_device *pdev) +static int __devexit smc_drv_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct smc_local *lp = netdev_priv(ndev); @@ -2397,7 +2397,7 @@ static struct dev_pm_ops smc_drv_pm_ops = { static struct platform_driver smc_driver = { .probe = smc_drv_probe, - .remove = smc_drv_remove, + .remove = __devexit_p(smc_drv_remove), .driver = { .name = CARDNAME, .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/smsc/smsc911x.c b/trunk/drivers/net/ethernet/smsc/smsc911x.c index c52a5cefa192..cc025620b681 100644 --- a/trunk/drivers/net/ethernet/smsc/smsc911x.c +++ b/trunk/drivers/net/ethernet/smsc/smsc911x.c @@ -1031,7 +1031,7 @@ static int smsc911x_mii_probe(struct net_device *dev) return 0; } -static int smsc911x_mii_init(struct platform_device *pdev, +static int __devinit smsc911x_mii_init(struct platform_device *pdev, struct net_device *dev) { struct smsc911x_data *pdata = netdev_priv(dev); @@ -2087,7 +2087,7 @@ static const struct net_device_ops smsc911x_netdev_ops = { }; /* copies the current mac address from hardware to dev->dev_addr */ -static void smsc911x_read_mac_address(struct net_device *dev) +static void __devinit smsc911x_read_mac_address(struct net_device *dev) { struct smsc911x_data *pdata = netdev_priv(dev); u32 mac_high16 = smsc911x_mac_read(pdata, ADDRH); @@ -2102,7 +2102,7 @@ static void smsc911x_read_mac_address(struct net_device *dev) } /* Initializing private device structures, only called from probe */ -static int smsc911x_init(struct net_device *dev) +static int __devinit smsc911x_init(struct net_device *dev) { struct smsc911x_data *pdata = netdev_priv(dev); unsigned int byte_test, mask; @@ -2239,7 +2239,7 @@ static int smsc911x_init(struct net_device *dev) return 0; } -static int smsc911x_drv_remove(struct platform_device *pdev) +static int __devexit smsc911x_drv_remove(struct platform_device *pdev) { struct net_device *dev; struct smsc911x_data *pdata; @@ -2296,7 +2296,7 @@ static const struct smsc911x_ops shifted_smsc911x_ops = { }; #ifdef CONFIG_OF -static int smsc911x_probe_config_dt( +static int __devinit smsc911x_probe_config_dt( struct smsc911x_platform_config *config, struct device_node *np) { @@ -2346,7 +2346,7 @@ static inline int smsc911x_probe_config_dt( } #endif /* CONFIG_OF */ -static int smsc911x_drv_probe(struct platform_device *pdev) +static int __devinit smsc911x_drv_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; struct net_device *dev; @@ -2584,7 +2584,7 @@ MODULE_DEVICE_TABLE(of, smsc911x_dt_ids); static struct platform_driver smsc911x_driver = { .probe = smsc911x_drv_probe, - .remove = smsc911x_drv_remove, + .remove = __devexit_p(smsc911x_drv_remove), .driver = { .name = SMSC_CHIPNAME, .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ethernet/smsc/smsc9420.c b/trunk/drivers/net/ethernet/smsc/smsc9420.c index 3c586585e1b3..1fcd914ec39b 100644 --- a/trunk/drivers/net/ethernet/smsc/smsc9420.c +++ b/trunk/drivers/net/ethernet/smsc/smsc9420.c @@ -1577,7 +1577,7 @@ static const struct net_device_ops smsc9420_netdev_ops = { #endif /* CONFIG_NET_POLL_CONTROLLER */ }; -static int +static int __devinit smsc9420_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct net_device *dev; @@ -1702,7 +1702,7 @@ smsc9420_probe(struct pci_dev *pdev, const struct pci_device_id *id) return -ENODEV; } -static void smsc9420_remove(struct pci_dev *pdev) +static void __devexit smsc9420_remove(struct pci_dev *pdev) { struct net_device *dev; struct smsc9420_pdata *pd; @@ -1736,7 +1736,7 @@ static struct pci_driver smsc9420_driver = { .name = DRV_NAME, .id_table = smsc9420_id_table, .probe = smsc9420_probe, - .remove = smsc9420_remove, + .remove = __devexit_p(smsc9420_remove), #ifdef CONFIG_PM .suspend = smsc9420_suspend, .resume = smsc9420_resume, diff --git a/trunk/drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h b/trunk/drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h index ab4896ecac1c..807f30371e49 100644 --- a/trunk/drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h +++ b/trunk/drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h @@ -80,6 +80,8 @@ #define DMA_STATUS_GPI 0x10000000 /* PMT interrupt */ #define DMA_STATUS_GMI 0x08000000 /* MMC interrupt */ #define DMA_STATUS_GLI 0x04000000 /* GMAC Line interface int */ +#define DMA_STATUS_GMI 0x08000000 +#define DMA_STATUS_GLI 0x04000000 #define DMA_STATUS_EB_MASK 0x00380000 /* Error Bits Mask */ #define DMA_STATUS_EB_TX_ABORT 0x00080000 /* Error Bits - TX Abort */ #define DMA_STATUS_EB_RX_ABORT 0x00100000 /* Error Bits - RX Abort */ diff --git a/trunk/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/trunk/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c index 5cf9eb6dd65f..1f069b0f6af5 100644 --- a/trunk/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +++ b/trunk/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c @@ -61,7 +61,7 @@ static void stmmac_default_data(void) * matches the device. The probe functions returns zero when the driver choose * to take "ownership" of the device or an error code(-ve no) otherwise. */ -static int stmmac_pci_probe(struct pci_dev *pdev, +static int __devinit stmmac_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { int ret = 0; @@ -130,7 +130,7 @@ static int stmmac_pci_probe(struct pci_dev *pdev, * Description: this function calls the main to free the net resources * and releases the PCI resources. */ -static void stmmac_pci_remove(struct pci_dev *pdev) +static void __devexit stmmac_pci_remove(struct pci_dev *pdev) { struct net_device *ndev = pci_get_drvdata(pdev); struct stmmac_priv *priv = netdev_priv(ndev); @@ -182,7 +182,7 @@ struct pci_driver stmmac_pci_driver = { .name = STMMAC_RESOURCE_NAME, .id_table = stmmac_id_table, .probe = stmmac_pci_probe, - .remove = stmmac_pci_remove, + .remove = __devexit_p(stmmac_pci_remove), #ifdef CONFIG_PM .suspend = stmmac_pci_suspend, .resume = stmmac_pci_resume, diff --git a/trunk/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/trunk/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c index b77b913df116..ed112b55ae7f 100644 --- a/trunk/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +++ b/trunk/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c @@ -29,7 +29,7 @@ #include "stmmac.h" #ifdef CONFIG_OF -static int stmmac_probe_config_dt(struct platform_device *pdev, +static int __devinit stmmac_probe_config_dt(struct platform_device *pdev, struct plat_stmmacenet_data *plat, const char **mac) { @@ -59,7 +59,7 @@ static int stmmac_probe_config_dt(struct platform_device *pdev, return 0; } #else -static int stmmac_probe_config_dt(struct platform_device *pdev, +static int __devinit stmmac_probe_config_dt(struct platform_device *pdev, struct plat_stmmacenet_data *plat, const char **mac) { @@ -74,7 +74,7 @@ static int stmmac_probe_config_dt(struct platform_device *pdev, * the necessary resources and invokes the main to init * the net device, register the mdio bus etc. */ -static int stmmac_pltfr_probe(struct platform_device *pdev) +static int __devinit stmmac_pltfr_probe(struct platform_device *pdev) { int ret = 0; struct resource *res; diff --git a/trunk/drivers/net/ethernet/sun/cassini.c b/trunk/drivers/net/ethernet/sun/cassini.c index 85f971fe2611..c8251be104d6 100644 --- a/trunk/drivers/net/ethernet/sun/cassini.c +++ b/trunk/drivers/net/ethernet/sun/cassini.c @@ -185,7 +185,7 @@ #define CAS_RESET_SPARE 3 #endif -static char version[] = +static char version[] __devinitdata = DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; static int cassini_debug = -1; /* -1 == use CAS_DEF_MSG_ENABLE as value */ @@ -222,7 +222,7 @@ static int link_transition_timeout; -static u16 link_modes[] = { +static u16 link_modes[] __devinitdata = { BMCR_ANENABLE, /* 0 : autoneg */ 0, /* 1 : 10bt half duplex */ BMCR_SPEED100, /* 2 : 100bt half duplex */ @@ -4820,7 +4820,7 @@ static int cas_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) * only subordinate device and we can tweak the bridge settings to * reflect that fact. */ -static void cas_program_bridge(struct pci_dev *cas_pdev) +static void __devinit cas_program_bridge(struct pci_dev *cas_pdev) { struct pci_dev *pdev = cas_pdev->bus->self; u32 val; @@ -4916,7 +4916,7 @@ static const struct net_device_ops cas_netdev_ops = { #endif }; -static int cas_init_one(struct pci_dev *pdev, +static int __devinit cas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { static int cas_version_printed = 0; @@ -5175,7 +5175,7 @@ static int cas_init_one(struct pci_dev *pdev, return -ENODEV; } -static void cas_remove_one(struct pci_dev *pdev) +static void __devexit cas_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct cas *cp; @@ -5273,7 +5273,7 @@ static struct pci_driver cas_driver = { .name = DRV_MODULE_NAME, .id_table = cas_pci_tbl, .probe = cas_init_one, - .remove = cas_remove_one, + .remove = __devexit_p(cas_remove_one), #ifdef CONFIG_PM .suspend = cas_suspend, .resume = cas_resume diff --git a/trunk/drivers/net/ethernet/sun/niu.c b/trunk/drivers/net/ethernet/sun/niu.c index 6023949be3bd..275b430aeb75 100644 --- a/trunk/drivers/net/ethernet/sun/niu.c +++ b/trunk/drivers/net/ethernet/sun/niu.c @@ -38,7 +38,7 @@ #define DRV_MODULE_VERSION "1.1" #define DRV_MODULE_RELDATE "Apr 22, 2010" -static char version[] = +static char version[] __devinitdata = DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; MODULE_AUTHOR("David S. Miller (davem@davemloft.net)"); @@ -7977,7 +7977,7 @@ static int niu_set_ldg_sid(struct niu *np, int ldg, int func, int vector) return 0; } -static int niu_pci_eeprom_read(struct niu *np, u32 addr) +static int __devinit niu_pci_eeprom_read(struct niu *np, u32 addr) { u64 frame, frame_base = (ESPC_PIO_STAT_READ_START | (addr << ESPC_PIO_STAT_ADDR_SHIFT)); @@ -8020,7 +8020,7 @@ static int niu_pci_eeprom_read(struct niu *np, u32 addr) return (frame & ESPC_PIO_STAT_DATA) >> ESPC_PIO_STAT_DATA_SHIFT; } -static int niu_pci_eeprom_read16(struct niu *np, u32 off) +static int __devinit niu_pci_eeprom_read16(struct niu *np, u32 off) { int err = niu_pci_eeprom_read(np, off); u16 val; @@ -8036,7 +8036,7 @@ static int niu_pci_eeprom_read16(struct niu *np, u32 off) return val; } -static int niu_pci_eeprom_read16_swp(struct niu *np, u32 off) +static int __devinit niu_pci_eeprom_read16_swp(struct niu *np, u32 off) { int err = niu_pci_eeprom_read(np, off); u16 val; @@ -8054,7 +8054,7 @@ static int niu_pci_eeprom_read16_swp(struct niu *np, u32 off) return val; } -static int niu_pci_vpd_get_propname(struct niu *np, +static int __devinit niu_pci_vpd_get_propname(struct niu *np, u32 off, char *namebuf, int namebuf_len) @@ -8075,7 +8075,7 @@ static int niu_pci_vpd_get_propname(struct niu *np, return i + 1; } -static void niu_vpd_parse_version(struct niu *np) +static void __devinit niu_vpd_parse_version(struct niu *np) { struct niu_vpd *vpd = &np->vpd; int len = strlen(vpd->version) + 1; @@ -8102,7 +8102,7 @@ static void niu_vpd_parse_version(struct niu *np) } /* ESPC_PIO_EN_ENABLE must be set */ -static int niu_pci_vpd_scan_props(struct niu *np, +static int __devinit niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) { unsigned int found_mask = 0; @@ -8189,7 +8189,7 @@ static int niu_pci_vpd_scan_props(struct niu *np, } /* ESPC_PIO_EN_ENABLE must be set */ -static void niu_pci_vpd_fetch(struct niu *np, u32 start) +static void __devinit niu_pci_vpd_fetch(struct niu *np, u32 start) { u32 offset; int err; @@ -8224,7 +8224,7 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start) } /* ESPC_PIO_EN_ENABLE must be set */ -static u32 niu_pci_vpd_offset(struct niu *np) +static u32 __devinit niu_pci_vpd_offset(struct niu *np) { u32 start = 0, end = ESPC_EEPROM_SIZE, ret; int err; @@ -8279,7 +8279,7 @@ static u32 niu_pci_vpd_offset(struct niu *np) return 0; } -static int niu_phy_type_prop_decode(struct niu *np, +static int __devinit niu_phy_type_prop_decode(struct niu *np, const char *phy_prop) { if (!strcmp(phy_prop, "mif")) { @@ -8334,7 +8334,7 @@ static int niu_pci_vpd_get_nports(struct niu *np) return ports; } -static void niu_pci_vpd_validate(struct niu *np) +static void __devinit niu_pci_vpd_validate(struct niu *np) { struct net_device *dev = np->dev; struct niu_vpd *vpd = &np->vpd; @@ -8380,7 +8380,7 @@ static void niu_pci_vpd_validate(struct niu *np) memcpy(dev->dev_addr, dev->perm_addr, dev->addr_len); } -static int niu_pci_probe_sprom(struct niu *np) +static int __devinit niu_pci_probe_sprom(struct niu *np) { struct net_device *dev = np->dev; int len, i; @@ -8538,7 +8538,7 @@ static int niu_pci_probe_sprom(struct niu *np) return 0; } -static int niu_get_and_validate_port(struct niu *np) +static int __devinit niu_get_and_validate_port(struct niu *np) { struct niu_parent *parent = np->parent; @@ -8572,7 +8572,7 @@ static int niu_get_and_validate_port(struct niu *np) return 0; } -static int phy_record(struct niu_parent *parent, +static int __devinit phy_record(struct niu_parent *parent, struct phy_probe_info *p, int dev_id_1, int dev_id_2, u8 phy_port, int type) @@ -8611,7 +8611,7 @@ static int phy_record(struct niu_parent *parent, return 0; } -static int port_has_10g(struct phy_probe_info *p, int port) +static int __devinit port_has_10g(struct phy_probe_info *p, int port) { int i; @@ -8627,7 +8627,7 @@ static int port_has_10g(struct phy_probe_info *p, int port) return 0; } -static int count_10g_ports(struct phy_probe_info *p, int *lowest) +static int __devinit count_10g_ports(struct phy_probe_info *p, int *lowest) { int port, cnt; @@ -8644,7 +8644,7 @@ static int count_10g_ports(struct phy_probe_info *p, int *lowest) return cnt; } -static int count_1g_ports(struct phy_probe_info *p, int *lowest) +static int __devinit count_1g_ports(struct phy_probe_info *p, int *lowest) { *lowest = 32; if (p->cur[PHY_TYPE_MII]) @@ -8653,7 +8653,7 @@ static int count_1g_ports(struct phy_probe_info *p, int *lowest) return p->cur[PHY_TYPE_MII]; } -static void niu_n2_divide_channels(struct niu_parent *parent) +static void __devinit niu_n2_divide_channels(struct niu_parent *parent) { int num_ports = parent->num_ports; int i; @@ -8669,7 +8669,7 @@ static void niu_n2_divide_channels(struct niu_parent *parent) } } -static void niu_divide_channels(struct niu_parent *parent, +static void __devinit niu_divide_channels(struct niu_parent *parent, int num_10g, int num_1g) { int num_ports = parent->num_ports; @@ -8731,7 +8731,7 @@ static void niu_divide_channels(struct niu_parent *parent, } } -static void niu_divide_rdc_groups(struct niu_parent *parent, +static void __devinit niu_divide_rdc_groups(struct niu_parent *parent, int num_10g, int num_1g) { int i, num_ports = parent->num_ports; @@ -8776,7 +8776,7 @@ static void niu_divide_rdc_groups(struct niu_parent *parent, } } -static int fill_phy_probe_info(struct niu *np, +static int __devinit fill_phy_probe_info(struct niu *np, struct niu_parent *parent, struct phy_probe_info *info) { @@ -8819,7 +8819,7 @@ static int fill_phy_probe_info(struct niu *np, return err; } -static int walk_phys(struct niu *np, struct niu_parent *parent) +static int __devinit walk_phys(struct niu *np, struct niu_parent *parent) { struct phy_probe_info *info = &parent->phy_probe_info; int lowest_10g, lowest_1g; @@ -8948,7 +8948,7 @@ static int walk_phys(struct niu *np, struct niu_parent *parent) return -EINVAL; } -static int niu_probe_ports(struct niu *np) +static int __devinit niu_probe_ports(struct niu *np) { struct niu_parent *parent = np->parent; int err, i; @@ -8969,7 +8969,7 @@ static int niu_probe_ports(struct niu *np) return 0; } -static int niu_classifier_swstate_init(struct niu *np) +static int __devinit niu_classifier_swstate_init(struct niu *np) { struct niu_classifier *cp = &np->clas; @@ -8981,7 +8981,7 @@ static int niu_classifier_swstate_init(struct niu *np) return fflp_early_init(np); } -static void niu_link_config_init(struct niu *np) +static void __devinit niu_link_config_init(struct niu *np) { struct niu_link_config *lp = &np->link_config; @@ -9006,7 +9006,7 @@ static void niu_link_config_init(struct niu *np) #endif } -static int niu_init_mac_ipp_pcs_base(struct niu *np) +static int __devinit niu_init_mac_ipp_pcs_base(struct niu *np) { switch (np->port) { case 0: @@ -9045,7 +9045,7 @@ static int niu_init_mac_ipp_pcs_base(struct niu *np) return 0; } -static void niu_try_msix(struct niu *np, u8 *ldg_num_map) +static void __devinit niu_try_msix(struct niu *np, u8 *ldg_num_map) { struct msix_entry msi_vec[NIU_NUM_LDG]; struct niu_parent *parent = np->parent; @@ -9084,7 +9084,7 @@ static void niu_try_msix(struct niu *np, u8 *ldg_num_map) np->num_ldg = num_irqs; } -static int niu_n2_irq_init(struct niu *np, u8 *ldg_num_map) +static int __devinit niu_n2_irq_init(struct niu *np, u8 *ldg_num_map) { #ifdef CONFIG_SPARC64 struct platform_device *op = np->op; @@ -9108,7 +9108,7 @@ static int niu_n2_irq_init(struct niu *np, u8 *ldg_num_map) #endif } -static int niu_ldg_init(struct niu *np) +static int __devinit niu_ldg_init(struct niu *np) { struct niu_parent *parent = np->parent; u8 ldg_num_map[NIU_NUM_LDG]; @@ -9225,13 +9225,13 @@ static int niu_ldg_init(struct niu *np) return 0; } -static void niu_ldg_free(struct niu *np) +static void __devexit niu_ldg_free(struct niu *np) { if (np->flags & NIU_FLAGS_MSIX) pci_disable_msix(np->pdev); } -static int niu_get_of_props(struct niu *np) +static int __devinit niu_get_of_props(struct niu *np) { #ifdef CONFIG_SPARC64 struct net_device *dev = np->dev; @@ -9300,7 +9300,7 @@ static int niu_get_of_props(struct niu *np) #endif } -static int niu_get_invariants(struct niu *np) +static int __devinit niu_get_invariants(struct niu *np) { int err, have_props; u32 offset; @@ -9479,7 +9479,7 @@ static struct device_attribute niu_parent_attributes[] = { {} }; -static struct niu_parent *niu_new_parent(struct niu *np, +static struct niu_parent * __devinit niu_new_parent(struct niu *np, union niu_parent_id *id, u8 ptype) { @@ -9544,7 +9544,7 @@ static struct niu_parent *niu_new_parent(struct niu *np, return NULL; } -static struct niu_parent *niu_get_parent(struct niu *np, +static struct niu_parent * __devinit niu_get_parent(struct niu *np, union niu_parent_id *id, u8 ptype) { @@ -9662,7 +9662,7 @@ static const struct niu_ops niu_pci_ops = { .unmap_single = niu_pci_unmap_single, }; -static void niu_driver_version(void) +static void __devinit niu_driver_version(void) { static int niu_version_printed; @@ -9670,7 +9670,7 @@ static void niu_driver_version(void) pr_info("%s", version); } -static struct net_device *niu_alloc_and_init( +static struct net_device * __devinit niu_alloc_and_init( struct device *gen_dev, struct pci_dev *pdev, struct platform_device *op, const struct niu_ops *ops, u8 port) @@ -9714,14 +9714,14 @@ static const struct net_device_ops niu_netdev_ops = { .ndo_change_mtu = niu_change_mtu, }; -static void niu_assign_netdev_ops(struct net_device *dev) +static void __devinit niu_assign_netdev_ops(struct net_device *dev) { dev->netdev_ops = &niu_netdev_ops; dev->ethtool_ops = &niu_ethtool_ops; dev->watchdog_timeo = NIU_TX_TIMEOUT; } -static void niu_device_announce(struct niu *np) +static void __devinit niu_device_announce(struct niu *np) { struct net_device *dev = np->dev; @@ -9750,13 +9750,13 @@ static void niu_device_announce(struct niu *np) } } -static void niu_set_basic_features(struct net_device *dev) +static void __devinit niu_set_basic_features(struct net_device *dev) { dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXHASH; dev->features |= dev->hw_features | NETIF_F_RXCSUM; } -static int niu_pci_init_one(struct pci_dev *pdev, +static int __devinit niu_pci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { union niu_parent_id parent_id; @@ -9895,7 +9895,7 @@ static int niu_pci_init_one(struct pci_dev *pdev, return err; } -static void niu_pci_remove_one(struct pci_dev *pdev) +static void __devexit niu_pci_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -9980,7 +9980,7 @@ static struct pci_driver niu_pci_driver = { .name = DRV_MODULE_NAME, .id_table = niu_pci_tbl, .probe = niu_pci_init_one, - .remove = niu_pci_remove_one, + .remove = __devexit_p(niu_pci_remove_one), .suspend = niu_suspend, .resume = niu_resume, }; @@ -10044,7 +10044,7 @@ static const struct niu_ops niu_phys_ops = { .unmap_single = niu_phys_unmap_single, }; -static int niu_of_probe(struct platform_device *op) +static int __devinit niu_of_probe(struct platform_device *op) { union niu_parent_id parent_id; struct net_device *dev; @@ -10158,7 +10158,7 @@ static int niu_of_probe(struct platform_device *op) return err; } -static int niu_of_remove(struct platform_device *op) +static int __devexit niu_of_remove(struct platform_device *op) { struct net_device *dev = dev_get_drvdata(&op->dev); @@ -10211,7 +10211,7 @@ static struct platform_driver niu_of_driver = { .of_match_table = niu_match, }, .probe = niu_of_probe, - .remove = niu_of_remove, + .remove = __devexit_p(niu_of_remove), }; #endif /* CONFIG_SPARC64 */ diff --git a/trunk/drivers/net/ethernet/sun/sunbmac.c b/trunk/drivers/net/ethernet/sun/sunbmac.c index 8fda91009226..c9c977bf02ac 100644 --- a/trunk/drivers/net/ethernet/sun/sunbmac.c +++ b/trunk/drivers/net/ethernet/sun/sunbmac.c @@ -1074,7 +1074,7 @@ static const struct net_device_ops bigmac_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int bigmac_ether_init(struct platform_device *op, +static int __devinit bigmac_ether_init(struct platform_device *op, struct platform_device *qec_op) { static int version_printed; @@ -1233,7 +1233,7 @@ static int bigmac_ether_init(struct platform_device *op, /* QEC can be the parent of either QuadEthernet or a BigMAC. We want * the latter. */ -static int bigmac_sbus_probe(struct platform_device *op) +static int __devinit bigmac_sbus_probe(struct platform_device *op) { struct device *parent = op->dev.parent; struct platform_device *qec_op; @@ -1243,7 +1243,7 @@ static int bigmac_sbus_probe(struct platform_device *op) return bigmac_ether_init(op, qec_op); } -static int bigmac_sbus_remove(struct platform_device *op) +static int __devexit bigmac_sbus_remove(struct platform_device *op) { struct bigmac *bp = dev_get_drvdata(&op->dev); struct device *parent = op->dev.parent; @@ -1286,7 +1286,7 @@ static struct platform_driver bigmac_sbus_driver = { .of_match_table = bigmac_sbus_match, }, .probe = bigmac_sbus_probe, - .remove = bigmac_sbus_remove, + .remove = __devexit_p(bigmac_sbus_remove), }; module_platform_driver(bigmac_sbus_driver); diff --git a/trunk/drivers/net/ethernet/sun/sungem.c b/trunk/drivers/net/ethernet/sun/sungem.c index c7bc0561b8eb..6c8695ec7cb9 100644 --- a/trunk/drivers/net/ethernet/sun/sungem.c +++ b/trunk/drivers/net/ethernet/sun/sungem.c @@ -77,7 +77,7 @@ #define DRV_VERSION "1.0" #define DRV_AUTHOR "David S. Miller " -static char version[] = +static char version[] __devinitdata = DRV_NAME ".c:v" DRV_VERSION " " DRV_AUTHOR "\n"; MODULE_AUTHOR(DRV_AUTHOR); @@ -2763,7 +2763,7 @@ static void get_gem_mac_nonobp(struct pci_dev *pdev, unsigned char *dev_addr) } #endif /* not Sparc and not PPC */ -static int gem_get_device_address(struct gem *gp) +static int __devinit gem_get_device_address(struct gem *gp) { #if defined(CONFIG_SPARC) || defined(CONFIG_PPC_PMAC) struct net_device *dev = gp->dev; @@ -2827,7 +2827,7 @@ static const struct net_device_ops gem_netdev_ops = { #endif }; -static int gem_init_one(struct pci_dev *pdev, +static int __devinit gem_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { unsigned long gemreg_base, gemreg_len; diff --git a/trunk/drivers/net/ethernet/sun/sunhme.c b/trunk/drivers/net/ethernet/sun/sunhme.c index 43babc33a2c9..73f341b8befb 100644 --- a/trunk/drivers/net/ethernet/sun/sunhme.c +++ b/trunk/drivers/net/ethernet/sun/sunhme.c @@ -2499,7 +2499,7 @@ static int hme_version_printed; * * Return NULL on failure. */ -static struct quattro *quattro_sbus_find(struct platform_device *child) +static struct quattro * __devinit quattro_sbus_find(struct platform_device *child) { struct device *parent = child->dev.parent; struct platform_device *op; @@ -2580,7 +2580,7 @@ static void quattro_sbus_free_irqs(void) #endif /* CONFIG_SBUS */ #ifdef CONFIG_PCI -static struct quattro *quattro_pci_find(struct pci_dev *pdev) +static struct quattro * __devinit quattro_pci_find(struct pci_dev *pdev) { struct pci_dev *bdev = pdev->bus->self; struct quattro *qp; @@ -2623,7 +2623,7 @@ static const struct net_device_ops hme_netdev_ops = { }; #ifdef CONFIG_SBUS -static int happy_meal_sbus_probe_one(struct platform_device *op, int is_qfe) +static int __devinit happy_meal_sbus_probe_one(struct platform_device *op, int is_qfe) { struct device_node *dp = op->dev.of_node, *sbus_dp; struct quattro *qp = NULL; @@ -2927,7 +2927,7 @@ static void get_hme_mac_nonsparc(struct pci_dev *pdev, unsigned char *dev_addr) } #endif /* !(CONFIG_SPARC) */ -static int happy_meal_pci_probe(struct pci_dev *pdev, +static int __devinit happy_meal_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct quattro *qp = NULL; @@ -3162,7 +3162,7 @@ static int happy_meal_pci_probe(struct pci_dev *pdev, return err; } -static void happy_meal_pci_remove(struct pci_dev *pdev) +static void __devexit happy_meal_pci_remove(struct pci_dev *pdev) { struct happy_meal *hp = dev_get_drvdata(&pdev->dev); struct net_device *net_dev = hp->dev; @@ -3190,7 +3190,7 @@ static struct pci_driver hme_pci_driver = { .name = "hme", .id_table = happymeal_pci_ids, .probe = happy_meal_pci_probe, - .remove = happy_meal_pci_remove, + .remove = __devexit_p(happy_meal_pci_remove), }; static int __init happy_meal_pci_init(void) @@ -3216,7 +3216,7 @@ static void happy_meal_pci_exit(void) #ifdef CONFIG_SBUS static const struct of_device_id hme_sbus_match[]; -static int hme_sbus_probe(struct platform_device *op) +static int __devinit hme_sbus_probe(struct platform_device *op) { const struct of_device_id *match; struct device_node *dp = op->dev.of_node; @@ -3234,7 +3234,7 @@ static int hme_sbus_probe(struct platform_device *op) return happy_meal_sbus_probe_one(op, is_qfe); } -static int hme_sbus_remove(struct platform_device *op) +static int __devexit hme_sbus_remove(struct platform_device *op) { struct happy_meal *hp = dev_get_drvdata(&op->dev); struct net_device *net_dev = hp->dev; @@ -3284,7 +3284,7 @@ static struct platform_driver hme_sbus_driver = { .of_match_table = hme_sbus_match, }, .probe = hme_sbus_probe, - .remove = hme_sbus_remove, + .remove = __devexit_p(hme_sbus_remove), }; static int __init happy_meal_sbus_init(void) diff --git a/trunk/drivers/net/ethernet/sun/sunqe.c b/trunk/drivers/net/ethernet/sun/sunqe.c index 1dcee6915843..aeded7ff1c8f 100644 --- a/trunk/drivers/net/ethernet/sun/sunqe.c +++ b/trunk/drivers/net/ethernet/sun/sunqe.c @@ -744,7 +744,7 @@ static void qec_init_once(struct sunqec *qecp, struct platform_device *op) qecp->gregs + GLOB_RSIZE); } -static u8 qec_get_burst(struct device_node *dp) +static u8 __devinit qec_get_burst(struct device_node *dp) { u8 bsizes, bsizes_more; @@ -764,7 +764,7 @@ static u8 qec_get_burst(struct device_node *dp) return bsizes; } -static struct sunqec *get_qec(struct platform_device *child) +static struct sunqec * __devinit get_qec(struct platform_device *child) { struct platform_device *op = to_platform_device(child->dev.parent); struct sunqec *qecp; @@ -830,7 +830,7 @@ static const struct net_device_ops qec_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int qec_ether_init(struct platform_device *op) +static int __devinit qec_ether_init(struct platform_device *op) { static unsigned version_printed; struct net_device *dev; @@ -929,12 +929,12 @@ static int qec_ether_init(struct platform_device *op) return res; } -static int qec_sbus_probe(struct platform_device *op) +static int __devinit qec_sbus_probe(struct platform_device *op) { return qec_ether_init(op); } -static int qec_sbus_remove(struct platform_device *op) +static int __devexit qec_sbus_remove(struct platform_device *op) { struct sunqe *qp = dev_get_drvdata(&op->dev); struct net_device *net_dev = qp->dev; @@ -971,7 +971,7 @@ static struct platform_driver qec_sbus_driver = { .of_match_table = qec_sbus_match, }, .probe = qec_sbus_probe, - .remove = qec_sbus_remove, + .remove = __devexit_p(qec_sbus_remove), }; static int __init qec_init(void) diff --git a/trunk/drivers/net/ethernet/sun/sunvnet.c b/trunk/drivers/net/ethernet/sun/sunvnet.c index 2852b7099eee..a108db35924e 100644 --- a/trunk/drivers/net/ethernet/sun/sunvnet.c +++ b/trunk/drivers/net/ethernet/sun/sunvnet.c @@ -25,7 +25,7 @@ #define DRV_MODULE_VERSION "1.0" #define DRV_MODULE_RELDATE "June 25, 2007" -static char version[] = +static char version[] __devinitdata = DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; MODULE_AUTHOR("David S. Miller (davem@davemloft.net)"); MODULE_DESCRIPTION("Sun LDOM virtual network driver"); @@ -937,7 +937,7 @@ static void vnet_port_free_tx_bufs(struct vnet_port *port) } } -static int vnet_port_alloc_tx_bufs(struct vnet_port *port) +static int __devinit vnet_port_alloc_tx_bufs(struct vnet_port *port) { struct vio_dring_state *dr; unsigned long len; @@ -1019,7 +1019,7 @@ static const struct net_device_ops vnet_ops = { .ndo_start_xmit = vnet_start_xmit, }; -static struct vnet *vnet_new(const u64 *local_mac) +static struct vnet * __devinit vnet_new(const u64 *local_mac) { struct net_device *dev; struct vnet *vp; @@ -1067,7 +1067,7 @@ static struct vnet *vnet_new(const u64 *local_mac) return ERR_PTR(err); } -static struct vnet *vnet_find_or_create(const u64 *local_mac) +static struct vnet * __devinit vnet_find_or_create(const u64 *local_mac) { struct vnet *iter, *vp; @@ -1088,7 +1088,7 @@ static struct vnet *vnet_find_or_create(const u64 *local_mac) static const char *local_mac_prop = "local-mac-address"; -static struct vnet *vnet_find_parent(struct mdesc_handle *hp, +static struct vnet * __devinit vnet_find_parent(struct mdesc_handle *hp, u64 port_node) { const u64 *local_mac = NULL; @@ -1125,14 +1125,14 @@ static struct vio_driver_ops vnet_vio_ops = { .handshake_complete = vnet_handshake_complete, }; -static void print_version(void) +static void __devinit print_version(void) { printk_once(KERN_INFO "%s", version); } const char *remote_macaddr_prop = "remote-mac-address"; -static int vnet_port_probe(struct vio_dev *vdev, +static int __devinit vnet_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) { struct mdesc_handle *hp; diff --git a/trunk/drivers/net/ethernet/tehuti/tehuti.c b/trunk/drivers/net/ethernet/tehuti/tehuti.c index 1e4d743ff03e..6ce9edd95c04 100644 --- a/trunk/drivers/net/ethernet/tehuti/tehuti.c +++ b/trunk/drivers/net/ethernet/tehuti/tehuti.c @@ -1914,7 +1914,7 @@ static const struct net_device_ops bdx_netdev_ops = { */ /* TBD: netif_msg should be checked and implemented. I disable it for now */ -static int +static int __devinit bdx_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *ndev; @@ -2427,7 +2427,7 @@ static void bdx_set_ethtool_ops(struct net_device *netdev) * Hot-Plug event, or because the driver is going to be removed from * memory. **/ -static void bdx_remove(struct pci_dev *pdev) +static void __devexit bdx_remove(struct pci_dev *pdev) { struct pci_nic *nic = pci_get_drvdata(pdev); struct net_device *ndev; @@ -2458,7 +2458,7 @@ static struct pci_driver bdx_pci_driver = { .name = BDX_DRV_NAME, .id_table = bdx_pci_tbl, .probe = bdx_probe, - .remove = bdx_remove, + .remove = __devexit_p(bdx_remove), }; /* diff --git a/trunk/drivers/net/ethernet/ti/cpmac.c b/trunk/drivers/net/ethernet/ti/cpmac.c index d9625f62b026..860c2526f08d 100644 --- a/trunk/drivers/net/ethernet/ti/cpmac.c +++ b/trunk/drivers/net/ethernet/ti/cpmac.c @@ -1110,7 +1110,7 @@ static const struct net_device_ops cpmac_netdev_ops = { static int external_switch; -static int cpmac_probe(struct platform_device *pdev) +static int __devinit cpmac_probe(struct platform_device *pdev) { int rc, phy_id; char mdio_bus_id[MII_BUS_ID_SIZE]; @@ -1204,7 +1204,7 @@ static int cpmac_probe(struct platform_device *pdev) return rc; } -static int cpmac_remove(struct platform_device *pdev) +static int __devexit cpmac_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); unregister_netdev(dev); @@ -1216,10 +1216,10 @@ static struct platform_driver cpmac_driver = { .driver.name = "cpmac", .driver.owner = THIS_MODULE, .probe = cpmac_probe, - .remove = cpmac_remove, + .remove = __devexit_p(cpmac_remove), }; -int cpmac_init(void) +int __devinit cpmac_init(void) { u32 mask; int i, res; @@ -1290,7 +1290,7 @@ int cpmac_init(void) return res; } -void cpmac_exit(void) +void __devexit cpmac_exit(void) { platform_driver_unregister(&cpmac_driver); mdiobus_unregister(cpmac_mii); diff --git a/trunk/drivers/net/ethernet/ti/cpsw.c b/trunk/drivers/net/ethernet/ti/cpsw.c index 40aff684aa23..c9714e1c164a 100644 --- a/trunk/drivers/net/ethernet/ti/cpsw.c +++ b/trunk/drivers/net/ethernet/ti/cpsw.c @@ -1136,7 +1136,7 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data, return ret; } -static int cpsw_probe(struct platform_device *pdev) +static int __devinit cpsw_probe(struct platform_device *pdev) { struct cpsw_platform_data *data = pdev->dev.platform_data; struct net_device *ndev; @@ -1398,7 +1398,7 @@ static int cpsw_probe(struct platform_device *pdev) return ret; } -static int cpsw_remove(struct platform_device *pdev) +static int __devexit cpsw_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct cpsw_priv *priv = netdev_priv(ndev); @@ -1467,7 +1467,7 @@ static struct platform_driver cpsw_driver = { .of_match_table = of_match_ptr(cpsw_of_mtable), }, .probe = cpsw_probe, - .remove = cpsw_remove, + .remove = __devexit_p(cpsw_remove), }; static int __init cpsw_init(void) diff --git a/trunk/drivers/net/ethernet/ti/davinci_emac.c b/trunk/drivers/net/ethernet/ti/davinci_emac.c index 2a3e2c56bc60..fce89a0ab06e 100644 --- a/trunk/drivers/net/ethernet/ti/davinci_emac.c +++ b/trunk/drivers/net/ethernet/ti/davinci_emac.c @@ -1850,7 +1850,7 @@ static struct emac_platform_data * resource information from platform init and register a network device * and allocate resources necessary for driver to perform */ -static int davinci_emac_probe(struct platform_device *pdev) +static int __devinit davinci_emac_probe(struct platform_device *pdev) { int rc = 0; struct resource *res; @@ -2039,7 +2039,7 @@ static int davinci_emac_probe(struct platform_device *pdev) * Called when removing the device driver. We disable clock usage and release * the resources taken up by the driver and unregister network device */ -static int davinci_emac_remove(struct platform_device *pdev) +static int __devexit davinci_emac_remove(struct platform_device *pdev) { struct resource *res; struct net_device *ndev = platform_get_drvdata(pdev); @@ -2107,7 +2107,7 @@ static struct platform_driver davinci_emac_driver = { .of_match_table = of_match_ptr(davinci_emac_of_match), }, .probe = davinci_emac_probe, - .remove = davinci_emac_remove, + .remove = __devexit_p(davinci_emac_remove), }; /** diff --git a/trunk/drivers/net/ethernet/ti/davinci_mdio.c b/trunk/drivers/net/ethernet/ti/davinci_mdio.c index cca25509b039..ae74280c0b9f 100644 --- a/trunk/drivers/net/ethernet/ti/davinci_mdio.c +++ b/trunk/drivers/net/ethernet/ti/davinci_mdio.c @@ -310,7 +310,7 @@ static int davinci_mdio_probe_dt(struct mdio_platform_data *data, } -static int davinci_mdio_probe(struct platform_device *pdev) +static int __devinit davinci_mdio_probe(struct platform_device *pdev) { struct mdio_platform_data *pdata = pdev->dev.platform_data; struct device *dev = &pdev->dev; @@ -416,7 +416,7 @@ static int davinci_mdio_probe(struct platform_device *pdev) return ret; } -static int davinci_mdio_remove(struct platform_device *pdev) +static int __devexit davinci_mdio_remove(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct davinci_mdio_data *data = dev_get_drvdata(dev); @@ -496,7 +496,7 @@ static struct platform_driver davinci_mdio_driver = { .of_match_table = of_match_ptr(davinci_mdio_of_mtable), }, .probe = davinci_mdio_probe, - .remove = davinci_mdio_remove, + .remove = __devexit_p(davinci_mdio_remove), }; static int __init davinci_mdio_init(void) diff --git a/trunk/drivers/net/ethernet/ti/tlan.c b/trunk/drivers/net/ethernet/ti/tlan.c index af16081677e7..3e6abf0f2771 100644 --- a/trunk/drivers/net/ethernet/ti/tlan.c +++ b/trunk/drivers/net/ethernet/ti/tlan.c @@ -300,7 +300,7 @@ these functions are more or less common to all linux network drivers. **************************************************************/ -static void tlan_remove_one(struct pci_dev *pdev) +static void __devexit tlan_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct tlan_priv *priv = netdev_priv(dev); @@ -392,7 +392,7 @@ static struct pci_driver tlan_driver = { .name = "tlan", .id_table = tlan_pci_tbl, .probe = tlan_init_one, - .remove = tlan_remove_one, + .remove = __devexit_p(tlan_remove_one), .suspend = tlan_suspend, .resume = tlan_resume, }; @@ -434,7 +434,7 @@ static int __init tlan_probe(void) } -static int tlan_init_one(struct pci_dev *pdev, +static int __devinit tlan_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { return tlan_probe1(pdev, -1, -1, 0, ent); @@ -460,7 +460,7 @@ static int tlan_init_one(struct pci_dev *pdev, * **************************************************************/ -static int tlan_probe1(struct pci_dev *pdev, +static int __devinit tlan_probe1(struct pci_dev *pdev, long ioaddr, int irq, int rev, const struct pci_device_id *ent) { diff --git a/trunk/drivers/net/ethernet/toshiba/ps3_gelic_net.c b/trunk/drivers/net/ethernet/toshiba/ps3_gelic_net.c index d7c8af7cca02..5ee82a77723b 100644 --- a/trunk/drivers/net/ethernet/toshiba/ps3_gelic_net.c +++ b/trunk/drivers/net/ethernet/toshiba/ps3_gelic_net.c @@ -234,7 +234,7 @@ static void gelic_card_free_chain(struct gelic_card *card, * * returns 0 on success, <0 on failure */ -static int gelic_card_init_chain(struct gelic_card *card, +static int __devinit gelic_card_init_chain(struct gelic_card *card, struct gelic_descr_chain *chain, struct gelic_descr *start_descr, int no) @@ -428,7 +428,7 @@ static int gelic_card_fill_rx_chain(struct gelic_card *card) * * returns 0 on success, < 0 on failure */ -static int gelic_card_alloc_rx_skbs(struct gelic_card *card) +static int __devinit gelic_card_alloc_rx_skbs(struct gelic_card *card) { struct gelic_descr_chain *chain; int ret; @@ -1468,7 +1468,7 @@ static const struct net_device_ops gelic_netdevice_ops = { * * fills out function pointers in the net_device structure */ -static void gelic_ether_setup_netdev_ops(struct net_device *netdev, +static void __devinit gelic_ether_setup_netdev_ops(struct net_device *netdev, struct napi_struct *napi) { netdev->watchdog_timeo = GELIC_NET_WATCHDOG_TIMEOUT; @@ -1489,7 +1489,7 @@ static void gelic_ether_setup_netdev_ops(struct net_device *netdev, * gelic_ether_setup_netdev initializes the net_device structure * and register it. **/ -int gelic_net_setup_netdev(struct net_device *netdev, +int __devinit gelic_net_setup_netdev(struct net_device *netdev, struct gelic_card *card) { int status; @@ -1542,7 +1542,7 @@ int gelic_net_setup_netdev(struct net_device *netdev, * the card and net_device structures are linked to each other */ #define GELIC_ALIGN (32) -static struct gelic_card *gelic_alloc_card_net(struct net_device **netdev) +static struct gelic_card * __devinit gelic_alloc_card_net(struct net_device **netdev) { struct gelic_card *card; struct gelic_port *port; @@ -1593,7 +1593,7 @@ static struct gelic_card *gelic_alloc_card_net(struct net_device **netdev) return card; } -static void gelic_card_get_vlan_info(struct gelic_card *card) +static void __devinit gelic_card_get_vlan_info(struct gelic_card *card) { u64 v1, v2; int status; @@ -1667,7 +1667,7 @@ static void gelic_card_get_vlan_info(struct gelic_card *card) /** * ps3_gelic_driver_probe - add a device to the control of this driver */ -static int ps3_gelic_driver_probe(struct ps3_system_bus_device *dev) +static int __devinit ps3_gelic_driver_probe(struct ps3_system_bus_device *dev) { struct gelic_card *card; struct net_device *netdev; diff --git a/trunk/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c b/trunk/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c index d568af1eb4f4..72b775fd49c8 100644 --- a/trunk/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c +++ b/trunk/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c @@ -2305,7 +2305,7 @@ static const struct iw_handler_def gelic_wl_wext_handler_def = { .get_wireless_stats = gelic_wl_get_wireless_stats, }; -static struct net_device *gelic_wl_alloc(struct gelic_card *card) +static struct net_device * __devinit gelic_wl_alloc(struct gelic_card *card) { struct net_device *netdev; struct gelic_port *port; @@ -2582,7 +2582,7 @@ static const struct ethtool_ops gelic_wl_ethtool_ops = { .get_link = gelic_wl_get_link, }; -static void gelic_wl_setup_netdev_ops(struct net_device *netdev) +static void __devinit gelic_wl_setup_netdev_ops(struct net_device *netdev) { struct gelic_wl_info *wl; wl = port_wl(netdev_priv(netdev)); @@ -2598,7 +2598,7 @@ static void gelic_wl_setup_netdev_ops(struct net_device *netdev) /* * driver probe/remove */ -int gelic_wl_driver_probe(struct gelic_card *card) +int __devinit gelic_wl_driver_probe(struct gelic_card *card) { int ret; struct net_device *netdev; diff --git a/trunk/drivers/net/ethernet/toshiba/spider_net.c b/trunk/drivers/net/ethernet/toshiba/spider_net.c index f1b91fd7e41c..c1ebfe9efcb3 100644 --- a/trunk/drivers/net/ethernet/toshiba/spider_net.c +++ b/trunk/drivers/net/ethernet/toshiba/spider_net.c @@ -2492,7 +2492,7 @@ spider_net_setup_pci_dev(struct pci_dev *pdev) * spider_net_probe initializes pdev and registers a net_device * structure for it. After that, the device can be ifconfig'ed up **/ -static int +static int __devinit spider_net_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { int err = -EIO; @@ -2531,7 +2531,7 @@ spider_net_probe(struct pci_dev *pdev, const struct pci_device_id *ent) * spider_net_remove is called to remove the device and unregisters the * net_device **/ -static void +static void __devexit spider_net_remove(struct pci_dev *pdev) { struct net_device *netdev; @@ -2559,7 +2559,7 @@ static struct pci_driver spider_net_driver = { .name = spider_net_driver_name, .id_table = spider_net_pci_tbl, .probe = spider_net_probe, - .remove = spider_net_remove + .remove = __devexit_p(spider_net_remove) }; /** diff --git a/trunk/drivers/net/ethernet/toshiba/tc35815.c b/trunk/drivers/net/ethernet/toshiba/tc35815.c index 5db09efae927..651a70c55e6e 100644 --- a/trunk/drivers/net/ethernet/toshiba/tc35815.c +++ b/trunk/drivers/net/ethernet/toshiba/tc35815.c @@ -60,7 +60,7 @@ enum tc35815_chiptype { /* indexed by tc35815_chiptype, above */ static const struct { const char *name; -} chip_info[] = { +} chip_info[] __devinitdata = { { "TOSHIBA TC35815CF 10/100BaseTX" }, { "TOSHIBA TC35815 with Wake on LAN" }, { "TOSHIBA TC35815/TX4939" }, @@ -719,7 +719,7 @@ static int tc_mii_init(struct net_device *dev) * should provide a "tc35815-mac" device with a MAC address in its * platform_data. */ -static int tc35815_mac_match(struct device *dev, void *data) +static int __devinit tc35815_mac_match(struct device *dev, void *data) { struct platform_device *plat_dev = to_platform_device(dev); struct pci_dev *pci_dev = data; @@ -727,7 +727,7 @@ static int tc35815_mac_match(struct device *dev, void *data) return !strcmp(plat_dev->name, "tc35815-mac") && plat_dev->id == id; } -static int tc35815_read_plat_dev_addr(struct net_device *dev) +static int __devinit tc35815_read_plat_dev_addr(struct net_device *dev) { struct tc35815_local *lp = netdev_priv(dev); struct device *pd = bus_find_device(&platform_bus_type, NULL, @@ -741,13 +741,13 @@ static int tc35815_read_plat_dev_addr(struct net_device *dev) return -ENODEV; } #else -static int tc35815_read_plat_dev_addr(struct net_device *dev) +static int __devinit tc35815_read_plat_dev_addr(struct net_device *dev) { return -ENODEV; } #endif -static int tc35815_init_dev_addr(struct net_device *dev) +static int __devinit tc35815_init_dev_addr(struct net_device *dev) { struct tc35815_regs __iomem *tr = (struct tc35815_regs __iomem *)dev->base_addr; @@ -785,7 +785,7 @@ static const struct net_device_ops tc35815_netdev_ops = { #endif }; -static int tc35815_init_one(struct pci_dev *pdev, +static int __devinit tc35815_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { void __iomem *ioaddr = NULL; @@ -878,7 +878,7 @@ static int tc35815_init_one(struct pci_dev *pdev, } -static void tc35815_remove_one(struct pci_dev *pdev) +static void __devexit tc35815_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct tc35815_local *lp = netdev_priv(dev); @@ -2198,7 +2198,7 @@ static struct pci_driver tc35815_pci_driver = { .name = MODNAME, .id_table = tc35815_pci_tbl, .probe = tc35815_init_one, - .remove = tc35815_remove_one, + .remove = __devexit_p(tc35815_remove_one), #ifdef CONFIG_PM .suspend = tc35815_suspend, .resume = tc35815_resume, diff --git a/trunk/drivers/net/ethernet/via/via-rhine.c b/trunk/drivers/net/ethernet/via/via-rhine.c index 53ccc5174d08..0459c096629f 100644 --- a/trunk/drivers/net/ethernet/via/via-rhine.c +++ b/trunk/drivers/net/ethernet/via/via-rhine.c @@ -113,7 +113,7 @@ static const int multicast_filter_limit = 32; #include /* These identify the driver base version and may not be removed. */ -static const char version[] = +static const char version[] __devinitconst = "v1.10-LK" DRV_VERSION " " DRV_RELDATE " Written by Donald Becker"; /* This driver was written to use PCI memory space. Some early versions @@ -657,7 +657,7 @@ static void enable_mmio(long pioaddr, u32 quirks) * Loads bytes 0x00-0x05, 0x6E-0x6F, 0x78-0x7B from EEPROM * (plus 0x6C for Rhine-I/II) */ -static void rhine_reload_eeprom(long pioaddr, struct net_device *dev) +static void __devinit rhine_reload_eeprom(long pioaddr, struct net_device *dev) { struct rhine_private *rp = netdev_priv(dev); void __iomem *ioaddr = rp->base; @@ -823,7 +823,7 @@ static int rhine_napipoll(struct napi_struct *napi, int budget) return work_done; } -static void rhine_hw_init(struct net_device *dev, long pioaddr) +static void __devinit rhine_hw_init(struct net_device *dev, long pioaddr) { struct rhine_private *rp = netdev_priv(dev); @@ -856,7 +856,7 @@ static const struct net_device_ops rhine_netdev_ops = { #endif }; -static int rhine_init_one(struct pci_dev *pdev, +static int __devinit rhine_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; @@ -2232,7 +2232,7 @@ static int rhine_close(struct net_device *dev) } -static void rhine_remove_one(struct pci_dev *pdev) +static void __devexit rhine_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct rhine_private *rp = netdev_priv(dev); @@ -2359,7 +2359,7 @@ static struct pci_driver rhine_driver = { .name = DRV_NAME, .id_table = rhine_pci_tbl, .probe = rhine_init_one, - .remove = rhine_remove_one, + .remove = __devexit_p(rhine_remove_one), .shutdown = rhine_shutdown, .driver.pm = RHINE_PM_OPS, }; diff --git a/trunk/drivers/net/ethernet/via/via-velocity.c b/trunk/drivers/net/ethernet/via/via-velocity.c index dc9edd48c933..a46c19859683 100644 --- a/trunk/drivers/net/ethernet/via/via-velocity.c +++ b/trunk/drivers/net/ethernet/via/via-velocity.c @@ -375,7 +375,7 @@ MODULE_DEVICE_TABLE(pci, velocity_id_table); * Given a chip identifier return a suitable description. Returns * a pointer a static string valid while the driver is loaded. */ -static const char *get_chip_name(enum chip_type chip_id) +static const char __devinit *get_chip_name(enum chip_type chip_id) { int i; for (i = 0; chip_info_table[i].name != NULL; i++) @@ -392,7 +392,7 @@ static const char *get_chip_name(enum chip_type chip_id) * unload for each active device that is present. Disconnects * the device from the network layer and frees all the resources */ -static void velocity_remove1(struct pci_dev *pdev) +static void __devexit velocity_remove1(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct velocity_info *vptr = netdev_priv(dev); @@ -421,8 +421,7 @@ static void velocity_remove1(struct pci_dev *pdev) * all the verification and checking as well as reporting so that * we don't duplicate code for each option. */ -static void velocity_set_int_opt(int *opt, int val, int min, int max, int def, - char *name, const char *devname) +static void __devinit velocity_set_int_opt(int *opt, int val, int min, int max, int def, char *name, const char *devname) { if (val == -1) *opt = def; @@ -450,8 +449,7 @@ static void velocity_set_int_opt(int *opt, int val, int min, int max, int def, * all the verification and checking as well as reporting so that * we don't duplicate code for each option. */ -static void velocity_set_bool_opt(u32 *opt, int val, int def, u32 flag, - char *name, const char *devname) +static void __devinit velocity_set_bool_opt(u32 *opt, int val, int def, u32 flag, char *name, const char *devname) { (*opt) &= (~flag); if (val == -1) @@ -476,8 +474,7 @@ static void velocity_set_bool_opt(u32 *opt, int val, int def, u32 flag, * Turn the module and command options into a single structure * for the current device */ -static void velocity_get_options(struct velocity_opt *opts, int index, - const char *devname) +static void __devinit velocity_get_options(struct velocity_opt *opts, int index, const char *devname) { velocity_set_int_opt(&opts->rx_thresh, rx_thresh[index], RX_THRESH_MIN, RX_THRESH_MAX, RX_THRESH_DEF, "rx_thresh", devname); @@ -2630,7 +2627,7 @@ static const struct net_device_ops velocity_netdev_ops = { * Set up the initial velocity_info struct for the device that has been * discovered. */ -static void velocity_init_info(struct pci_dev *pdev, +static void __devinit velocity_init_info(struct pci_dev *pdev, struct velocity_info *vptr, const struct velocity_info_tbl *info) { @@ -2651,8 +2648,7 @@ static void velocity_init_info(struct pci_dev *pdev, * Retrieve the PCI configuration space data that interests us from * the kernel PCI layer */ -static int velocity_get_pci_info(struct velocity_info *vptr, - struct pci_dev *pdev) +static int __devinit velocity_get_pci_info(struct velocity_info *vptr, struct pci_dev *pdev) { vptr->rev_id = pdev->revision; @@ -2689,7 +2685,7 @@ static int velocity_get_pci_info(struct velocity_info *vptr, * Print per driver data as the kernel driver finds Velocity * hardware */ -static void velocity_print_info(struct velocity_info *vptr) +static void __devinit velocity_print_info(struct velocity_info *vptr) { struct net_device *dev = vptr->dev; @@ -2713,8 +2709,7 @@ static u32 velocity_get_link(struct net_device *dev) * Configure a discovered adapter from scratch. Return a negative * errno error code on failure paths. */ -static int velocity_found1(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __devinit velocity_found1(struct pci_dev *pdev, const struct pci_device_id *ent) { static int first = 1; struct net_device *dev; @@ -3113,7 +3108,7 @@ static struct pci_driver velocity_driver = { .name = VELOCITY_NAME, .id_table = velocity_id_table, .probe = velocity_found1, - .remove = velocity_remove1, + .remove = __devexit_p(velocity_remove1), #ifdef CONFIG_PM .suspend = velocity_suspend, .resume = velocity_resume, diff --git a/trunk/drivers/net/ethernet/wiznet/w5100.c b/trunk/drivers/net/ethernet/wiznet/w5100.c index 352383890326..7daf92e56b65 100644 --- a/trunk/drivers/net/ethernet/wiznet/w5100.c +++ b/trunk/drivers/net/ethernet/wiznet/w5100.c @@ -621,7 +621,7 @@ static const struct net_device_ops w5100_netdev_ops = { .ndo_change_mtu = eth_change_mtu, }; -static int w5100_hw_probe(struct platform_device *pdev) +static int __devinit w5100_hw_probe(struct platform_device *pdev) { struct wiznet_platform_data *data = pdev->dev.platform_data; struct net_device *ndev = platform_get_drvdata(pdev); @@ -696,7 +696,7 @@ static int w5100_hw_probe(struct platform_device *pdev) return 0; } -static int w5100_probe(struct platform_device *pdev) +static int __devinit w5100_probe(struct platform_device *pdev) { struct w5100_priv *priv; struct net_device *ndev; @@ -739,7 +739,7 @@ static int w5100_probe(struct platform_device *pdev) return err; } -static int w5100_remove(struct platform_device *pdev) +static int __devexit w5100_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct w5100_priv *priv = netdev_priv(ndev); @@ -799,7 +799,7 @@ static struct platform_driver w5100_driver = { .pm = &w5100_pm_ops, }, .probe = w5100_probe, - .remove = w5100_remove, + .remove = __devexit_p(w5100_remove), }; module_platform_driver(w5100_driver); diff --git a/trunk/drivers/net/ethernet/wiznet/w5300.c b/trunk/drivers/net/ethernet/wiznet/w5300.c index 9d1d986f8d40..bd9eec676a58 100644 --- a/trunk/drivers/net/ethernet/wiznet/w5300.c +++ b/trunk/drivers/net/ethernet/wiznet/w5300.c @@ -541,7 +541,7 @@ static const struct net_device_ops w5300_netdev_ops = { .ndo_change_mtu = eth_change_mtu, }; -static int w5300_hw_probe(struct platform_device *pdev) +static int __devinit w5300_hw_probe(struct platform_device *pdev) { struct wiznet_platform_data *data = pdev->dev.platform_data; struct net_device *ndev = platform_get_drvdata(pdev); @@ -608,7 +608,7 @@ static int w5300_hw_probe(struct platform_device *pdev) return 0; } -static int w5300_probe(struct platform_device *pdev) +static int __devinit w5300_probe(struct platform_device *pdev) { struct w5300_priv *priv; struct net_device *ndev; @@ -651,7 +651,7 @@ static int w5300_probe(struct platform_device *pdev) return err; } -static int w5300_remove(struct platform_device *pdev) +static int __devexit w5300_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct w5300_priv *priv = netdev_priv(ndev); @@ -711,7 +711,7 @@ static struct platform_driver w5300_driver = { .pm = &w5300_pm_ops, }, .probe = w5300_probe, - .remove = w5300_remove, + .remove = __devexit_p(w5300_remove), }; module_platform_driver(w5300_driver); diff --git a/trunk/drivers/net/ethernet/xilinx/ll_temac_main.c b/trunk/drivers/net/ethernet/xilinx/ll_temac_main.c index aad909d793d7..f8e351880119 100644 --- a/trunk/drivers/net/ethernet/xilinx/ll_temac_main.c +++ b/trunk/drivers/net/ethernet/xilinx/ll_temac_main.c @@ -1002,7 +1002,7 @@ static const struct ethtool_ops temac_ethtool_ops = { .get_ts_info = ethtool_op_get_ts_info, }; -static int temac_of_probe(struct platform_device *op) +static int __devinit temac_of_probe(struct platform_device *op) { struct device_node *np; struct temac_local *lp; @@ -1144,7 +1144,7 @@ static int temac_of_probe(struct platform_device *op) return rc; } -static int temac_of_remove(struct platform_device *op) +static int __devexit temac_of_remove(struct platform_device *op) { struct net_device *ndev = dev_get_drvdata(&op->dev); struct temac_local *lp = netdev_priv(ndev); @@ -1163,7 +1163,7 @@ static int temac_of_remove(struct platform_device *op) return 0; } -static struct of_device_id temac_of_match[] = { +static struct of_device_id temac_of_match[] __devinitdata = { { .compatible = "xlnx,xps-ll-temac-1.01.b", }, { .compatible = "xlnx,xps-ll-temac-2.00.a", }, { .compatible = "xlnx,xps-ll-temac-2.02.a", }, @@ -1174,7 +1174,7 @@ MODULE_DEVICE_TABLE(of, temac_of_match); static struct platform_driver temac_of_driver = { .probe = temac_of_probe, - .remove = temac_of_remove, + .remove = __devexit_p(temac_of_remove), .driver = { .owner = THIS_MODULE, .name = "xilinx_temac", diff --git a/trunk/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/trunk/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index d9f69b82cc4f..a788501e978e 100644 --- a/trunk/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/trunk/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -48,7 +48,7 @@ #define AXIENET_REGS_N 32 /* Match table for of_platform binding */ -static struct of_device_id axienet_of_match[] = { +static struct of_device_id axienet_of_match[] __devinitdata = { { .compatible = "xlnx,axi-ethernet-1.00.a", }, { .compatible = "xlnx,axi-ethernet-1.01.a", }, { .compatible = "xlnx,axi-ethernet-2.01.a", }, @@ -1482,7 +1482,7 @@ static void axienet_dma_err_handler(unsigned long data) * device. Parses through device tree and populates fields of * axienet_local. It registers the Ethernet device. */ -static int axienet_of_probe(struct platform_device *op) +static int __devinit axienet_of_probe(struct platform_device *op) { __be32 *p; int size, ret = 0; @@ -1632,7 +1632,7 @@ static int axienet_of_probe(struct platform_device *op) return ret; } -static int axienet_of_remove(struct platform_device *op) +static int __devexit axienet_of_remove(struct platform_device *op) { struct net_device *ndev = dev_get_drvdata(&op->dev); struct axienet_local *lp = netdev_priv(ndev); @@ -1656,7 +1656,7 @@ static int axienet_of_remove(struct platform_device *op) static struct platform_driver axienet_of_driver = { .probe = axienet_of_probe, - .remove = axienet_of_remove, + .remove = __devexit_p(axienet_of_remove), .driver = { .owner = THIS_MODULE, .name = "xilinx_axienet", diff --git a/trunk/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/trunk/drivers/net/ethernet/xilinx/xilinx_emaclite.c index 919b983114e9..77cfe5110318 100644 --- a/trunk/drivers/net/ethernet/xilinx/xilinx_emaclite.c +++ b/trunk/drivers/net/ethernet/xilinx/xilinx_emaclite.c @@ -1107,7 +1107,7 @@ static struct net_device_ops xemaclite_netdev_ops; * Return: 0, if the driver is bound to the Emaclite device, or * a negative error if there is failure. */ -static int xemaclite_of_probe(struct platform_device *ofdev) +static int __devinit xemaclite_of_probe(struct platform_device *ofdev) { struct resource r_irq; /* Interrupt resources */ struct resource r_mem; /* IO mem resources */ @@ -1229,7 +1229,7 @@ static int xemaclite_of_probe(struct platform_device *ofdev) * * Return: 0, always. */ -static int xemaclite_of_remove(struct platform_device *of_dev) +static int __devexit xemaclite_of_remove(struct platform_device *of_dev) { struct device *dev = &of_dev->dev; struct net_device *ndev = dev_get_drvdata(dev); @@ -1280,7 +1280,7 @@ static struct net_device_ops xemaclite_netdev_ops = { }; /* Match table for OF platform binding */ -static struct of_device_id xemaclite_of_match[] = { +static struct of_device_id xemaclite_of_match[] __devinitdata = { { .compatible = "xlnx,opb-ethernetlite-1.01.a", }, { .compatible = "xlnx,opb-ethernetlite-1.01.b", }, { .compatible = "xlnx,xps-ethernetlite-1.00.a", }, @@ -1298,7 +1298,7 @@ static struct platform_driver xemaclite_of_driver = { .of_match_table = xemaclite_of_match, }, .probe = xemaclite_of_probe, - .remove = xemaclite_of_remove, + .remove = __devexit_p(xemaclite_of_remove), }; module_platform_driver(xemaclite_of_driver); diff --git a/trunk/drivers/net/ethernet/xscale/ixp4xx_eth.c b/trunk/drivers/net/ethernet/xscale/ixp4xx_eth.c index d3ebb73277be..477d6729b17f 100644 --- a/trunk/drivers/net/ethernet/xscale/ixp4xx_eth.c +++ b/trunk/drivers/net/ethernet/xscale/ixp4xx_eth.c @@ -1379,7 +1379,7 @@ static const struct net_device_ops ixp4xx_netdev_ops = { .ndo_validate_addr = eth_validate_addr, }; -static int eth_init_one(struct platform_device *pdev) +static int __devinit eth_init_one(struct platform_device *pdev) { struct port *port; struct net_device *dev; @@ -1480,7 +1480,7 @@ static int eth_init_one(struct platform_device *pdev) return err; } -static int eth_remove_one(struct platform_device *pdev) +static int __devexit eth_remove_one(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct port *port = netdev_priv(dev); diff --git a/trunk/drivers/net/fddi/defxx.c b/trunk/drivers/net/fddi/defxx.c index 3c8aab70f5e7..6695a1dadf4e 100644 --- a/trunk/drivers/net/fddi/defxx.c +++ b/trunk/drivers/net/fddi/defxx.c @@ -228,7 +228,7 @@ #define DRV_VERSION "v1.10" #define DRV_RELDATE "2006/12/14" -static char version[] = +static char version[] __devinitdata = DRV_NAME ": " DRV_VERSION " " DRV_RELDATE " Lawrence V. Stefani and others\n"; @@ -515,7 +515,7 @@ static const struct net_device_ops dfx_netdev_ops = { * initialized and the board resources are read and stored in * the device structure. */ -static int dfx_register(struct device *bdev) +static int __devinit dfx_register(struct device *bdev) { static int version_disp; int dfx_bus_pci = DFX_BUS_PCI(bdev); @@ -663,7 +663,7 @@ static int dfx_register(struct device *bdev) * enabled yet. */ -static void dfx_bus_init(struct net_device *dev) +static void __devinit dfx_bus_init(struct net_device *dev) { DFX_board_t *bp = netdev_priv(dev); struct device *bdev = bp->bus_dev; @@ -809,7 +809,7 @@ static void dfx_bus_init(struct net_device *dev) * Interrupts are disabled at the adapter bus-specific logic. */ -static void dfx_bus_uninit(struct net_device *dev) +static void __devexit dfx_bus_uninit(struct net_device *dev) { DFX_board_t *bp = netdev_priv(dev); struct device *bdev = bp->bus_dev; @@ -866,7 +866,7 @@ static void dfx_bus_uninit(struct net_device *dev) * None */ -static void dfx_bus_config_check(DFX_board_t *bp) +static void __devinit dfx_bus_config_check(DFX_board_t *bp) { struct device __maybe_unused *bdev = bp->bus_dev; int dfx_bus_eisa = DFX_BUS_EISA(bdev); @@ -962,7 +962,7 @@ static void dfx_bus_config_check(DFX_board_t *bp) * returning from this routine. */ -static int dfx_driver_init(struct net_device *dev, +static int __devinit dfx_driver_init(struct net_device *dev, const char *print_name, resource_size_t bar_start) { @@ -3579,7 +3579,7 @@ static void dfx_xmt_flush( DFX_board_t *bp ) * Device structures for FDDI adapters (fddi0, fddi1, etc) are * freed. */ -static void dfx_unregister(struct device *bdev) +static void __devexit dfx_unregister(struct device *bdev) { struct net_device *dev = dev_get_drvdata(bdev); DFX_board_t *bp = netdev_priv(dev); @@ -3619,13 +3619,13 @@ static void dfx_unregister(struct device *bdev) } -static int __maybe_unused dfx_dev_register(struct device *); -static int __maybe_unused dfx_dev_unregister(struct device *); +static int __devinit __maybe_unused dfx_dev_register(struct device *); +static int __devexit __maybe_unused dfx_dev_unregister(struct device *); #ifdef CONFIG_PCI -static int dfx_pci_register(struct pci_dev *, +static int __devinit dfx_pci_register(struct pci_dev *, const struct pci_device_id *); -static void dfx_pci_unregister(struct pci_dev *); +static void __devexit dfx_pci_unregister(struct pci_dev *); static DEFINE_PCI_DEVICE_TABLE(dfx_pci_table) = { { PCI_DEVICE(PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_FDDI) }, @@ -3637,16 +3637,16 @@ static struct pci_driver dfx_pci_driver = { .name = "defxx", .id_table = dfx_pci_table, .probe = dfx_pci_register, - .remove = dfx_pci_unregister, + .remove = __devexit_p(dfx_pci_unregister), }; -static int dfx_pci_register(struct pci_dev *pdev, +static __devinit int dfx_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent) { return dfx_register(&pdev->dev); } -static void dfx_pci_unregister(struct pci_dev *pdev) +static void __devexit dfx_pci_unregister(struct pci_dev *pdev) { dfx_unregister(&pdev->dev); } @@ -3668,7 +3668,7 @@ static struct eisa_driver dfx_eisa_driver = { .name = "defxx", .bus = &eisa_bus_type, .probe = dfx_dev_register, - .remove = dfx_dev_unregister, + .remove = __devexit_p(dfx_dev_unregister), }, }; #endif /* CONFIG_EISA */ @@ -3689,12 +3689,12 @@ static struct tc_driver dfx_tc_driver = { .name = "defxx", .bus = &tc_bus_type, .probe = dfx_dev_register, - .remove = dfx_dev_unregister, + .remove = __devexit_p(dfx_dev_unregister), }, }; #endif /* CONFIG_TC */ -static int __maybe_unused dfx_dev_register(struct device *dev) +static int __devinit __maybe_unused dfx_dev_register(struct device *dev) { int status; @@ -3704,7 +3704,7 @@ static int __maybe_unused dfx_dev_register(struct device *dev) return status; } -static int __maybe_unused dfx_dev_unregister(struct device *dev) +static int __devexit __maybe_unused dfx_dev_unregister(struct device *dev) { put_device(dev); dfx_unregister(dev); @@ -3712,7 +3712,7 @@ static int __maybe_unused dfx_dev_unregister(struct device *dev) } -static int dfx_init(void) +static int __devinit dfx_init(void) { int status; @@ -3724,7 +3724,7 @@ static int dfx_init(void) return status; } -static void dfx_cleanup(void) +static void __devexit dfx_cleanup(void) { tc_unregister_driver(&dfx_tc_driver); eisa_driver_unregister(&dfx_eisa_driver); diff --git a/trunk/drivers/net/fddi/skfp/skfddi.c b/trunk/drivers/net/fddi/skfp/skfddi.c index d5bd563ac131..3d9a4596a423 100644 --- a/trunk/drivers/net/fddi/skfp/skfddi.c +++ b/trunk/drivers/net/fddi/skfp/skfddi.c @@ -321,7 +321,7 @@ static int skfp_init_one(struct pci_dev *pdev, /* * Called for each adapter board from pci_unregister_driver */ -static void skfp_remove_one(struct pci_dev *pdev) +static void __devexit skfp_remove_one(struct pci_dev *pdev) { struct net_device *p = pci_get_drvdata(pdev); struct s_smc *lp = netdev_priv(p); @@ -2243,7 +2243,7 @@ static struct pci_driver skfddi_pci_driver = { .name = "skfddi", .id_table = skfddi_pci_tbl, .probe = skfp_init_one, - .remove = skfp_remove_one, + .remove = __devexit_p(skfp_remove_one), }; static int __init skfd_init(void) diff --git a/trunk/drivers/net/hippi/rrunner.c b/trunk/drivers/net/hippi/rrunner.c index e54b84d5ad76..d4719632ffc6 100644 --- a/trunk/drivers/net/hippi/rrunner.c +++ b/trunk/drivers/net/hippi/rrunner.c @@ -61,7 +61,7 @@ MODULE_AUTHOR("Jes Sorensen "); MODULE_DESCRIPTION("Essential RoadRunner HIPPI driver"); MODULE_LICENSE("GPL"); -static char version[] = "rrunner.c: v0.50 11/11/2002 Jes Sorensen (jes@wildopensource.com)\n"; +static char version[] __devinitdata = "rrunner.c: v0.50 11/11/2002 Jes Sorensen (jes@wildopensource.com)\n"; static const struct net_device_ops rr_netdev_ops = { @@ -88,7 +88,7 @@ static const struct net_device_ops rr_netdev_ops = { * stack will need to know about I/O vectors or something similar. */ -static int rr_init_one(struct pci_dev *pdev, +static int __devinit rr_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *dev; @@ -221,7 +221,7 @@ static int rr_init_one(struct pci_dev *pdev, return ret; } -static void rr_remove_one(struct pci_dev *pdev) +static void __devexit rr_remove_one (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); struct rr_private *rr = netdev_priv(dev); @@ -503,7 +503,7 @@ static unsigned int write_eeprom(struct rr_private *rrpriv, } -static int rr_init(struct net_device *dev) +static int __devinit rr_init(struct net_device *dev) { struct rr_private *rrpriv; struct rr_regs __iomem *regs; @@ -1681,7 +1681,7 @@ static struct pci_driver rr_driver = { .name = "rrunner", .id_table = rr_pci_tbl, .probe = rr_init_one, - .remove = rr_remove_one, + .remove = __devexit_p(rr_remove_one), }; static int __init rr_init_module(void) diff --git a/trunk/drivers/net/ieee802154/at86rf230.c b/trunk/drivers/net/ieee802154/at86rf230.c index a4a62e170ec0..ba753d87a32f 100644 --- a/trunk/drivers/net/ieee802154/at86rf230.c +++ b/trunk/drivers/net/ieee802154/at86rf230.c @@ -778,7 +778,7 @@ static int at86rf230_fill_data(struct spi_device *spi) return 0; } -static int at86rf230_probe(struct spi_device *spi) +static int __devinit at86rf230_probe(struct spi_device *spi) { struct ieee802154_dev *dev; struct at86rf230_local *lp; @@ -920,7 +920,7 @@ static int at86rf230_probe(struct spi_device *spi) return rc; } -static int at86rf230_remove(struct spi_device *spi) +static int __devexit at86rf230_remove(struct spi_device *spi) { struct at86rf230_local *lp = spi_get_drvdata(spi); @@ -947,7 +947,7 @@ static struct spi_driver at86rf230_driver = { .owner = THIS_MODULE, }, .probe = at86rf230_probe, - .remove = at86rf230_remove, + .remove = __devexit_p(at86rf230_remove), .suspend = at86rf230_suspend, .resume = at86rf230_resume, }; diff --git a/trunk/drivers/net/ieee802154/fakehard.c b/trunk/drivers/net/ieee802154/fakehard.c index 1e9cb0bbf62c..7d39add7d467 100644 --- a/trunk/drivers/net/ieee802154/fakehard.c +++ b/trunk/drivers/net/ieee802154/fakehard.c @@ -354,7 +354,7 @@ static void ieee802154_fake_setup(struct net_device *dev) } -static int ieee802154fake_probe(struct platform_device *pdev) +static int __devinit ieee802154fake_probe(struct platform_device *pdev) { struct net_device *dev; struct fakehard_priv *priv; @@ -412,7 +412,7 @@ static int ieee802154fake_probe(struct platform_device *pdev) return err; } -static int ieee802154fake_remove(struct platform_device *pdev) +static int __devexit ieee802154fake_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); unregister_netdev(dev); @@ -423,7 +423,7 @@ static struct platform_device *ieee802154fake_dev; static struct platform_driver ieee802154fake_driver = { .probe = ieee802154fake_probe, - .remove = ieee802154fake_remove, + .remove = __devexit_p(ieee802154fake_remove), .driver = { .name = "ieee802154hardmac", .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ieee802154/fakelb.c b/trunk/drivers/net/ieee802154/fakelb.c index b8d22173925d..e7456fcd0913 100644 --- a/trunk/drivers/net/ieee802154/fakelb.c +++ b/trunk/drivers/net/ieee802154/fakelb.c @@ -221,7 +221,7 @@ static void fakelb_del(struct fakelb_dev_priv *priv) ieee802154_free_device(priv->dev); } -static int fakelb_probe(struct platform_device *pdev) +static int __devinit fakelb_probe(struct platform_device *pdev) { struct fakelb_priv *priv; struct fakelb_dev_priv *dp; @@ -253,7 +253,7 @@ static int fakelb_probe(struct platform_device *pdev) return err; } -static int fakelb_remove(struct platform_device *pdev) +static int __devexit fakelb_remove(struct platform_device *pdev) { struct fakelb_priv *priv = platform_get_drvdata(pdev); struct fakelb_dev_priv *dp, *temp; @@ -269,7 +269,7 @@ static struct platform_device *ieee802154fake_dev; static struct platform_driver ieee802154fake_driver = { .probe = fakelb_probe, - .remove = fakelb_remove, + .remove = __devexit_p(fakelb_remove), .driver = { .name = "ieee802154fakelb", .owner = THIS_MODULE, diff --git a/trunk/drivers/net/ieee802154/mrf24j40.c b/trunk/drivers/net/ieee802154/mrf24j40.c index 3f2c7aaf28c4..ed7521693980 100644 --- a/trunk/drivers/net/ieee802154/mrf24j40.c +++ b/trunk/drivers/net/ieee802154/mrf24j40.c @@ -618,7 +618,7 @@ static void mrf24j40_isrwork(struct work_struct *work) enable_irq(devrec->spi->irq); } -static int mrf24j40_probe(struct spi_device *spi) +static int __devinit mrf24j40_probe(struct spi_device *spi) { int ret = -ENOMEM; u8 val; @@ -711,7 +711,7 @@ static int mrf24j40_probe(struct spi_device *spi) return ret; } -static int mrf24j40_remove(struct spi_device *spi) +static int __devexit mrf24j40_remove(struct spi_device *spi) { struct mrf24j40 *devrec = dev_get_drvdata(&spi->dev); @@ -746,7 +746,7 @@ static struct spi_driver mrf24j40_driver = { }, .id_table = mrf24j40_ids, .probe = mrf24j40_probe, - .remove = mrf24j40_remove, + .remove = __devexit_p(mrf24j40_remove), }; static int __init mrf24j40_init(void) diff --git a/trunk/drivers/net/irda/au1k_ir.c b/trunk/drivers/net/irda/au1k_ir.c index b5151e4ced61..e09417df8f39 100644 --- a/trunk/drivers/net/irda/au1k_ir.c +++ b/trunk/drivers/net/irda/au1k_ir.c @@ -760,7 +760,7 @@ static const struct net_device_ops au1k_irda_netdev_ops = { .ndo_do_ioctl = au1k_irda_ioctl, }; -static int au1k_irda_net_init(struct net_device *dev) +static int __devinit au1k_irda_net_init(struct net_device *dev) { struct au1k_private *aup = netdev_priv(dev); struct db_dest *pDB, *pDBfree; @@ -849,7 +849,7 @@ static int au1k_irda_net_init(struct net_device *dev) return retval; } -static int au1k_irda_probe(struct platform_device *pdev) +static int __devinit au1k_irda_probe(struct platform_device *pdev) { struct au1k_private *aup; struct net_device *dev; @@ -921,7 +921,7 @@ static int au1k_irda_probe(struct platform_device *pdev) return err; } -static int au1k_irda_remove(struct platform_device *pdev) +static int __devexit au1k_irda_remove(struct platform_device *pdev) { struct net_device *dev = platform_get_drvdata(pdev); struct au1k_private *aup = netdev_priv(dev); @@ -949,7 +949,7 @@ static struct platform_driver au1k_irda_driver = { .owner = THIS_MODULE, }, .probe = au1k_irda_probe, - .remove = au1k_irda_remove, + .remove = __devexit_p(au1k_irda_remove), }; static int __init au1k_irda_load(void) diff --git a/trunk/drivers/net/irda/bfin_sir.c b/trunk/drivers/net/irda/bfin_sir.c index fed4a05d55c7..c6a0299aa9f9 100644 --- a/trunk/drivers/net/irda/bfin_sir.c +++ b/trunk/drivers/net/irda/bfin_sir.c @@ -31,7 +31,7 @@ static void turnaround_delay(unsigned long last_jif, int mtt) schedule_timeout_uninterruptible(ticks); } -static void bfin_sir_init_ports(struct bfin_sir_port *sp, struct platform_device *pdev) +static void __devinit bfin_sir_init_ports(struct bfin_sir_port *sp, struct platform_device *pdev) { int i; struct resource *res; @@ -688,7 +688,7 @@ static const struct net_device_ops bfin_sir_ndo = { .ndo_get_stats = bfin_sir_stats, }; -static int bfin_sir_probe(struct platform_device *pdev) +static int __devinit bfin_sir_probe(struct platform_device *pdev) { struct net_device *dev; struct bfin_sir_self *self; @@ -775,7 +775,7 @@ static int bfin_sir_probe(struct platform_device *pdev) return err; } -static int bfin_sir_remove(struct platform_device *pdev) +static int __devexit bfin_sir_remove(struct platform_device *pdev) { struct bfin_sir_port *sir_port; struct net_device *dev = NULL; @@ -798,7 +798,7 @@ static int bfin_sir_remove(struct platform_device *pdev) static struct platform_driver bfin_ir_driver = { .probe = bfin_sir_probe, - .remove = bfin_sir_remove, + .remove = __devexit_p(bfin_sir_remove), .suspend = bfin_sir_suspend, .resume = bfin_sir_resume, .driver = { diff --git a/trunk/drivers/net/irda/ep7211-sir.c b/trunk/drivers/net/irda/ep7211-sir.c index 5fe1f4dd3369..f83c5b881d2d 100644 --- a/trunk/drivers/net/irda/ep7211-sir.c +++ b/trunk/drivers/net/irda/ep7211-sir.c @@ -1,18 +1,52 @@ /* - * IR port driver for the Cirrus Logic CLPS711X processors + * IR port driver for the Cirrus Logic EP7211 processor. * * Copyright 2001, Blue Mug Inc. All rights reserved. * Copyright 2007, Samuel Ortiz */ - #include -#include +#include +#include +#include +#include + +#include +#include +#include #include #include "sir-dev.h" -static int clps711x_dongle_open(struct sir_dev *dev) +#define MIN_DELAY 25 /* 15 us, but wait a little more to be sure */ +#define MAX_DELAY 10000 /* 1 ms */ + +static int ep7211_open(struct sir_dev *dev); +static int ep7211_close(struct sir_dev *dev); +static int ep7211_change_speed(struct sir_dev *dev, unsigned speed); +static int ep7211_reset(struct sir_dev *dev); + +static struct dongle_driver ep7211 = { + .owner = THIS_MODULE, + .driver_name = "EP7211 IR driver", + .type = IRDA_EP7211_DONGLE, + .open = ep7211_open, + .close = ep7211_close, + .reset = ep7211_reset, + .set_speed = ep7211_change_speed, +}; + +static int __init ep7211_sir_init(void) +{ + return irda_register_dongle(&ep7211); +} + +static void __exit ep7211_sir_cleanup(void) +{ + irda_unregister_dongle(&ep7211); +} + +static int ep7211_open(struct sir_dev *dev) { unsigned int syscon; @@ -24,7 +58,7 @@ static int clps711x_dongle_open(struct sir_dev *dev) return 0; } -static int clps711x_dongle_close(struct sir_dev *dev) +static int ep7211_close(struct sir_dev *dev) { unsigned int syscon; @@ -36,35 +70,20 @@ static int clps711x_dongle_close(struct sir_dev *dev) return 0; } -static struct dongle_driver clps711x_dongle = { - .owner = THIS_MODULE, - .driver_name = "EP7211 IR driver", - .type = IRDA_EP7211_DONGLE, - .open = clps711x_dongle_open, - .close = clps711x_dongle_close, -}; - -static int clps711x_sir_probe(struct platform_device *pdev) +static int ep7211_change_speed(struct sir_dev *dev, unsigned speed) { - return irda_register_dongle(&clps711x_dongle); + return 0; } -static int clps711x_sir_remove(struct platform_device *pdev) +static int ep7211_reset(struct sir_dev *dev) { - return irda_unregister_dongle(&clps711x_dongle); + return 0; } -static struct platform_driver clps711x_sir_driver = { - .driver = { - .name = "sir-clps711x", - .owner = THIS_MODULE, - }, - .probe = clps711x_sir_probe, - .remove = clps711x_sir_remove, -}; -module_platform_driver(clps711x_sir_driver); - MODULE_AUTHOR("Samuel Ortiz "); MODULE_DESCRIPTION("EP7211 IR dongle driver"); MODULE_LICENSE("GPL"); MODULE_ALIAS("irda-dongle-13"); /* IRDA_EP7211_DONGLE */ + +module_init(ep7211_sir_init); +module_exit(ep7211_sir_cleanup); diff --git a/trunk/drivers/net/irda/sh_irda.c b/trunk/drivers/net/irda/sh_irda.c index 9448587de453..945360a99cb4 100644 --- a/trunk/drivers/net/irda/sh_irda.c +++ b/trunk/drivers/net/irda/sh_irda.c @@ -753,7 +753,7 @@ static const struct net_device_ops sh_irda_ndo = { ************************************************************************/ -static int sh_irda_probe(struct platform_device *pdev) +static int __devinit sh_irda_probe(struct platform_device *pdev) { struct net_device *ndev; struct sh_irda_self *self; @@ -825,7 +825,7 @@ static int sh_irda_probe(struct platform_device *pdev) return err; } -static int sh_irda_remove(struct platform_device *pdev) +static int __devexit sh_irda_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct sh_irda_self *self = netdev_priv(ndev); @@ -862,7 +862,7 @@ static const struct dev_pm_ops sh_irda_pm_ops = { static struct platform_driver sh_irda_driver = { .probe = sh_irda_probe, - .remove = sh_irda_remove, + .remove = __devexit_p(sh_irda_remove), .driver = { .name = DRIVER_NAME, .pm = &sh_irda_pm_ops, diff --git a/trunk/drivers/net/irda/sh_sir.c b/trunk/drivers/net/irda/sh_sir.c index 24aefcd84065..624ac1939e85 100644 --- a/trunk/drivers/net/irda/sh_sir.c +++ b/trunk/drivers/net/irda/sh_sir.c @@ -705,7 +705,7 @@ static const struct net_device_ops sh_sir_ndo = { ************************************************************************/ -static int sh_sir_probe(struct platform_device *pdev) +static int __devinit sh_sir_probe(struct platform_device *pdev) { struct net_device *ndev; struct sh_sir_self *self; @@ -783,7 +783,7 @@ static int sh_sir_probe(struct platform_device *pdev) return err; } -static int sh_sir_remove(struct platform_device *pdev) +static int __devexit sh_sir_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct sh_sir_self *self = netdev_priv(ndev); @@ -803,7 +803,7 @@ static int sh_sir_remove(struct platform_device *pdev) static struct platform_driver sh_sir_driver = { .probe = sh_sir_probe, - .remove = sh_sir_remove, + .remove = __devexit_p(sh_sir_remove), .driver = { .name = DRIVER_NAME, }, diff --git a/trunk/drivers/net/irda/smsc-ircc2.c b/trunk/drivers/net/irda/smsc-ircc2.c index 82c5f30aabab..a926813ee91d 100644 --- a/trunk/drivers/net/irda/smsc-ircc2.c +++ b/trunk/drivers/net/irda/smsc-ircc2.c @@ -376,7 +376,7 @@ MODULE_DEVICE_TABLE(pnp, smsc_ircc_pnp_table); static int pnp_driver_registered; #ifdef CONFIG_PNP -static int smsc_ircc_pnp_probe(struct pnp_dev *dev, +static int __devinit smsc_ircc_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) { unsigned int firbase, sirbase; @@ -515,7 +515,7 @@ static const struct net_device_ops smsc_ircc_netdev_ops = { * Try to open driver instance * */ -static int smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u8 dma, u8 irq) +static int __devinit smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u8 dma, u8 irq) { struct smsc_ircc_cb *self; struct net_device *dev; diff --git a/trunk/drivers/net/irda/via-ircc.c b/trunk/drivers/net/irda/via-ircc.c index 63efbf4b51c8..1a89fd459dd5 100644 --- a/trunk/drivers/net/irda/via-ircc.c +++ b/trunk/drivers/net/irda/via-ircc.c @@ -102,8 +102,8 @@ static int RxTimerHandler(struct via_ircc_cb *self, int iobase); static void hwreset(struct via_ircc_cb *self); static int via_ircc_dma_xmit(struct via_ircc_cb *self, u16 iobase); static int upload_rxdata(struct via_ircc_cb *self, int iobase); -static int via_init_one(struct pci_dev *pcidev, const struct pci_device_id *id); -static void via_remove_one (struct pci_dev *pdev); +static int __devinit via_init_one (struct pci_dev *pcidev, const struct pci_device_id *id); +static void __devexit via_remove_one (struct pci_dev *pdev); /* FIXME : Should use udelay() instead, even if we are x86 only - Jean II */ static void iodelay(int udelay) @@ -132,7 +132,7 @@ static struct pci_driver via_driver = { .name = VIA_MODULE_NAME, .id_table = via_pci_tbl, .probe = via_init_one, - .remove = via_remove_one, + .remove = __devexit_p(via_remove_one), }; @@ -156,7 +156,7 @@ static int __init via_ircc_init(void) return 0; } -static int via_init_one(struct pci_dev *pcidev, const struct pci_device_id *id) +static int __devinit via_init_one (struct pci_dev *pcidev, const struct pci_device_id *id) { int rc; u8 temp,oldPCI_40,oldPCI_44,bTmp,bTmp1; @@ -286,8 +286,8 @@ static const struct net_device_ops via_ircc_fir_ops = { * Open driver instance * */ -static int via_ircc_open(struct pci_dev *pdev, chipio_t *info, - unsigned int id) +static __devinit int via_ircc_open(struct pci_dev *pdev, chipio_t * info, + unsigned int id) { struct net_device *dev; struct via_ircc_cb *self; @@ -424,7 +424,7 @@ static int via_ircc_open(struct pci_dev *pdev, chipio_t *info, * Close driver instance * */ -static void via_remove_one(struct pci_dev *pdev) +static void __devexit via_remove_one(struct pci_dev *pdev) { struct via_ircc_cb *self = pci_get_drvdata(pdev); int iobase; diff --git a/trunk/drivers/net/irda/vlsi_ir.c b/trunk/drivers/net/irda/vlsi_ir.c index 2f99f8881dfc..9021d0131727 100644 --- a/trunk/drivers/net/irda/vlsi_ir.c +++ b/trunk/drivers/net/irda/vlsi_ir.c @@ -1627,7 +1627,7 @@ static int vlsi_irda_init(struct net_device *ndev) /**************************************************************/ -static int +static int __devinit vlsi_irda_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct net_device *ndev; @@ -1699,7 +1699,7 @@ vlsi_irda_probe(struct pci_dev *pdev, const struct pci_device_id *id) return -ENODEV; } -static void vlsi_irda_remove(struct pci_dev *pdev) +static void __devexit vlsi_irda_remove(struct pci_dev *pdev) { struct net_device *ndev = pci_get_drvdata(pdev); vlsi_irda_dev_t *idev; @@ -1832,7 +1832,7 @@ static struct pci_driver vlsi_irda_driver = { .name = drivername, .id_table = vlsi_irda_table, .probe = vlsi_irda_probe, - .remove = vlsi_irda_remove, + .remove = __devexit_p(vlsi_irda_remove), #ifdef CONFIG_PM .suspend = vlsi_irda_suspend, .resume = vlsi_irda_resume, diff --git a/trunk/drivers/net/phy/mdio-gpio.c b/trunk/drivers/net/phy/mdio-gpio.c index 36fe08ac74bd..2ed1140df3e9 100644 --- a/trunk/drivers/net/phy/mdio-gpio.c +++ b/trunk/drivers/net/phy/mdio-gpio.c @@ -103,7 +103,7 @@ static struct mdiobb_ops mdio_gpio_ops = { .get_mdio_data = mdio_get, }; -static struct mii_bus *mdio_gpio_bus_init(struct device *dev, +static struct mii_bus * __devinit mdio_gpio_bus_init(struct device *dev, struct mdio_gpio_platform_data *pdata, int bus_id) { @@ -173,7 +173,7 @@ static void mdio_gpio_bus_deinit(struct device *dev) kfree(bitbang); } -static void mdio_gpio_bus_destroy(struct device *dev) +static void __devexit mdio_gpio_bus_destroy(struct device *dev) { struct mii_bus *bus = dev_get_drvdata(dev); @@ -181,7 +181,7 @@ static void mdio_gpio_bus_destroy(struct device *dev) mdio_gpio_bus_deinit(dev); } -static int mdio_gpio_probe(struct platform_device *pdev) +static int __devinit mdio_gpio_probe(struct platform_device *pdev) { struct mdio_gpio_platform_data *pdata; struct mii_bus *new_bus; @@ -213,7 +213,7 @@ static int mdio_gpio_probe(struct platform_device *pdev) return ret; } -static int mdio_gpio_remove(struct platform_device *pdev) +static int __devexit mdio_gpio_remove(struct platform_device *pdev) { mdio_gpio_bus_destroy(&pdev->dev); @@ -227,7 +227,7 @@ static struct of_device_id mdio_gpio_of_match[] = { static struct platform_driver mdio_gpio_driver = { .probe = mdio_gpio_probe, - .remove = mdio_gpio_remove, + .remove = __devexit_p(mdio_gpio_remove), .driver = { .name = "mdio-gpio", .owner = THIS_MODULE, diff --git a/trunk/drivers/net/phy/mdio-mux-gpio.c b/trunk/drivers/net/phy/mdio-mux-gpio.c index 0c9accb1c14f..eefe49e8713c 100644 --- a/trunk/drivers/net/phy/mdio-mux-gpio.c +++ b/trunk/drivers/net/phy/mdio-mux-gpio.c @@ -49,7 +49,7 @@ static int mdio_mux_gpio_switch_fn(int current_child, int desired_child, return 0; } -static int mdio_mux_gpio_probe(struct platform_device *pdev) +static int __devinit mdio_mux_gpio_probe(struct platform_device *pdev) { enum of_gpio_flags f; struct mdio_mux_gpio_state *s; @@ -104,7 +104,7 @@ static int mdio_mux_gpio_probe(struct platform_device *pdev) return r; } -static int mdio_mux_gpio_remove(struct platform_device *pdev) +static int __devexit mdio_mux_gpio_remove(struct platform_device *pdev) { struct mdio_mux_gpio_state *s = pdev->dev.platform_data; mdio_mux_uninit(s->mux_handle); @@ -130,7 +130,7 @@ static struct platform_driver mdio_mux_gpio_driver = { .of_match_table = mdio_mux_gpio_match, }, .probe = mdio_mux_gpio_probe, - .remove = mdio_mux_gpio_remove, + .remove = __devexit_p(mdio_mux_gpio_remove), }; module_platform_driver(mdio_mux_gpio_driver); diff --git a/trunk/drivers/net/phy/mdio-mux-mmioreg.c b/trunk/drivers/net/phy/mdio-mux-mmioreg.c index 9733bd239a86..9061ba622ac4 100644 --- a/trunk/drivers/net/phy/mdio-mux-mmioreg.c +++ b/trunk/drivers/net/phy/mdio-mux-mmioreg.c @@ -67,7 +67,7 @@ static int mdio_mux_mmioreg_switch_fn(int current_child, int desired_child, return 0; } -static int mdio_mux_mmioreg_probe(struct platform_device *pdev) +static int __devinit mdio_mux_mmioreg_probe(struct platform_device *pdev) { struct device_node *np2, *np = pdev->dev.of_node; struct mdio_mux_mmioreg_state *s; @@ -137,7 +137,7 @@ static int mdio_mux_mmioreg_probe(struct platform_device *pdev) return 0; } -static int mdio_mux_mmioreg_remove(struct platform_device *pdev) +static int __devexit mdio_mux_mmioreg_remove(struct platform_device *pdev) { struct mdio_mux_mmioreg_state *s = dev_get_platdata(&pdev->dev); @@ -161,7 +161,7 @@ static struct platform_driver mdio_mux_mmioreg_driver = { .of_match_table = mdio_mux_mmioreg_match, }, .probe = mdio_mux_mmioreg_probe, - .remove = mdio_mux_mmioreg_remove, + .remove = __devexit_p(mdio_mux_mmioreg_remove), }; module_platform_driver(mdio_mux_mmioreg_driver); diff --git a/trunk/drivers/net/phy/mdio-octeon.c b/trunk/drivers/net/phy/mdio-octeon.c index 09297fe05ae5..d4015aa663e6 100644 --- a/trunk/drivers/net/phy/mdio-octeon.c +++ b/trunk/drivers/net/phy/mdio-octeon.c @@ -96,7 +96,7 @@ static int octeon_mdiobus_write(struct mii_bus *bus, int phy_id, return 0; } -static int octeon_mdiobus_probe(struct platform_device *pdev) +static int __devinit octeon_mdiobus_probe(struct platform_device *pdev) { struct octeon_mdiobus *bus; struct resource *res_mem; @@ -159,7 +159,7 @@ static int octeon_mdiobus_probe(struct platform_device *pdev) return err; } -static int octeon_mdiobus_remove(struct platform_device *pdev) +static int __devexit octeon_mdiobus_remove(struct platform_device *pdev) { struct octeon_mdiobus *bus; union cvmx_smix_en smi_en; @@ -188,7 +188,7 @@ static struct platform_driver octeon_mdiobus_driver = { .of_match_table = octeon_mdiobus_match, }, .probe = octeon_mdiobus_probe, - .remove = octeon_mdiobus_remove, + .remove = __devexit_p(octeon_mdiobus_remove), }; void octeon_mdiobus_force_mod_depencency(void) diff --git a/trunk/drivers/net/phy/spi_ks8995.c b/trunk/drivers/net/phy/spi_ks8995.c index 41eb8ffeb53d..1c3abce78b6a 100644 --- a/trunk/drivers/net/phy/spi_ks8995.c +++ b/trunk/drivers/net/phy/spi_ks8995.c @@ -264,7 +264,7 @@ static struct bin_attribute ks8995_registers_attr = { /* ------------------------------------------------------------------------ */ -static int ks8995_probe(struct spi_device *spi) +static int __devinit ks8995_probe(struct spi_device *spi) { struct ks8995_switch *ks; struct ks8995_pdata *pdata; @@ -332,7 +332,7 @@ static int ks8995_probe(struct spi_device *spi) return err; } -static int ks8995_remove(struct spi_device *spi) +static int __devexit ks8995_remove(struct spi_device *spi) { struct ks8995_data *ks8995; @@ -353,7 +353,7 @@ static struct spi_driver ks8995_driver = { .owner = THIS_MODULE, }, .probe = ks8995_probe, - .remove = ks8995_remove, + .remove = __devexit_p(ks8995_remove), }; static int __init ks8995_init(void) diff --git a/trunk/drivers/net/tun.c b/trunk/drivers/net/tun.c index a1b2389e6d7f..607a3a5981c6 100644 --- a/trunk/drivers/net/tun.c +++ b/trunk/drivers/net/tun.c @@ -493,6 +493,9 @@ static int tun_attach(struct tun_struct *tun, struct file *file) tun_set_real_num_queues(tun); + if (tun->numqueues == 1) + netif_carrier_on(tun->dev); + /* device is allowed to go away first, so no need to hold extra * refcnt. */ @@ -690,8 +693,21 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev) * number of queues. */ if (skb_queue_len(&tfile->socket.sk->sk_receive_queue) - >= dev->tx_queue_len / tun->numqueues) - goto drop; + >= dev->tx_queue_len / tun->numqueues){ + if (!(tun->flags & TUN_ONE_QUEUE)) { + /* Normal queueing mode. */ + /* Packet scheduler handles dropping of further packets. */ + netif_stop_subqueue(dev, txq); + + /* We won't see all dropped packets individually, so overrun + * error is more appropriate. */ + dev->stats.tx_fifo_errors++; + } else { + /* Single queue mode. + * Driver handles dropping of all packets itself. */ + goto drop; + } + } /* Orphan the skb - required as we might hang on to it * for indefinite time. */ @@ -1306,6 +1322,7 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile, schedule(); continue; } + netif_wake_subqueue(tun->dev, tfile->queue_index); ret = tun_put_user(tun, tfile, skb, iv, len); kfree_skb(skb); @@ -1468,9 +1485,6 @@ static int tun_flags(struct tun_struct *tun) if (tun->flags & TUN_NO_PI) flags |= IFF_NO_PI; - /* This flag has no real effect. We track the value for backwards - * compatibility. - */ if (tun->flags & TUN_ONE_QUEUE) flags |= IFF_ONE_QUEUE; @@ -1598,10 +1612,6 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) TUN_USER_FEATURES; dev->features = dev->hw_features; - err = tun_attach(tun, file); - if (err < 0) - goto err_free_dev; - err = register_netdevice(tun->dev); if (err < 0) goto err_free_dev; @@ -1611,7 +1621,9 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) device_create_file(&tun->dev->dev, &dev_attr_group)) pr_err("Failed to create tun sysfs files\n"); - netif_carrier_on(tun->dev); + err = tun_attach(tun, file); + if (err < 0) + goto err_free_dev; } tun_debug(KERN_INFO, tun, "tun_set_iff\n"); @@ -1621,9 +1633,6 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) else tun->flags &= ~TUN_NO_PI; - /* This flag has no real effect. We track the value for backwards - * compatibility. - */ if (ifr->ifr_flags & IFF_ONE_QUEUE) tun->flags |= TUN_ONE_QUEUE; else diff --git a/trunk/drivers/net/virtio_net.c b/trunk/drivers/net/virtio_net.c index 90ac97df2d02..26c502e4b871 100644 --- a/trunk/drivers/net/virtio_net.c +++ b/trunk/drivers/net/virtio_net.c @@ -1203,7 +1203,7 @@ static void remove_vq_common(struct virtnet_info *vi) __free_pages(get_a_page(vi, GFP_KERNEL), 0); } -static void virtnet_remove(struct virtio_device *vdev) +static void __devexit virtnet_remove(struct virtio_device *vdev) { struct virtnet_info *vi = vdev->priv; @@ -1293,7 +1293,7 @@ static struct virtio_driver virtio_net_driver = { .driver.owner = THIS_MODULE, .id_table = id_table, .probe = virtnet_probe, - .remove = virtnet_remove, + .remove = __devexit_p(virtnet_remove), .config_changed = virtnet_config_changed, #ifdef CONFIG_PM .freeze = virtnet_freeze, diff --git a/trunk/drivers/net/vmxnet3/vmxnet3_drv.c b/trunk/drivers/net/vmxnet3/vmxnet3_drv.c index dc8913c6238c..e4a192b26423 100644 --- a/trunk/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/trunk/drivers/net/vmxnet3/vmxnet3_drv.c @@ -2885,7 +2885,7 @@ vmxnet3_reset_work(struct work_struct *data) } -static int +static int __devinit vmxnet3_probe_device(struct pci_dev *pdev, const struct pci_device_id *id) { @@ -3096,7 +3096,7 @@ vmxnet3_probe_device(struct pci_dev *pdev, } -static void +static void __devexit vmxnet3_remove_device(struct pci_dev *pdev) { struct net_device *netdev = pci_get_drvdata(pdev); @@ -3302,7 +3302,7 @@ static struct pci_driver vmxnet3_driver = { .name = vmxnet3_driver_name, .id_table = vmxnet3_pciid_table, .probe = vmxnet3_probe_device, - .remove = vmxnet3_remove_device, + .remove = __devexit_p(vmxnet3_remove_device), #ifdef CONFIG_PM .driver.pm = &vmxnet3_pm_ops, #endif diff --git a/trunk/drivers/net/wan/dscc4.c b/trunk/drivers/net/wan/dscc4.c index d50223050cf4..ef36cafd44b7 100644 --- a/trunk/drivers/net/wan/dscc4.c +++ b/trunk/drivers/net/wan/dscc4.c @@ -707,7 +707,7 @@ static void dscc4_free1(struct pci_dev *pdev) kfree(ppriv); } -static int dscc4_init_one(struct pci_dev *pdev, +static int __devinit dscc4_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { struct dscc4_pci_priv *priv; @@ -1968,7 +1968,7 @@ static int dscc4_init_ring(struct net_device *dev) return -ENOMEM; } -static void dscc4_remove_one(struct pci_dev *pdev) +static void __devexit dscc4_remove_one(struct pci_dev *pdev) { struct dscc4_pci_priv *ppriv; struct dscc4_dev_priv *root; @@ -2053,7 +2053,7 @@ static struct pci_driver dscc4_driver = { .name = DRV_NAME, .id_table = dscc4_pci_tbl, .probe = dscc4_init_one, - .remove = dscc4_remove_one, + .remove = __devexit_p(dscc4_remove_one), }; module_pci_driver(dscc4_driver); diff --git a/trunk/drivers/net/wan/farsync.c b/trunk/drivers/net/wan/farsync.c index 56941d6547eb..b6271325f803 100644 --- a/trunk/drivers/net/wan/farsync.c +++ b/trunk/drivers/net/wan/farsync.c @@ -2361,7 +2361,7 @@ fst_start_xmit(struct sk_buff *skb, struct net_device *dev) * via a printk and leave the corresponding interface and all that follow * disabled. */ -static char *type_strings[] = { +static char *type_strings[] __devinitdata = { "no hardware", /* Should never be seen */ "FarSync T2P", "FarSync T4P", @@ -2371,7 +2371,7 @@ static char *type_strings[] = { "FarSync TE1" }; -static void +static void __devinit fst_init_card(struct fst_card_info *card) { int i; @@ -2415,7 +2415,7 @@ static const struct net_device_ops fst_ops = { * Initialise card when detected. * Returns 0 to indicate success, or errno otherwise. */ -static int +static int __devinit fst_add_one(struct pci_dev *pdev, const struct pci_device_id *ent) { static int no_of_cards_added = 0; @@ -2615,7 +2615,7 @@ fst_add_one(struct pci_dev *pdev, const struct pci_device_id *ent) /* * Cleanup and close down a card */ -static void +static void __devexit fst_remove_one(struct pci_dev *pdev) { struct fst_card_info *card; @@ -2652,7 +2652,7 @@ static struct pci_driver fst_driver = { .name = FST_NAME, .id_table = fst_pci_dev_id, .probe = fst_add_one, - .remove = fst_remove_one, + .remove = __devexit_p(fst_remove_one), .suspend = NULL, .resume = NULL, }; diff --git a/trunk/drivers/net/wan/hd64570.c b/trunk/drivers/net/wan/hd64570.c index c6e1a4b9e4fb..cf4903355a34 100644 --- a/trunk/drivers/net/wan/hd64570.c +++ b/trunk/drivers/net/wan/hd64570.c @@ -676,7 +676,7 @@ static netdev_tx_t sca_xmit(struct sk_buff *skb, struct net_device *dev) #ifdef NEED_DETECT_RAM -static u32 sca_detect_ram(card_t *card, u8 __iomem *rambase, +static u32 __devinit sca_detect_ram(card_t *card, u8 __iomem *rambase, u32 ramsize) { /* Round RAM size to 32 bits, fill from end to start */ @@ -705,7 +705,7 @@ static u32 sca_detect_ram(card_t *card, u8 __iomem *rambase, #endif /* NEED_DETECT_RAM */ -static void sca_init(card_t *card, int wait_states) +static void __devinit sca_init(card_t *card, int wait_states) { sca_out(wait_states, WCRL, card); /* Wait Control */ sca_out(wait_states, WCRM, card); diff --git a/trunk/drivers/net/wan/hd64572.c b/trunk/drivers/net/wan/hd64572.c index f1685d9624c8..e2779faa6c4f 100644 --- a/trunk/drivers/net/wan/hd64572.c +++ b/trunk/drivers/net/wan/hd64572.c @@ -605,7 +605,7 @@ static netdev_tx_t sca_xmit(struct sk_buff *skb, struct net_device *dev) } -static u32 sca_detect_ram(card_t *card, u8 __iomem *rambase, +static u32 __devinit sca_detect_ram(card_t *card, u8 __iomem *rambase, u32 ramsize) { /* Round RAM size to 32 bits, fill from end to start */ @@ -625,7 +625,7 @@ static u32 sca_detect_ram(card_t *card, u8 __iomem *rambase, } -static void sca_init(card_t *card, int wait_states) +static void __devinit sca_init(card_t *card, int wait_states) { sca_out(wait_states, WCRL, card); /* Wait Control */ sca_out(wait_states, WCRM, card); diff --git a/trunk/drivers/net/wan/ixp4xx_hss.c b/trunk/drivers/net/wan/ixp4xx_hss.c index b617622526b4..e9a3da588e95 100644 --- a/trunk/drivers/net/wan/ixp4xx_hss.c +++ b/trunk/drivers/net/wan/ixp4xx_hss.c @@ -1326,7 +1326,7 @@ static const struct net_device_ops hss_hdlc_ops = { .ndo_do_ioctl = hss_hdlc_ioctl, }; -static int hss_init_one(struct platform_device *pdev) +static int __devinit hss_init_one(struct platform_device *pdev) { struct port *port; struct net_device *dev; @@ -1377,7 +1377,7 @@ static int hss_init_one(struct platform_device *pdev) return err; } -static int hss_remove_one(struct platform_device *pdev) +static int __devexit hss_remove_one(struct platform_device *pdev) { struct port *port = platform_get_drvdata(pdev); diff --git a/trunk/drivers/net/wan/lmc/lmc_main.c b/trunk/drivers/net/wan/lmc/lmc_main.c index 0e443fd0803b..f5d533a706ea 100644 --- a/trunk/drivers/net/wan/lmc/lmc_main.c +++ b/trunk/drivers/net/wan/lmc/lmc_main.c @@ -816,7 +816,7 @@ static const struct net_device_ops lmc_ops = { .ndo_get_stats = lmc_get_stats, }; -static int lmc_init_one(struct pci_dev *pdev, +static int __devinit lmc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { lmc_softc_t *sc; @@ -986,7 +986,7 @@ static int lmc_init_one(struct pci_dev *pdev, /* * Called from pci when removing module. */ -static void lmc_remove_one(struct pci_dev *pdev) +static void __devexit lmc_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -1733,7 +1733,7 @@ static struct pci_driver lmc_driver = { .name = "lmc", .id_table = lmc_pci_tbl, .probe = lmc_init_one, - .remove = lmc_remove_one, + .remove = __devexit_p(lmc_remove_one), }; module_pci_driver(lmc_driver); diff --git a/trunk/drivers/net/wan/pc300too.c b/trunk/drivers/net/wan/pc300too.c index a51cfa7c6540..5fe246e060d7 100644 --- a/trunk/drivers/net/wan/pc300too.c +++ b/trunk/drivers/net/wan/pc300too.c @@ -297,7 +297,7 @@ static const struct net_device_ops pc300_ops = { .ndo_do_ioctl = pc300_ioctl, }; -static int pc300_pci_init_one(struct pci_dev *pdev, +static int __devinit pc300_pci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { card_t *card; diff --git a/trunk/drivers/net/wan/pci200syn.c b/trunk/drivers/net/wan/pci200syn.c index 037c423a6328..9659fcaa34ed 100644 --- a/trunk/drivers/net/wan/pci200syn.c +++ b/trunk/drivers/net/wan/pci200syn.c @@ -276,7 +276,7 @@ static const struct net_device_ops pci200_ops = { .ndo_do_ioctl = pci200_ioctl, }; -static int pci200_pci_init_one(struct pci_dev *pdev, +static int __devinit pci200_pci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { card_t *card; diff --git a/trunk/drivers/net/wan/wanxl.c b/trunk/drivers/net/wan/wanxl.c index b72be1280361..feb7541b33fb 100644 --- a/trunk/drivers/net/wan/wanxl.c +++ b/trunk/drivers/net/wan/wanxl.c @@ -557,7 +557,7 @@ static const struct net_device_ops wanxl_ops = { .ndo_get_stats = wanxl_get_stats, }; -static int wanxl_pci_init_one(struct pci_dev *pdev, +static int __devinit wanxl_pci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { card_t *card; diff --git a/trunk/drivers/net/xen-netfront.c b/trunk/drivers/net/xen-netfront.c index 53451dd7b602..fc24eb9b3948 100644 --- a/trunk/drivers/net/xen-netfront.c +++ b/trunk/drivers/net/xen-netfront.c @@ -1311,7 +1311,7 @@ static const struct net_device_ops xennet_netdev_ops = { #endif }; -static struct net_device *xennet_create_dev(struct xenbus_device *dev) +static struct net_device * __devinit xennet_create_dev(struct xenbus_device *dev) { int i, err; struct net_device *netdev; @@ -1407,7 +1407,7 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev) * structures and the ring buffers for communication with the backend, and * inform the backend of the appropriate details for those. */ -static int netfront_probe(struct xenbus_device *dev, +static int __devinit netfront_probe(struct xenbus_device *dev, const struct xenbus_device_id *id) { int err; @@ -1967,7 +1967,7 @@ static const struct xenbus_device_id netfront_ids[] = { }; -static int xennet_remove(struct xenbus_device *dev) +static int __devexit xennet_remove(struct xenbus_device *dev) { struct netfront_info *info = dev_get_drvdata(&dev->dev); @@ -1990,7 +1990,7 @@ static int xennet_remove(struct xenbus_device *dev) static DEFINE_XENBUS_DRIVER(netfront, , .probe = netfront_probe, - .remove = xennet_remove, + .remove = __devexit_p(xennet_remove), .resume = netfront_resume, .otherend_changed = netback_changed, ); diff --git a/trunk/drivers/vhost/net.c b/trunk/drivers/vhost/net.c index ff6c91995c96..67898fa9c447 100644 --- a/trunk/drivers/vhost/net.c +++ b/trunk/drivers/vhost/net.c @@ -823,9 +823,6 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) r = vhost_init_used(vq); if (r) goto err_vq; - - n->tx_packets = 0; - n->tx_zcopy_err = 0; } mutex_unlock(&vq->mutex); diff --git a/trunk/include/net/sctp/sctp.h b/trunk/include/net/sctp/sctp.h index 7fdf298a47ef..9c6414f553f9 100644 --- a/trunk/include/net/sctp/sctp.h +++ b/trunk/include/net/sctp/sctp.h @@ -272,18 +272,6 @@ struct sctp_mib { unsigned long mibs[SCTP_MIB_MAX]; }; -/* helper function to track stats about max rto and related transport */ -static inline void sctp_max_rto(struct sctp_association *asoc, - struct sctp_transport *trans) -{ - if (asoc->stats.max_obs_rto < (__u64)trans->rto) { - asoc->stats.max_obs_rto = trans->rto; - memset(&asoc->stats.obs_rto_ipaddr, 0, - sizeof(struct sockaddr_storage)); - memcpy(&asoc->stats.obs_rto_ipaddr, &trans->ipaddr, - trans->af_specific->sockaddr_len); - } -} /* Print debugging messages. */ #if SCTP_DEBUG diff --git a/trunk/include/net/sctp/structs.h b/trunk/include/net/sctp/structs.h index c2521016d646..2b2f61dd4036 100644 --- a/trunk/include/net/sctp/structs.h +++ b/trunk/include/net/sctp/structs.h @@ -1312,40 +1312,6 @@ struct sctp_inithdr_host { __u32 initial_tsn; }; -/* SCTP_GET_ASSOC_STATS counters */ -struct sctp_priv_assoc_stats { - /* Maximum observed rto in the association during subsequent - * observations. Value is set to 0 if no RTO measurement took place - * The transport where the max_rto was observed is returned in - * obs_rto_ipaddr - */ - struct sockaddr_storage obs_rto_ipaddr; - __u64 max_obs_rto; - /* Total In and Out SACKs received and sent */ - __u64 isacks; - __u64 osacks; - /* Total In and Out packets received and sent */ - __u64 opackets; - __u64 ipackets; - /* Total retransmitted chunks */ - __u64 rtxchunks; - /* TSN received > next expected */ - __u64 outofseqtsns; - /* Duplicate Chunks received */ - __u64 idupchunks; - /* Gap Ack Blocks received */ - __u64 gapcnt; - /* Unordered data chunks sent and received */ - __u64 ouodchunks; - __u64 iuodchunks; - /* Ordered data chunks sent and received */ - __u64 oodchunks; - __u64 iodchunks; - /* Control chunks sent and received */ - __u64 octrlchunks; - __u64 ictrlchunks; -}; - /* RFC2960 * * 12. Recommended Transmission Control Block (TCB) Parameters @@ -1864,8 +1830,6 @@ struct sctp_association { __u8 need_ecne:1, /* Need to send an ECNE Chunk? */ temp:1; /* Is it a temporary association? */ - - struct sctp_priv_assoc_stats stats; }; diff --git a/trunk/include/net/sctp/user.h b/trunk/include/net/sctp/user.h index 9a0ae091366d..1b02d7ad453b 100644 --- a/trunk/include/net/sctp/user.h +++ b/trunk/include/net/sctp/user.h @@ -107,7 +107,6 @@ typedef __s32 sctp_assoc_t; #define SCTP_GET_LOCAL_ADDRS 109 /* Get all local address. */ #define SCTP_SOCKOPT_CONNECTX 110 /* CONNECTX requests. */ #define SCTP_SOCKOPT_CONNECTX3 111 /* CONNECTX requests (updated) */ -#define SCTP_GET_ASSOC_STATS 112 /* Read only */ /* * 5.2.1 SCTP Initiation Structure (SCTP_INIT) @@ -720,32 +719,6 @@ struct sctp_getaddrs { __u8 addrs[0]; /*output, variable size*/ }; -/* A socket user request obtained via SCTP_GET_ASSOC_STATS that retrieves - * association stats. All stats are counts except sas_maxrto and - * sas_obs_rto_ipaddr. maxrto is the max observed rto + transport since - * the last call. Will return 0 when RTO was not update since last call - */ -struct sctp_assoc_stats { - sctp_assoc_t sas_assoc_id; /* Input */ - /* Transport of observed max RTO */ - struct sockaddr_storage sas_obs_rto_ipaddr; - __u64 sas_maxrto; /* Maximum Observed RTO for period */ - __u64 sas_isacks; /* SACKs received */ - __u64 sas_osacks; /* SACKs sent */ - __u64 sas_opackets; /* Packets sent */ - __u64 sas_ipackets; /* Packets received */ - __u64 sas_rtxchunks; /* Retransmitted Chunks */ - __u64 sas_outofseqtsns;/* TSN received > next expected */ - __u64 sas_idupchunks; /* Dups received (ordered+unordered) */ - __u64 sas_gapcnt; /* Gap Acknowledgements Received */ - __u64 sas_ouodchunks; /* Unordered data chunks sent */ - __u64 sas_iuodchunks; /* Unordered data chunks received */ - __u64 sas_oodchunks; /* Ordered data chunks sent */ - __u64 sas_iodchunks; /* Ordered data chunks received */ - __u64 sas_octrlchunks; /* Control chunks sent */ - __u64 sas_ictrlchunks; /* Control chunks received */ -}; - /* These are bit fields for msghdr->msg_flags. See section 5.1. */ /* On user space Linux, these live in as an enum. */ enum sctp_msg_flags { diff --git a/trunk/include/uapi/linux/if_tun.h b/trunk/include/uapi/linux/if_tun.h index 2835b85fd46d..958497ad5bb5 100644 --- a/trunk/include/uapi/linux/if_tun.h +++ b/trunk/include/uapi/linux/if_tun.h @@ -31,7 +31,6 @@ #define TUN_FASYNC 0x0010 #define TUN_NOCHECKSUM 0x0020 #define TUN_NO_PI 0x0040 -/* This flag has no real effect */ #define TUN_ONE_QUEUE 0x0080 #define TUN_PERSIST 0x0100 #define TUN_VNET_HDR 0x0200 @@ -61,7 +60,6 @@ #define IFF_TUN 0x0001 #define IFF_TAP 0x0002 #define IFF_NO_PI 0x1000 -/* This flag has no real effect */ #define IFF_ONE_QUEUE 0x2000 #define IFF_VNET_HDR 0x4000 #define IFF_TUN_EXCL 0x8000 diff --git a/trunk/net/ipv6/addrconf.c b/trunk/net/ipv6/addrconf.c index 22ae75d54017..4b644f656c41 100644 --- a/trunk/net/ipv6/addrconf.c +++ b/trunk/net/ipv6/addrconf.c @@ -2988,7 +2988,7 @@ static void addrconf_rs_timer(unsigned long data) if (idev->dead || !(idev->if_flags & IF_READY)) goto out; - if (!ipv6_accept_ra(idev)) + if (idev->cnf.forwarding) goto out; /* Announcement received after solicitation was sent */ diff --git a/trunk/net/ipv6/route.c b/trunk/net/ipv6/route.c index e229a3bc345d..8f124f575116 100644 --- a/trunk/net/ipv6/route.c +++ b/trunk/net/ipv6/route.c @@ -544,32 +544,35 @@ static inline int rt6_check_dev(struct rt6_info *rt, int oif) return 0; } -static inline bool rt6_check_neigh(struct rt6_info *rt) +static inline int rt6_check_neigh(struct rt6_info *rt) { struct neighbour *neigh; - bool ret = false; + int m; neigh = rt->n; if (rt->rt6i_flags & RTF_NONEXTHOP || !(rt->rt6i_flags & RTF_GATEWAY)) - ret = true; + m = 1; else if (neigh) { read_lock_bh(&neigh->lock); if (neigh->nud_state & NUD_VALID) - ret = true; + m = 2; #ifdef CONFIG_IPV6_ROUTER_PREF - else if (!(neigh->nud_state & NUD_FAILED)) - ret = true; + else if (neigh->nud_state & NUD_FAILED) + m = 0; #endif + else + m = 1; read_unlock_bh(&neigh->lock); - } - return ret; + } else + m = 0; + return m; } static int rt6_score_route(struct rt6_info *rt, int oif, int strict) { - int m; + int m, n; m = rt6_check_dev(rt, oif); if (!m && (strict & RT6_LOOKUP_F_IFACE)) @@ -577,7 +580,8 @@ static int rt6_score_route(struct rt6_info *rt, int oif, #ifdef CONFIG_IPV6_ROUTER_PREF m |= IPV6_DECODE_PREF(IPV6_EXTRACT_PREF(rt->rt6i_flags)) << 2; #endif - if (!rt6_check_neigh(rt) && (strict & RT6_LOOKUP_F_REACHABLE)) + n = rt6_check_neigh(rt); + if (!n && (strict & RT6_LOOKUP_F_REACHABLE)) return -1; return m; } diff --git a/trunk/net/netfilter/ipset/ip_set_core.c b/trunk/net/netfilter/ipset/ip_set_core.c index fed899f600b2..6d6d8f2b033e 100644 --- a/trunk/net/netfilter/ipset/ip_set_core.c +++ b/trunk/net/netfilter/ipset/ip_set_core.c @@ -28,9 +28,10 @@ static LIST_HEAD(ip_set_type_list); /* all registered set types */ static DEFINE_MUTEX(ip_set_type_mutex); /* protects ip_set_type_list */ static DEFINE_RWLOCK(ip_set_ref_lock); /* protects the set refs */ -static struct ip_set **ip_set_list; /* all individual sets */ +static struct ip_set * __rcu *ip_set_list; /* all individual sets */ static ip_set_id_t ip_set_max = CONFIG_IP_SET_MAX; /* max number of sets */ +#define IP_SET_INC 64 #define STREQ(a, b) (strncmp(a, b, IPSET_MAXNAMELEN) == 0) static unsigned int max_sets; @@ -42,6 +43,12 @@ MODULE_AUTHOR("Jozsef Kadlecsik "); MODULE_DESCRIPTION("core IP set support"); MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_IPSET); +/* When the nfnl mutex is held: */ +#define nfnl_dereference(p) \ + rcu_dereference_protected(p, 1) +#define nfnl_set(id) \ + nfnl_dereference(ip_set_list)[id] + /* * The set types are implemented in modules and registered set types * can be found in ip_set_type_list. Adding/deleting types is @@ -321,19 +328,19 @@ EXPORT_SYMBOL_GPL(ip_set_get_ipaddr6); */ static inline void -__ip_set_get(ip_set_id_t index) +__ip_set_get(struct ip_set *set) { write_lock_bh(&ip_set_ref_lock); - ip_set_list[index]->ref++; + set->ref++; write_unlock_bh(&ip_set_ref_lock); } static inline void -__ip_set_put(ip_set_id_t index) +__ip_set_put(struct ip_set *set) { write_lock_bh(&ip_set_ref_lock); - BUG_ON(ip_set_list[index]->ref == 0); - ip_set_list[index]->ref--; + BUG_ON(set->ref == 0); + set->ref--; write_unlock_bh(&ip_set_ref_lock); } @@ -344,12 +351,25 @@ __ip_set_put(ip_set_id_t index) * so it can't be destroyed (or changed) under our foot. */ +static inline struct ip_set * +ip_set_rcu_get(ip_set_id_t index) +{ + struct ip_set *set; + + rcu_read_lock(); + /* ip_set_list itself needs to be protected */ + set = rcu_dereference(ip_set_list)[index]; + rcu_read_unlock(); + + return set; +} + int ip_set_test(ip_set_id_t index, const struct sk_buff *skb, const struct xt_action_param *par, const struct ip_set_adt_opt *opt) { - struct ip_set *set = ip_set_list[index]; + struct ip_set *set = ip_set_rcu_get(index); int ret = 0; BUG_ON(set == NULL); @@ -388,7 +408,7 @@ ip_set_add(ip_set_id_t index, const struct sk_buff *skb, const struct xt_action_param *par, const struct ip_set_adt_opt *opt) { - struct ip_set *set = ip_set_list[index]; + struct ip_set *set = ip_set_rcu_get(index); int ret; BUG_ON(set == NULL); @@ -411,7 +431,7 @@ ip_set_del(ip_set_id_t index, const struct sk_buff *skb, const struct xt_action_param *par, const struct ip_set_adt_opt *opt) { - struct ip_set *set = ip_set_list[index]; + struct ip_set *set = ip_set_rcu_get(index); int ret = 0; BUG_ON(set == NULL); @@ -440,14 +460,17 @@ ip_set_get_byname(const char *name, struct ip_set **set) ip_set_id_t i, index = IPSET_INVALID_ID; struct ip_set *s; + rcu_read_lock(); for (i = 0; i < ip_set_max; i++) { - s = ip_set_list[i]; + s = rcu_dereference(ip_set_list)[i]; if (s != NULL && STREQ(s->name, name)) { - __ip_set_get(i); + __ip_set_get(s); index = i; *set = s; + break; } } + rcu_read_unlock(); return index; } @@ -462,8 +485,13 @@ EXPORT_SYMBOL_GPL(ip_set_get_byname); void ip_set_put_byindex(ip_set_id_t index) { - if (ip_set_list[index] != NULL) - __ip_set_put(index); + struct ip_set *set; + + rcu_read_lock(); + set = rcu_dereference(ip_set_list)[index]; + if (set != NULL) + __ip_set_put(set); + rcu_read_unlock(); } EXPORT_SYMBOL_GPL(ip_set_put_byindex); @@ -477,7 +505,7 @@ EXPORT_SYMBOL_GPL(ip_set_put_byindex); const char * ip_set_name_byindex(ip_set_id_t index) { - const struct ip_set *set = ip_set_list[index]; + const struct ip_set *set = ip_set_rcu_get(index); BUG_ON(set == NULL); BUG_ON(set->ref == 0); @@ -501,11 +529,18 @@ EXPORT_SYMBOL_GPL(ip_set_name_byindex); ip_set_id_t ip_set_nfnl_get(const char *name) { + ip_set_id_t i, index = IPSET_INVALID_ID; struct ip_set *s; - ip_set_id_t index; nfnl_lock(); - index = ip_set_get_byname(name, &s); + for (i = 0; i < ip_set_max; i++) { + s = nfnl_set(i); + if (s != NULL && STREQ(s->name, name)) { + __ip_set_get(s); + index = i; + break; + } + } nfnl_unlock(); return index; @@ -521,12 +556,15 @@ EXPORT_SYMBOL_GPL(ip_set_nfnl_get); ip_set_id_t ip_set_nfnl_get_byindex(ip_set_id_t index) { + struct ip_set *set; + if (index > ip_set_max) return IPSET_INVALID_ID; nfnl_lock(); - if (ip_set_list[index]) - __ip_set_get(index); + set = nfnl_set(index); + if (set) + __ip_set_get(set); else index = IPSET_INVALID_ID; nfnl_unlock(); @@ -545,8 +583,11 @@ EXPORT_SYMBOL_GPL(ip_set_nfnl_get_byindex); void ip_set_nfnl_put(ip_set_id_t index) { + struct ip_set *set; nfnl_lock(); - ip_set_put_byindex(index); + set = nfnl_set(index); + if (set != NULL) + __ip_set_put(set); nfnl_unlock(); } EXPORT_SYMBOL_GPL(ip_set_nfnl_put); @@ -603,41 +644,46 @@ static const struct nla_policy ip_set_create_policy[IPSET_ATTR_CMD_MAX + 1] = { [IPSET_ATTR_DATA] = { .type = NLA_NESTED }, }; -static ip_set_id_t -find_set_id(const char *name) +static struct ip_set * +find_set_and_id(const char *name, ip_set_id_t *id) { - ip_set_id_t i, index = IPSET_INVALID_ID; - const struct ip_set *set; + struct ip_set *set = NULL; + ip_set_id_t i; - for (i = 0; index == IPSET_INVALID_ID && i < ip_set_max; i++) { - set = ip_set_list[i]; - if (set != NULL && STREQ(set->name, name)) - index = i; + *id = IPSET_INVALID_ID; + for (i = 0; i < ip_set_max; i++) { + set = nfnl_set(i); + if (set != NULL && STREQ(set->name, name)) { + *id = i; + break; + } } - return index; + return (*id == IPSET_INVALID_ID ? NULL : set); } static inline struct ip_set * find_set(const char *name) { - ip_set_id_t index = find_set_id(name); + ip_set_id_t id; - return index == IPSET_INVALID_ID ? NULL : ip_set_list[index]; + return find_set_and_id(name, &id); } static int find_free_id(const char *name, ip_set_id_t *index, struct ip_set **set) { + struct ip_set *s; ip_set_id_t i; *index = IPSET_INVALID_ID; for (i = 0; i < ip_set_max; i++) { - if (ip_set_list[i] == NULL) { + s = nfnl_set(i); + if (s == NULL) { if (*index == IPSET_INVALID_ID) *index = i; - } else if (STREQ(name, ip_set_list[i]->name)) { + } else if (STREQ(name, s->name)) { /* Name clash */ - *set = ip_set_list[i]; + *set = s; return -EEXIST; } } @@ -730,10 +776,9 @@ ip_set_create(struct sock *ctnl, struct sk_buff *skb, * and check clashing. */ ret = find_free_id(set->name, &index, &clash); - if (ret != 0) { + if (ret == -EEXIST) { /* If this is the same set and requested, ignore error */ - if (ret == -EEXIST && - (flags & IPSET_FLAG_EXIST) && + if ((flags & IPSET_FLAG_EXIST) && STREQ(set->type->name, clash->type->name) && set->type->family == clash->type->family && set->type->revision_min == clash->type->revision_min && @@ -741,13 +786,36 @@ ip_set_create(struct sock *ctnl, struct sk_buff *skb, set->variant->same_set(set, clash)) ret = 0; goto cleanup; - } + } else if (ret == -IPSET_ERR_MAX_SETS) { + struct ip_set **list, **tmp; + ip_set_id_t i = ip_set_max + IP_SET_INC; + + if (i < ip_set_max || i == IPSET_INVALID_ID) + /* Wraparound */ + goto cleanup; + + list = kzalloc(sizeof(struct ip_set *) * i, GFP_KERNEL); + if (!list) + goto cleanup; + /* nfnl mutex is held, both lists are valid */ + tmp = nfnl_dereference(ip_set_list); + memcpy(list, tmp, sizeof(struct ip_set *) * ip_set_max); + rcu_assign_pointer(ip_set_list, list); + /* Make sure all current packets have passed through */ + synchronize_net(); + /* Use new list */ + index = ip_set_max; + ip_set_max = i; + kfree(tmp); + ret = 0; + } else if (ret) + goto cleanup; /* * Finally! Add our shiny new set to the list, and be done. */ pr_debug("create: '%s' created with index %u!\n", set->name, index); - ip_set_list[index] = set; + nfnl_set(index) = set; return ret; @@ -772,10 +840,10 @@ ip_set_setname_policy[IPSET_ATTR_CMD_MAX + 1] = { static void ip_set_destroy_set(ip_set_id_t index) { - struct ip_set *set = ip_set_list[index]; + struct ip_set *set = nfnl_set(index); pr_debug("set: %s\n", set->name); - ip_set_list[index] = NULL; + nfnl_set(index) = NULL; /* Must call it without holding any lock */ set->variant->destroy(set); @@ -788,6 +856,7 @@ ip_set_destroy(struct sock *ctnl, struct sk_buff *skb, const struct nlmsghdr *nlh, const struct nlattr * const attr[]) { + struct ip_set *s; ip_set_id_t i; int ret = 0; @@ -807,22 +876,24 @@ ip_set_destroy(struct sock *ctnl, struct sk_buff *skb, read_lock_bh(&ip_set_ref_lock); if (!attr[IPSET_ATTR_SETNAME]) { for (i = 0; i < ip_set_max; i++) { - if (ip_set_list[i] != NULL && ip_set_list[i]->ref) { + s = nfnl_set(i); + if (s != NULL && s->ref) { ret = -IPSET_ERR_BUSY; goto out; } } read_unlock_bh(&ip_set_ref_lock); for (i = 0; i < ip_set_max; i++) { - if (ip_set_list[i] != NULL) + s = nfnl_set(i); + if (s != NULL) ip_set_destroy_set(i); } } else { - i = find_set_id(nla_data(attr[IPSET_ATTR_SETNAME])); - if (i == IPSET_INVALID_ID) { + s = find_set_and_id(nla_data(attr[IPSET_ATTR_SETNAME]), &i); + if (s == NULL) { ret = -ENOENT; goto out; - } else if (ip_set_list[i]->ref) { + } else if (s->ref) { ret = -IPSET_ERR_BUSY; goto out; } @@ -853,21 +924,24 @@ ip_set_flush(struct sock *ctnl, struct sk_buff *skb, const struct nlmsghdr *nlh, const struct nlattr * const attr[]) { + struct ip_set *s; ip_set_id_t i; if (unlikely(protocol_failed(attr))) return -IPSET_ERR_PROTOCOL; if (!attr[IPSET_ATTR_SETNAME]) { - for (i = 0; i < ip_set_max; i++) - if (ip_set_list[i] != NULL) - ip_set_flush_set(ip_set_list[i]); + for (i = 0; i < ip_set_max; i++) { + s = nfnl_set(i); + if (s != NULL) + ip_set_flush_set(s); + } } else { - i = find_set_id(nla_data(attr[IPSET_ATTR_SETNAME])); - if (i == IPSET_INVALID_ID) + s = find_set(nla_data(attr[IPSET_ATTR_SETNAME])); + if (s == NULL) return -ENOENT; - ip_set_flush_set(ip_set_list[i]); + ip_set_flush_set(s); } return 0; @@ -889,7 +963,7 @@ ip_set_rename(struct sock *ctnl, struct sk_buff *skb, const struct nlmsghdr *nlh, const struct nlattr * const attr[]) { - struct ip_set *set; + struct ip_set *set, *s; const char *name2; ip_set_id_t i; int ret = 0; @@ -911,8 +985,8 @@ ip_set_rename(struct sock *ctnl, struct sk_buff *skb, name2 = nla_data(attr[IPSET_ATTR_SETNAME2]); for (i = 0; i < ip_set_max; i++) { - if (ip_set_list[i] != NULL && - STREQ(ip_set_list[i]->name, name2)) { + s = nfnl_set(i); + if (s != NULL && STREQ(s->name, name2)) { ret = -IPSET_ERR_EXIST_SETNAME2; goto out; } @@ -947,17 +1021,14 @@ ip_set_swap(struct sock *ctnl, struct sk_buff *skb, attr[IPSET_ATTR_SETNAME2] == NULL)) return -IPSET_ERR_PROTOCOL; - from_id = find_set_id(nla_data(attr[IPSET_ATTR_SETNAME])); - if (from_id == IPSET_INVALID_ID) + from = find_set_and_id(nla_data(attr[IPSET_ATTR_SETNAME]), &from_id); + if (from == NULL) return -ENOENT; - to_id = find_set_id(nla_data(attr[IPSET_ATTR_SETNAME2])); - if (to_id == IPSET_INVALID_ID) + to = find_set_and_id(nla_data(attr[IPSET_ATTR_SETNAME2]), &to_id); + if (to == NULL) return -IPSET_ERR_EXIST_SETNAME2; - from = ip_set_list[from_id]; - to = ip_set_list[to_id]; - /* Features must not change. * Not an artificial restriction anymore, as we must prevent * possible loops created by swapping in setlist type of sets. */ @@ -971,8 +1042,8 @@ ip_set_swap(struct sock *ctnl, struct sk_buff *skb, write_lock_bh(&ip_set_ref_lock); swap(from->ref, to->ref); - ip_set_list[from_id] = to; - ip_set_list[to_id] = from; + nfnl_set(from_id) = to; + nfnl_set(to_id) = from; write_unlock_bh(&ip_set_ref_lock); return 0; @@ -992,7 +1063,7 @@ static int ip_set_dump_done(struct netlink_callback *cb) { if (cb->args[2]) { - pr_debug("release set %s\n", ip_set_list[cb->args[1]]->name); + pr_debug("release set %s\n", nfnl_set(cb->args[1])->name); ip_set_put_byindex((ip_set_id_t) cb->args[1]); } return 0; @@ -1030,8 +1101,11 @@ dump_init(struct netlink_callback *cb) */ if (cda[IPSET_ATTR_SETNAME]) { - index = find_set_id(nla_data(cda[IPSET_ATTR_SETNAME])); - if (index == IPSET_INVALID_ID) + struct ip_set *set; + + set = find_set_and_id(nla_data(cda[IPSET_ATTR_SETNAME]), + &index); + if (set == NULL) return -ENOENT; dump_type = DUMP_ONE; @@ -1081,7 +1155,7 @@ ip_set_dump_start(struct sk_buff *skb, struct netlink_callback *cb) dump_type, dump_flags, cb->args[1]); for (; cb->args[1] < max; cb->args[1]++) { index = (ip_set_id_t) cb->args[1]; - set = ip_set_list[index]; + set = nfnl_set(index); if (set == NULL) { if (dump_type == DUMP_ONE) { ret = -ENOENT; @@ -1100,7 +1174,7 @@ ip_set_dump_start(struct sk_buff *skb, struct netlink_callback *cb) if (!cb->args[2]) { /* Start listing: make sure set won't be destroyed */ pr_debug("reference set\n"); - __ip_set_get(index); + __ip_set_get(set); } nlh = start_msg(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, flags, @@ -1159,7 +1233,7 @@ ip_set_dump_start(struct sk_buff *skb, struct netlink_callback *cb) release_refcount: /* If there was an error or set is done, release set */ if (ret || !cb->args[2]) { - pr_debug("release set %s\n", ip_set_list[index]->name); + pr_debug("release set %s\n", nfnl_set(index)->name); ip_set_put_byindex(index); cb->args[2] = 0; } @@ -1409,17 +1483,15 @@ ip_set_header(struct sock *ctnl, struct sk_buff *skb, const struct ip_set *set; struct sk_buff *skb2; struct nlmsghdr *nlh2; - ip_set_id_t index; int ret = 0; if (unlikely(protocol_failed(attr) || attr[IPSET_ATTR_SETNAME] == NULL)) return -IPSET_ERR_PROTOCOL; - index = find_set_id(nla_data(attr[IPSET_ATTR_SETNAME])); - if (index == IPSET_INVALID_ID) + set = find_set(nla_data(attr[IPSET_ATTR_SETNAME])); + if (set == NULL) return -ENOENT; - set = ip_set_list[index]; skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); if (skb2 == NULL) @@ -1684,6 +1756,7 @@ ip_set_sockfn_get(struct sock *sk, int optval, void __user *user, int *len) } case IP_SET_OP_GET_BYNAME: { struct ip_set_req_get_set *req_get = data; + ip_set_id_t id; if (*len != sizeof(struct ip_set_req_get_set)) { ret = -EINVAL; @@ -1691,12 +1764,14 @@ ip_set_sockfn_get(struct sock *sk, int optval, void __user *user, int *len) } req_get->set.name[IPSET_MAXNAMELEN - 1] = '\0'; nfnl_lock(); - req_get->set.index = find_set_id(req_get->set.name); + find_set_and_id(req_get->set.name, &id); + req_get->set.index = id; nfnl_unlock(); goto copy; } case IP_SET_OP_GET_BYINDEX: { struct ip_set_req_get_set *req_get = data; + struct ip_set *set; if (*len != sizeof(struct ip_set_req_get_set) || req_get->set.index >= ip_set_max) { @@ -1704,9 +1779,8 @@ ip_set_sockfn_get(struct sock *sk, int optval, void __user *user, int *len) goto done; } nfnl_lock(); - strncpy(req_get->set.name, - ip_set_list[req_get->set.index] - ? ip_set_list[req_get->set.index]->name : "", + set = nfnl_set(req_get->set.index); + strncpy(req_get->set.name, set ? set->name : "", IPSET_MAXNAMELEN); nfnl_unlock(); goto copy; @@ -1737,6 +1811,7 @@ static struct nf_sockopt_ops so_set __read_mostly = { static int __init ip_set_init(void) { + struct ip_set **list; int ret; if (max_sets) @@ -1744,22 +1819,22 @@ ip_set_init(void) if (ip_set_max >= IPSET_INVALID_ID) ip_set_max = IPSET_INVALID_ID - 1; - ip_set_list = kzalloc(sizeof(struct ip_set *) * ip_set_max, - GFP_KERNEL); - if (!ip_set_list) + list = kzalloc(sizeof(struct ip_set *) * ip_set_max, GFP_KERNEL); + if (!list) return -ENOMEM; + rcu_assign_pointer(ip_set_list, list); ret = nfnetlink_subsys_register(&ip_set_netlink_subsys); if (ret != 0) { pr_err("ip_set: cannot register with nfnetlink.\n"); - kfree(ip_set_list); + kfree(list); return ret; } ret = nf_register_sockopt(&so_set); if (ret != 0) { pr_err("SO_SET registry failed: %d\n", ret); nfnetlink_subsys_unregister(&ip_set_netlink_subsys); - kfree(ip_set_list); + kfree(list); return ret; } @@ -1770,10 +1845,12 @@ ip_set_init(void) static void __exit ip_set_fini(void) { + struct ip_set **list = rcu_dereference_protected(ip_set_list, 1); + /* There can't be any existing set */ nf_unregister_sockopt(&so_set); nfnetlink_subsys_unregister(&ip_set_netlink_subsys); - kfree(ip_set_list); + kfree(list); pr_debug("these are the famous last words\n"); } diff --git a/trunk/net/sctp/associola.c b/trunk/net/sctp/associola.c index ba3f9cc4c047..b1ef3bc301a5 100644 --- a/trunk/net/sctp/associola.c +++ b/trunk/net/sctp/associola.c @@ -321,9 +321,6 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a asoc->default_timetolive = sp->default_timetolive; asoc->default_rcv_context = sp->default_rcv_context; - /* SCTP_GET_ASSOC_STATS COUNTERS */ - memset(&asoc->stats, 0, sizeof(struct sctp_priv_assoc_stats)); - /* AUTH related initializations */ INIT_LIST_HEAD(&asoc->endpoint_shared_keys); err = sctp_auth_asoc_copy_shkeys(ep, asoc, gfp); @@ -763,7 +760,6 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, /* Set the transport's RTO.initial value */ peer->rto = asoc->rto_initial; - sctp_max_rto(asoc, peer); /* Set the peer's active state. */ peer->state = peer_state; @@ -1156,12 +1152,8 @@ static void sctp_assoc_bh_rcv(struct work_struct *work) */ if (sctp_chunk_is_data(chunk)) asoc->peer.last_data_from = chunk->transport; - else { + else SCTP_INC_STATS(net, SCTP_MIB_INCTRLCHUNKS); - asoc->stats.ictrlchunks++; - if (chunk->chunk_hdr->type == SCTP_CID_SACK) - asoc->stats.isacks++; - } if (chunk->transport) chunk->transport->last_time_heard = jiffies; diff --git a/trunk/net/sctp/endpointola.c b/trunk/net/sctp/endpointola.c index 32ab55b18281..1859e2bc83d1 100644 --- a/trunk/net/sctp/endpointola.c +++ b/trunk/net/sctp/endpointola.c @@ -480,11 +480,8 @@ static void sctp_endpoint_bh_rcv(struct work_struct *work) */ if (asoc && sctp_chunk_is_data(chunk)) asoc->peer.last_data_from = chunk->transport; - else { + else SCTP_INC_STATS(sock_net(ep->base.sk), SCTP_MIB_INCTRLCHUNKS); - if (asoc) - asoc->stats.ictrlchunks++; - } if (chunk->transport) chunk->transport->last_time_heard = jiffies; diff --git a/trunk/net/sctp/inqueue.c b/trunk/net/sctp/inqueue.c index 2d5ad280de38..397296fb156f 100644 --- a/trunk/net/sctp/inqueue.c +++ b/trunk/net/sctp/inqueue.c @@ -104,8 +104,6 @@ void sctp_inq_push(struct sctp_inq *q, struct sctp_chunk *chunk) * on the BH related data structures. */ list_add_tail(&chunk->list, &q->in_chunk_list); - if (chunk->asoc) - chunk->asoc->stats.ipackets++; q->immediate.func(&q->immediate); } diff --git a/trunk/net/sctp/output.c b/trunk/net/sctp/output.c index f5200a2ad852..4e90188bf489 100644 --- a/trunk/net/sctp/output.c +++ b/trunk/net/sctp/output.c @@ -311,8 +311,6 @@ static sctp_xmit_t __sctp_packet_append_chunk(struct sctp_packet *packet, case SCTP_CID_SACK: packet->has_sack = 1; - if (chunk->asoc) - chunk->asoc->stats.osacks++; break; case SCTP_CID_AUTH: @@ -586,13 +584,11 @@ int sctp_packet_transmit(struct sctp_packet *packet) */ /* Dump that on IP! */ - if (asoc) { - asoc->stats.opackets++; - if (asoc->peer.last_sent_to != tp) - /* Considering the multiple CPU scenario, this is a - * "correcter" place for last_sent_to. --xguo - */ - asoc->peer.last_sent_to = tp; + if (asoc && asoc->peer.last_sent_to != tp) { + /* Considering the multiple CPU scenario, this is a + * "correcter" place for last_sent_to. --xguo + */ + asoc->peer.last_sent_to = tp; } if (has_data) { diff --git a/trunk/net/sctp/outqueue.c b/trunk/net/sctp/outqueue.c index 379c81dee9d1..1b4a7f8ec3fd 100644 --- a/trunk/net/sctp/outqueue.c +++ b/trunk/net/sctp/outqueue.c @@ -667,7 +667,6 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, chunk->fast_retransmit = SCTP_DONT_FRTX; q->empty = 0; - q->asoc->stats.rtxchunks++; break; } @@ -877,14 +876,12 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout) if (status != SCTP_XMIT_OK) { /* put the chunk back */ list_add(&chunk->list, &q->control_chunk_list); - } else { - asoc->stats.octrlchunks++; + } else if (chunk->chunk_hdr->type == SCTP_CID_FWD_TSN) { /* PR-SCTP C5) If a FORWARD TSN is sent, the * sender MUST assure that at least one T3-rtx * timer is running. */ - if (chunk->chunk_hdr->type == SCTP_CID_FWD_TSN) - sctp_transport_reset_timers(transport); + sctp_transport_reset_timers(transport); } break; @@ -1058,10 +1055,6 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout) */ if (asoc->state == SCTP_STATE_SHUTDOWN_PENDING) chunk->chunk_hdr->flags |= SCTP_DATA_SACK_IMM; - if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) - asoc->stats.ouodchunks++; - else - asoc->stats.oodchunks++; break; @@ -1169,7 +1162,6 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk) sack_ctsn = ntohl(sack->cum_tsn_ack); gap_ack_blocks = ntohs(sack->num_gap_ack_blocks); - asoc->stats.gapcnt += gap_ack_blocks; /* * SFR-CACC algorithm: * On receipt of a SACK the sender SHOULD execute the diff --git a/trunk/net/sctp/sm_make_chunk.c b/trunk/net/sctp/sm_make_chunk.c index e1c5fc2be6b8..e0f01a4e8cd6 100644 --- a/trunk/net/sctp/sm_make_chunk.c +++ b/trunk/net/sctp/sm_make_chunk.c @@ -804,11 +804,10 @@ struct sctp_chunk *sctp_make_sack(const struct sctp_association *asoc) gabs); /* Add the duplicate TSN information. */ - if (num_dup_tsns) { - aptr->stats.idupchunks += num_dup_tsns; + if (num_dup_tsns) sctp_addto_chunk(retval, sizeof(__u32) * num_dup_tsns, sctp_tsnmap_get_dups(map)); - } + /* Once we have a sack generated, check to see what our sack * generation is, if its 0, reset the transports to 0, and reset * the association generation to 1 diff --git a/trunk/net/sctp/sm_sideeffect.c b/trunk/net/sctp/sm_sideeffect.c index c9577754a708..c0769569b05d 100644 --- a/trunk/net/sctp/sm_sideeffect.c +++ b/trunk/net/sctp/sm_sideeffect.c @@ -542,7 +542,6 @@ static void sctp_do_8_2_transport_strike(sctp_cmd_seq_t *commands, */ if (!is_hb || transport->hb_sent) { transport->rto = min((transport->rto * 2), transport->asoc->rto_max); - sctp_max_rto(asoc, transport); } } diff --git a/trunk/net/sctp/sm_statefuns.c b/trunk/net/sctp/sm_statefuns.c index ebcd1eedb115..e92079d27eae 100644 --- a/trunk/net/sctp/sm_statefuns.c +++ b/trunk/net/sctp/sm_statefuns.c @@ -6133,8 +6133,6 @@ static int sctp_eat_data(const struct sctp_association *asoc, /* The TSN is too high--silently discard the chunk and * count on it getting retransmitted later. */ - if (chunk->asoc) - chunk->asoc->stats.outofseqtsns++; return SCTP_IERROR_HIGH_TSN; } else if (tmp > 0) { /* This is a duplicate. Record it. */ @@ -6234,14 +6232,10 @@ static int sctp_eat_data(const struct sctp_association *asoc, /* Note: Some chunks may get overcounted (if we drop) or overcounted * if we renege and the chunk arrives again. */ - if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) { + if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) SCTP_INC_STATS(net, SCTP_MIB_INUNORDERCHUNKS); - if (chunk->asoc) - chunk->asoc->stats.iuodchunks++; - } else { + else { SCTP_INC_STATS(net, SCTP_MIB_INORDERCHUNKS); - if (chunk->asoc) - chunk->asoc->stats.iodchunks++; ordered = 1; } diff --git a/trunk/net/sctp/socket.c b/trunk/net/sctp/socket.c index 9e65758cb038..bc1624913c42 100644 --- a/trunk/net/sctp/socket.c +++ b/trunk/net/sctp/socket.c @@ -611,7 +611,6 @@ static int sctp_send_asconf_add_ip(struct sock *sk, 2*asoc->pathmtu, 4380)); trans->ssthresh = asoc->peer.i.a_rwnd; trans->rto = asoc->rto_initial; - sctp_max_rto(asoc, trans); trans->rtt = trans->srtt = trans->rttvar = 0; sctp_transport_route(trans, NULL, sctp_sk(asoc->base.sk)); @@ -5636,71 +5635,6 @@ static int sctp_getsockopt_paddr_thresholds(struct sock *sk, return 0; } -/* - * SCTP_GET_ASSOC_STATS - * - * This option retrieves local per endpoint statistics. It is modeled - * after OpenSolaris' implementation - */ -static int sctp_getsockopt_assoc_stats(struct sock *sk, int len, - char __user *optval, - int __user *optlen) -{ - struct sctp_assoc_stats sas; - struct sctp_association *asoc = NULL; - - /* User must provide at least the assoc id */ - if (len < sizeof(sctp_assoc_t)) - return -EINVAL; - - if (copy_from_user(&sas, optval, len)) - return -EFAULT; - - asoc = sctp_id2assoc(sk, sas.sas_assoc_id); - if (!asoc) - return -EINVAL; - - sas.sas_rtxchunks = asoc->stats.rtxchunks; - sas.sas_gapcnt = asoc->stats.gapcnt; - sas.sas_outofseqtsns = asoc->stats.outofseqtsns; - sas.sas_osacks = asoc->stats.osacks; - sas.sas_isacks = asoc->stats.isacks; - sas.sas_octrlchunks = asoc->stats.octrlchunks; - sas.sas_ictrlchunks = asoc->stats.ictrlchunks; - sas.sas_oodchunks = asoc->stats.oodchunks; - sas.sas_iodchunks = asoc->stats.iodchunks; - sas.sas_ouodchunks = asoc->stats.ouodchunks; - sas.sas_iuodchunks = asoc->stats.iuodchunks; - sas.sas_idupchunks = asoc->stats.idupchunks; - sas.sas_opackets = asoc->stats.opackets; - sas.sas_ipackets = asoc->stats.ipackets; - - /* New high max rto observed, will return 0 if not a single - * RTO update took place. obs_rto_ipaddr will be bogus - * in such a case - */ - sas.sas_maxrto = asoc->stats.max_obs_rto; - memcpy(&sas.sas_obs_rto_ipaddr, &asoc->stats.obs_rto_ipaddr, - sizeof(struct sockaddr_storage)); - - /* Mark beginning of a new observation period */ - asoc->stats.max_obs_rto = asoc->rto_min; - - /* Allow the struct to grow and fill in as much as possible */ - len = min_t(size_t, len, sizeof(sas)); - - if (put_user(len, optlen)) - return -EFAULT; - - SCTP_DEBUG_PRINTK("sctp_getsockopt_assoc_stat(%d): %d\n", - len, sas.sas_assoc_id); - - if (copy_to_user(optval, &sas, len)) - return -EFAULT; - - return 0; -} - SCTP_STATIC int sctp_getsockopt(struct sock *sk, int level, int optname, char __user *optval, int __user *optlen) { @@ -5842,9 +5776,6 @@ SCTP_STATIC int sctp_getsockopt(struct sock *sk, int level, int optname, case SCTP_PEER_ADDR_THLDS: retval = sctp_getsockopt_paddr_thresholds(sk, optval, len, optlen); break; - case SCTP_GET_ASSOC_STATS: - retval = sctp_getsockopt_assoc_stats(sk, len, optval, optlen); - break; default: retval = -ENOPROTOOPT; break; diff --git a/trunk/net/sctp/transport.c b/trunk/net/sctp/transport.c index 310f11eb2206..206cf5238fd3 100644 --- a/trunk/net/sctp/transport.c +++ b/trunk/net/sctp/transport.c @@ -363,7 +363,6 @@ void sctp_transport_update_rto(struct sctp_transport *tp, __u32 rtt) if (tp->rto > tp->asoc->rto_max) tp->rto = tp->asoc->rto_max; - sctp_max_rto(tp->asoc, tp); tp->rtt = rtt; /* Reset rto_pending so that a new RTT measurement is started when a @@ -621,7 +620,6 @@ void sctp_transport_reset(struct sctp_transport *t) t->burst_limited = 0; t->ssthresh = asoc->peer.i.a_rwnd; t->rto = asoc->rto_initial; - sctp_max_rto(asoc, t); t->rtt = 0; t->srtt = 0; t->rttvar = 0;