All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: tsbogend@alpha.franken.de (Thomas Bogendoerfer)
Cc: netdev@vger.kernel.org, jgarzik@pobox.com
Subject: Re: [PATCH] Ethernet driver for EISA only SNI RM200/RM400 machines
Date: Sat, 23 Jun 2007 09:53:01 -0700	[thread overview]
Message-ID: <20070623095301.bfefce03.akpm@linux-foundation.org> (raw)
In-Reply-To: <20070622195358.GB13176@alpha.franken.de>

> On Fri, 22 Jun 2007 21:53:58 +0200 tsbogend@alpha.franken.de (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);


      reply	other threads:[~2007-06-23 16:53 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-22 19:53 [PATCH] Ethernet driver for EISA only SNI RM200/RM400 machines Thomas Bogendoerfer
2007-06-23 16:53 ` Andrew Morton [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070623095301.bfefce03.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=jgarzik@pobox.com \
    --cc=netdev@vger.kernel.org \
    --cc=tsbogend@alpha.franken.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.