Commit 30be2b69 authored by Jeff Garzik's avatar Jeff Garzik

Merge pobox.com:/garz/repo/netdev-2.6/smc91x

into pobox.com:/garz/repo/net-drivers-2.6
parents 56ca2948 955bd9bb
...@@ -138,6 +138,7 @@ static struct platform_device sa1111_device = { ...@@ -138,6 +138,7 @@ static struct platform_device sa1111_device = {
static struct resource smc91x_resources[] = { static struct resource smc91x_resources[] = {
[0] = { [0] = {
.name = "smc91x-regs",
.start = 0x0c000000, .start = 0x0c000000,
.end = 0x0c0fffff, .end = 0x0c0fffff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
...@@ -148,6 +149,7 @@ static struct resource smc91x_resources[] = { ...@@ -148,6 +149,7 @@ static struct resource smc91x_resources[] = {
.flags = IORESOURCE_IRQ, .flags = IORESOURCE_IRQ,
}, },
[2] = { [2] = {
.name = "smc91x-attrib",
.start = 0x0e000000, .start = 0x0e000000,
.end = 0x0e0fffff, .end = 0x0e0fffff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
......
...@@ -266,6 +266,7 @@ static struct platform_device sa1111_device = { ...@@ -266,6 +266,7 @@ static struct platform_device sa1111_device = {
static struct resource smc91x_resources[] = { static struct resource smc91x_resources[] = {
[0] = { [0] = {
.name = "smc91x-regs",
.start = SA1100_CS3_PHYS, .start = SA1100_CS3_PHYS,
.end = SA1100_CS3_PHYS + 0x01ffffff, .end = SA1100_CS3_PHYS + 0x01ffffff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
...@@ -276,6 +277,7 @@ static struct resource smc91x_resources[] = { ...@@ -276,6 +277,7 @@ static struct resource smc91x_resources[] = {
.flags = IORESOURCE_IRQ, .flags = IORESOURCE_IRQ,
}, },
[2] = { [2] = {
.name = "smc91x-attrib",
.start = SA1100_CS3_PHYS + 0x02000000, .start = SA1100_CS3_PHYS + 0x02000000,
.end = SA1100_CS3_PHYS + 0x03ffffff, .end = SA1100_CS3_PHYS + 0x03ffffff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
......
This diff is collapsed.
...@@ -162,6 +162,26 @@ SMC_outw(u16 val, unsigned long ioaddr, int reg) ...@@ -162,6 +162,26 @@ SMC_outw(u16 val, unsigned long ioaddr, int reg)
} }
} }
#elif defined(CONFIG_ARCH_OMAP)
/* We can only do 16-bit reads and writes in the static memory space. */
#define SMC_CAN_USE_8BIT 0
#define SMC_CAN_USE_16BIT 1
#define SMC_CAN_USE_32BIT 0
#define SMC_IO_SHIFT 0
#define SMC_NOWAIT 1
#define SMC_inb(a, r) readb((a) + (r))
#define SMC_outb(v, a, r) writeb(v, (a) + (r))
#define SMC_inw(a, r) readw((a) + (r))
#define SMC_outw(v, a, r) writew(v, (a) + (r))
#define SMC_insw(a, r, p, l) readsw((a) + (r), p, l)
#define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l)
#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((a) + (r), p, l)
#define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
#elif defined(CONFIG_ISA) #elif defined(CONFIG_ISA)
#define SMC_CAN_USE_8BIT 1 #define SMC_CAN_USE_8BIT 1
...@@ -362,7 +382,7 @@ smc_pxa_dma_irq(int dma, void *dummy, struct pt_regs *regs) ...@@ -362,7 +382,7 @@ smc_pxa_dma_irq(int dma, void *dummy, struct pt_regs *regs)
#define SMC_IO_SHIFT 0 #define SMC_IO_SHIFT 0
#endif #endif
#define SMC_IO_EXTENT (16 << SMC_IO_SHIFT) #define SMC_IO_EXTENT (16 << SMC_IO_SHIFT)
#define SMC_DATA_EXTENT (4)
/* /*
. Bank Select Register: . Bank Select Register:
...@@ -883,7 +903,7 @@ static const char * chip_ids[ 16 ] = { ...@@ -883,7 +903,7 @@ static const char * chip_ids[ 16 ] = {
#endif #endif
#if SMC_CAN_USE_32BIT #if SMC_CAN_USE_32BIT
#define SMC_PUSH_DATA(p, l) \ #define _SMC_PUSH_DATA(p, l) \
do { \ do { \
char *__ptr = (p); \ char *__ptr = (p); \
int __len = (l); \ int __len = (l); \
...@@ -898,7 +918,7 @@ static const char * chip_ids[ 16 ] = { ...@@ -898,7 +918,7 @@ static const char * chip_ids[ 16 ] = {
SMC_outw( *((u16 *)__ptr), ioaddr, DATA_REG ); \ SMC_outw( *((u16 *)__ptr), ioaddr, DATA_REG ); \
} \ } \
} while (0) } while (0)
#define SMC_PULL_DATA(p, l) \ #define _SMC_PULL_DATA(p, l) \
do { \ do { \
char *__ptr = (p); \ char *__ptr = (p); \
int __len = (l); \ int __len = (l); \
...@@ -918,11 +938,11 @@ static const char * chip_ids[ 16 ] = { ...@@ -918,11 +938,11 @@ static const char * chip_ids[ 16 ] = {
SMC_insl( ioaddr, DATA_REG, __ptr, __len >> 2); \ SMC_insl( ioaddr, DATA_REG, __ptr, __len >> 2); \
} while (0) } while (0)
#elif SMC_CAN_USE_16BIT #elif SMC_CAN_USE_16BIT
#define SMC_PUSH_DATA(p, l) SMC_outsw( ioaddr, DATA_REG, p, (l) >> 1 ) #define _SMC_PUSH_DATA(p, l) SMC_outsw( ioaddr, DATA_REG, p, (l) >> 1 )
#define SMC_PULL_DATA(p, l) SMC_insw ( ioaddr, DATA_REG, p, (l) >> 1 ) #define _SMC_PULL_DATA(p, l) SMC_insw ( ioaddr, DATA_REG, p, (l) >> 1 )
#elif SMC_CAN_USE_8BIT #elif SMC_CAN_USE_8BIT
#define SMC_PUSH_DATA(p, l) SMC_outsb( ioaddr, DATA_REG, p, l ) #define _SMC_PUSH_DATA(p, l) SMC_outsb( ioaddr, DATA_REG, p, l )
#define SMC_PULL_DATA(p, l) SMC_insb ( ioaddr, DATA_REG, p, l ) #define _SMC_PULL_DATA(p, l) SMC_insb ( ioaddr, DATA_REG, p, l )
#endif #endif
#if ! SMC_CAN_USE_16BIT #if ! SMC_CAN_USE_16BIT
...@@ -941,6 +961,51 @@ static const char * chip_ids[ 16 ] = { ...@@ -941,6 +961,51 @@ static const char * chip_ids[ 16 ] = {
}) })
#endif #endif
#if SMC_CAN_USE_DATACS
#define SMC_PUSH_DATA(p, l) \
if ( lp->datacs ) { \
unsigned char *__ptr = (p); \
int __len = (l); \
if (__len >= 2 && (unsigned long)__ptr & 2) { \
__len -= 2; \
SMC_outw( *((u16 *)__ptr), ioaddr, DATA_REG ); \
__ptr += 2; \
} \
outsl(lp->datacs, __ptr, __len >> 2); \
if (__len & 2) { \
__ptr += (__len & ~3); \
SMC_outw( *((u16 *)__ptr), ioaddr, DATA_REG ); \
} \
} else { \
_SMC_PUSH_DATA(p, l); \
}
#define SMC_PULL_DATA(p, l) \
if ( lp->datacs ) { \
unsigned char *__ptr = (p); \
int __len = (l); \
if ((unsigned long)__ptr & 2) { \
/* \
* We want 32bit alignment here. \
* Since some buses perform a full 32bit \
* fetch even for 16bit data we can't use \
* SMC_inw() here. Back both source (on chip \
* and destination) pointers of 2 bytes. \
*/ \
__ptr -= 2; \
__len += 2; \
SMC_SET_PTR( 2|PTR_READ|PTR_RCV|PTR_AUTOINC ); \
} \
__len += 2; \
insl( lp->datacs, __ptr, __len >> 2); \
} else { \
_SMC_PULL_DATA(p, l); \
}
#else
#define SMC_PUSH_DATA(p, l) _SMC_PUSH_DATA(p, l)
#define SMC_PULL_DATA(p, l) _SMC_PULL_DATA(p, l)
#endif
#if !defined (SMC_INTERRUPT_PREAMBLE) #if !defined (SMC_INTERRUPT_PREAMBLE)
# define SMC_INTERRUPT_PREAMBLE # define SMC_INTERRUPT_PREAMBLE
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment