> On Fri, 22 Jun 2007 21:53:58 +0200 [EMAIL PROTECTED] (Thomas Bogendoerfer) 
> wrote:
> Hi,
> 
> This is new ethernet driver, which use the code taken out of lasi_82596
> (done by the other patch I just sent).
> 
> Thomas.
> 
> 
> Ethernet driver for EISA only SNI RM200/RM400 machines
> 
> ...
>
> +static char sni_82596_string[] = "snirm_82596";

const?

> +
> +#define DMA_ALLOC                      dma_alloc_coherent
> +#define DMA_FREE                       dma_free_coherent
> +#define DMA_WBACK(priv, addr, len)     do { } while (0)
> +#define DMA_INV(priv, addr, len)       do { } while (0)
> +#define DMA_WBACK_INV(priv, addr, len) do { } while (0)
> +
> +#define SYSBUS      0x00004400
> +
> +/* big endian CPU, 82596 little endian */
> +#define SWAP32(x)   cpu_to_le32((u32)(x))
> +#define SWAP16(x)   cpu_to_le16((u16)(x))
> +
> +#define OPT_MPU_16BIT    0x01
> +
> +static inline void CA(struct net_device *dev);
> +static inline void MPU_PORT(struct net_device *dev, int c, dma_addr_t x);

These two function's implementations could be moved to before the #include,
s we wouldn't need to forward-declare them?

> +#include "lib82596.c"

ugh.  Is this really unavoidable?

> +MODULE_AUTHOR("Thomas Bogendoerfer");
> +MODULE_DESCRIPTION("i82596 driver");
> +MODULE_LICENSE("GPL");
> +module_param(i596_debug, int, 0);
> +MODULE_PARM_DESC(i596_debug, "82596 debug mask");
> +
> +static inline void CA(struct net_device *dev)
> +{
> +     struct i596_private *lp = netdev_priv(dev);
> +     
> +     writel(0, lp->ca);
> +}
> +
> +
> +static inline void MPU_PORT(struct net_device *dev, int c, dma_addr_t x)
> +{
> +     struct i596_private *lp = netdev_priv(dev);
> +
> +     u32 v = (u32) (c) | (u32) (x);
> +     
> +     if (lp->options & OPT_MPU_16BIT) {
> +             writew(v & 0xffff, lp->mpu_port);
> +             wmb(); udelay(1); /* order writes to MPU port */

Nope, please put these on separate lines.  No exceptions..

> +             writew(v >> 16, lp->mpu_port);
> +     } else {
> +             writel(v, lp->mpu_port);
> +             wmb(); udelay(1); /* order writes to MPU port */
> +             writel(v, lp->mpu_port);
> +     }
> +}

Three callsites: This looks too large to inline.

I see no reason why this and CA() are have upper-case names?

> +
> +static int __devinit sni_82596_probe(struct platform_device *dev)
> +{
> +     struct  net_device *netdevice;
> +     struct i596_private *lp;
> +     struct  resource *res, *ca, *idprom, *options;
> +     int     retval = -ENODEV;
> +     static int init;
> +     void __iomem *mpu_addr = NULL;
> +     void __iomem *ca_addr = NULL;
> +     u8 __iomem *eth_addr = NULL;
> +     
> +     if (init == 0) {
> +             printk(KERN_INFO SNI_82596_DRIVER_VERSION "\n");
> +             init++;
> +     }

Might as well do this message in the module_init() function?  There's a
per-probed-device message later on anwyay.

The patchset tries to add rather a lot of new trailing whitespace btw.

> +     res = platform_get_resource(dev, IORESOURCE_MEM, 0);
> +     if (!res)
> +             goto probe_failed;
> +     mpu_addr = ioremap_nocache(res->start, 4);
> +     if (!mpu_addr) {
> +             retval = -ENOMEM;
> +             goto probe_failed;
> +     }
> +     ca = platform_get_resource(dev, IORESOURCE_MEM, 1);
> +     if (!ca)
> +             goto probe_failed;
> +     ca_addr = ioremap_nocache(ca->start, 4);
> +     if (!ca_addr) {
> +             retval = -ENOMEM;
> +             goto probe_failed;
> +     }
> +     idprom = platform_get_resource(dev, IORESOURCE_MEM, 2);
> +     if (!idprom)
> +             goto probe_failed;
> +     eth_addr = ioremap_nocache(idprom->start, 0x10);
> +     if (!eth_addr) {
> +             retval = -ENOMEM;
> +             goto probe_failed;
> +     }
> +     options = platform_get_resource(dev, 0, 0);
> +     if (!options)
> +             goto probe_failed;
> +
> +     printk(KERN_INFO "Found i82596 at 0x%x\n", res->start);
> +
> +     netdevice = alloc_etherdev(sizeof(struct i596_private));
> +     if (!netdevice) {
> +             retval = -ENOMEM;
> +             goto probe_failed;
> +     }
> +     SET_NETDEV_DEV(netdevice, &dev->dev);
> +     platform_set_drvdata (dev, netdevice);
> +
> +     netdevice->base_addr = res->start;
> +     netdevice->irq = platform_get_irq(dev, 0);
> +             
> +     /* someone seams to like messed up stuff */
> +     netdevice->dev_addr[0] = readb(eth_addr + 0x0b);
> +     netdevice->dev_addr[1] = readb(eth_addr + 0x0a);
> +     netdevice->dev_addr[2] = readb(eth_addr + 0x09);
> +     netdevice->dev_addr[3] = readb(eth_addr + 0x08);
> +     netdevice->dev_addr[4] = readb(eth_addr + 0x07);
> +     netdevice->dev_addr[5] = readb(eth_addr + 0x06);
> +     iounmap(eth_addr);
> +     
> +     if (!netdevice->irq) {
> +             printk(KERN_ERR "%s: IRQ not found for i82596 at 0x%lx\n",
> +                     __FILE__, netdevice->base_addr);
> +             goto probe_failed;
> +     }
> +     
> +     lp = netdev_priv(netdevice);
> +     lp->options = options->flags & IORESOURCE_BITS;
> +     lp->ca = ca_addr;
> +     lp->mpu_port = mpu_addr;
> +     
> +     retval = i82596_probe(netdevice);
> +     if (retval) {
> +             free_netdev(netdevice);
> +probe_failed:
> +             if (mpu_addr)
> +                     iounmap(mpu_addr);
> +             if (ca_addr)
> +                     iounmap(ca_addr);
> +             if (eth_addr)
> +                     iounmap(ca_addr);
> +     }
> +     return retval;
> +}
> +
> +static int __devexit sni_82596_driver_remove (struct platform_device *pdev)

Extraneous space                               ^ here

> +{
> +     struct net_device *dev = platform_get_drvdata(pdev);
> +     struct i596_private *lp = netdev_priv(dev);
> +
> +     unregister_netdev (dev);

and                      ^ here

checkpatch.pl will find these things.

> +     DMA_FREE(dev->dev.parent, sizeof(struct i596_private),
> +              lp->dma, lp->dma_addr);
> +     iounmap(lp->ca);
> +     iounmap(lp->mpu_port);
> +     free_netdev (dev);
> +     return 0;
> +}
> +
> +static struct platform_driver sni_82596_driver = {
> +     .probe  = sni_82596_probe,
> +     .remove = __devexit_p(sni_82596_driver_remove),
> +     .driver = {
> +             .name   = sni_82596_string,
> +     },
> +};
> +
> +static int __devinit sni_82596_init(void)
> +{
> +     return platform_driver_register(&sni_82596_driver);
> +}
> +
> +
> +static void __exit sni_82596_exit(void)
> +{
> +     platform_driver_unregister(&sni_82596_driver);
> +}
> +
> +module_init(sni_82596_init);
> +module_exit(sni_82596_exit);

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to