* Patch by Rahul Shanbhag, 19 Feb 2004:
[platform/kernel/u-boot.git] / drivers / smc91111.h
index a372c27..1d9555e 100644 (file)
@@ -80,7 +80,7 @@ typedef unsigned long int             dword;
 #define        SMC_inw(r)      (*((volatile word *)(SMC_BASE_ADDRESS+(r))))
 #define SMC_inb(p)     ({ \
        unsigned int __p = (unsigned int)(SMC_BASE_ADDRESS + (p)); \
-       unsigned int __v = *(volatile unsigned short *)((SMC_BASE_ADDRESS + __p) & ~1); \
+       unsigned int __v = *(volatile unsigned short *)((__p) & ~1); \
        if (__p & 1) __v >>= 8; \
        else __v &= 0xff; \
        __v; })
@@ -178,6 +178,31 @@ typedef unsigned long int          dword;
                                })
 #endif
 
+#if defined(CONFIG_SMC_USE_32_BIT)
+
+#define        SMC_inl(r)      (*((volatile dword *)(SMC_BASE_ADDRESS+(r))))
+
+#define SMC_insl(r,b,l)        ({      int __i ;  \
+                                       dword *__b2;  \
+                                       __b2 = (dword *) b;  \
+                                       for (__i = 0; __i < l; __i++) {  \
+                                         *(__b2 + __i) = SMC_inl(r);  \
+                                         SMC_inl(0);  \
+                                       };  \
+                               })
+
+#define        SMC_outl(d,r)   (*((volatile dword *)(SMC_BASE_ADDRESS+(r))) = d)
+
+#define SMC_outsl(r,b,l)       ({      int __i; \
+                                       dword *__b2; \
+                                       __b2 = (dword *) b; \
+                                       for (__i = 0; __i < l; __i++) { \
+                                           SMC_outl( *(__b2 + __i), r); \
+                                       } \
+                               })
+
+#endif /* CONFIG_SMC_USE_32_BIT */
+
 #endif
 
 /*---------------------------------------------------------------
@@ -281,7 +306,17 @@ typedef unsigned long int          dword;
 #define RPC_LED_100    (0x05)  /* LED = 100Mbps link dectect */
 #define RPC_LED_TX     (0x06)  /* LED = TX packet occurred */
 #define RPC_LED_RX     (0x07)  /* LED = RX packet occurred */
-#define RPC_DEFAULT (RPC_ANEG | (RPC_LED_100 << RPC_LSXA_SHFT) | (RPC_LED_FD << RPC_LSXB_SHFT) | RPC_SPEED | RPC_DPLX)
+#if defined(CONFIG_DK1C20) || defined(CONFIG_DK1S10)
+/* buggy schematic: LEDa -> yellow, LEDb --> green */
+#define RPC_DEFAULT    ( RPC_SPEED | RPC_DPLX | RPC_ANEG       \
+                       | (RPC_LED_TX_RX << RPC_LSXA_SHFT)      \
+                       | (RPC_LED_100_10 << RPC_LSXB_SHFT)     )
+#else
+/* SMSC reference design: LEDa --> green, LEDb --> yellow */
+#define RPC_DEFAULT    ( RPC_SPEED | RPC_DPLX | RPC_ANEG       \
+                       | (RPC_LED_100_10 << RPC_LSXA_SHFT)     \
+                       | (RPC_LED_TX_RX << RPC_LSXB_SHFT)      )
+#endif
 
 /* Bank 0 0x000C is reserved */
 
@@ -574,7 +609,6 @@ enum {
 /* Uses the same bit definitions as PHY_INT_REG */
 
 
-
 /*-------------------------------------------------------------------------
  .  I define some macros to make it easier to do somewhat common
  . or slightly complicated, repeated tasks.
@@ -616,4 +650,3 @@ enum {
        IM_MDINT)
 
 #endif  /* _SMC_91111_H_ */
-