• Lennert Buytenhek's avatar
    mv643xx_eth: introduce per-port register area pointer · 37a6084f
    Lennert Buytenhek authored
    The mv643xx_eth driver uses the rdl()/wrl() macros to read and
    write hardware registers.  Per-port registers are accessed in the
    following way:
    
    	#define PORT_STATUS(p)			(0x0444 + ((p) << 10))
    
    	[...]
    
    	static inline u32 rdl(struct mv643xx_eth_private *mp, int offset)
    	{
    		return readl(mp->shared->base + offset);
    	}
    
    	[...]
    
    	port_status = rdl(mp, PORT_STATUS(mp->port_num));
    
    By giving the per-port 'struct mv643xx_eth_private' its own
    'void __iomem *base' pointer that points to the per-port register
    area, we can get rid of both the double indirection and the << 10
    that is done for every per-port register access -- this patch does
    that.
    Signed-off-by: default avatarLennert Buytenhek <buytenh@marvell.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    37a6084f
mv643xx_eth.c 65.3 KB