diff options
author | Magnus Damm <magnus.damm@gmail.com> | 2008-06-09 16:33:53 -0700 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-06-11 21:58:07 -0400 |
commit | 9961530a5f017afae6a928672840617103bea118 (patch) | |
tree | fd3ae0c4a87179f8eb1fc9de77c144bd400811b2 /drivers/net/smc911x.h | |
parent | f0000920696661cbbe2393d93a6f4e1b8325d531 (diff) | |
download | kernel-common-9961530a5f017afae6a928672840617103bea118.tar.gz kernel-common-9961530a5f017afae6a928672840617103bea118.tar.bz2 kernel-common-9961530a5f017afae6a928672840617103bea118.zip |
smc911x: fix 16-bit I/O operations
This patch fixes the following issues related to 16-bit support:
- Remove unused 16-bit PXA DMA implementation.
- Remove unused SMC_inw() and SMC_outw() functions.
- Fix 16-bit SMC_outl to use writew() instead of writel().
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/smc911x.h')
-rw-r--r-- | drivers/net/smc911x.h | 66 |
1 files changed, 3 insertions, 63 deletions
diff --git a/drivers/net/smc911x.h b/drivers/net/smc911x.h index f4965585ba16..2b06e5087e36 100644 --- a/drivers/net/smc911x.h +++ b/drivers/net/smc911x.h @@ -50,19 +50,16 @@ */ #if SMC_USE_16BIT -#define SMC_inw(a, r) readw((a) + (r)) -#define SMC_inl(a, r) ((SMC_inw(a, r) & 0xFFFF)+(SMC_inw(a+2, r)<<16)) -#define SMC_outw(v, a, r) writew(v, (a) + (r)) +#define SMC_inl(a, r) (readw((a) + (r)) & 0xFFFF) + (readw((a) + (r) + 2) << 16)) #define SMC_outl(v, a, r) \ do{ \ - writel(v & 0xFFFF, (a) + (r)); \ - writel(v >> 16, (a) + (r) + 2); \ + writew(v & 0xFFFF, (a) + (r)); \ + writew(v >> 16, (a) + (r) + 2); \ } while (0) #define SMC_insl(a, r, p, l) readsw((short*)((a) + (r)), p, l*2) #define SMC_outsl(a, r, p, l) writesw((short*)((a) + (r)), p, l*2) #elif SMC_USE_32BIT -#define SMC_inw(a, r) readw((a) + (r)) #define SMC_inl(a, r) readl((a) + (r)) #define SMC_outl(v, a, r) writel(v, (a) + (r)) #define SMC_insl(a, r, p, l) readsl((int*)((a) + (r)), p, l) @@ -132,34 +129,6 @@ smc_pxa_dma_insl(struct device *dev, u_long ioaddr, u_long physaddr, } #endif -#ifdef SMC_insw -#undef SMC_insw -#define SMC_insw(a, r, p, l) \ - smc_pxa_dma_insw(lp->dev, a, lp->physaddr, r, lp->rxdma, p, l) - -static inline void -smc_pxa_dma_insw(struct device *dev, u_long ioaddr, u_long physaddr, - int reg, int dma, u_char *buf, int len) -{ - /* 64 bit alignment is required for memory to memory DMA */ - while ((long)buf & 6) { - *((u16 *)buf) = SMC_inw(ioaddr, reg); - buf += 2; - len--; - } - - len *= 2; - rx_dmabuf = dma_map_single(dev, buf, len, DMA_FROM_DEVICE); - rx_dmalen = len; - DCSR(dma) = DCSR_NODESC; - DTADR(dma) = rx_dmabuf; - DSADR(dma) = physaddr + reg; - DCMD(dma) = (DCMD_INCTRGADDR | DCMD_BURST32 | - DCMD_WIDTH2 | DCMD_ENDIRQEN | (DCMD_LENGTH & rx_dmalen)); - DCSR(dma) = DCSR_NODESC | DCSR_RUN; -} -#endif - #ifdef SMC_outsl #undef SMC_outsl #define SMC_outsl(a, r, p, l) \ @@ -187,35 +156,6 @@ smc_pxa_dma_outsl(struct device *dev, u_long ioaddr, u_long physaddr, DCSR(dma) = DCSR_NODESC | DCSR_RUN; } #endif - -#ifdef SMC_outsw -#undef SMC_outsw -#define SMC_outsw(a, r, p, l) \ - smc_pxa_dma_outsw(lp->dev, a, lp->physaddr, r, lp->txdma, p, l) - -static inline void -smc_pxa_dma_outsw(struct device *dev, u_long ioaddr, u_long physaddr, - int reg, int dma, u_char *buf, int len) -{ - /* 64 bit alignment is required for memory to memory DMA */ - while ((long)buf & 6) { - SMC_outw(*((u16 *)buf), ioaddr, reg); - buf += 2; - len--; - } - - len *= 2; - tx_dmabuf = dma_map_single(dev, buf, len, DMA_TO_DEVICE); - tx_dmalen = len; - DCSR(dma) = DCSR_NODESC; - DSADR(dma) = tx_dmabuf; - DTADR(dma) = physaddr + reg; - DCMD(dma) = (DCMD_INCSRCADDR | DCMD_BURST32 | - DCMD_WIDTH2 | DCMD_ENDIRQEN | (DCMD_LENGTH & tx_dmalen)); - DCSR(dma) = DCSR_NODESC | DCSR_RUN; -} -#endif - #endif /* SMC_USE_PXA_DMA */ |