r8169: add ERI functions.
authorHayes Wang <hayeswang@realtek.com>
Wed, 6 Jul 2011 07:58:05 +0000 (15:58 +0800)
committerFrancois Romieu <romieu@fr.zoreil.com>
Thu, 14 Jul 2011 21:22:24 +0000 (23:22 +0200)
Add the ERI functions which would be used by the new chips.

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
Acked-by: Francois Romieu <romieu@fr.zoreil.com>
drivers/net/r8169.c

index 604f94647b63f5f458fa0349e1b8dace26e2ebc8..a983eaaaf2e3797e6030655b0ff4f551d511ccac 100644 (file)
@@ -1046,6 +1046,49 @@ static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
        return value;
 }
 
+static
+void rtl_eri_write(void __iomem *ioaddr, int addr, u32 mask, u32 val, int type)
+{
+       unsigned int i;
+
+       BUG_ON((addr & 3) || (mask == 0));
+       RTL_W32(ERIDR, val);
+       RTL_W32(ERIAR, ERIAR_WRITE_CMD | type | mask | addr);
+
+       for (i = 0; i < 100; i++) {
+               if (!(RTL_R32(ERIAR) & ERIAR_FLAG))
+                       break;
+               udelay(100);
+       }
+}
+
+static u32 rtl_eri_read(void __iomem *ioaddr, int addr, int type)
+{
+       u32 value = ~0x00;
+       unsigned int i;
+
+       RTL_W32(ERIAR, ERIAR_READ_CMD | type | ERIAR_MASK_1111 | addr);
+
+       for (i = 0; i < 100; i++) {
+               if (RTL_R32(ERIAR) & ERIAR_FLAG) {
+                       value = RTL_R32(ERIDR);
+                       break;
+               }
+               udelay(100);
+       }
+
+       return value;
+}
+
+static void
+rtl_w1w0_eri(void __iomem *ioaddr, int addr, u32 mask, u32 p, u32 m, int type)
+{
+       u32 val;
+
+       val = rtl_eri_read(ioaddr, addr, type);
+       rtl_eri_write(ioaddr, addr, mask, (val & ~m) | p, type);
+}
+
 static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
 {
        u8 value = 0xff;