aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHayes Wang <hayeswang@realtek.com>2011-07-06 03:58:05 -0400
committerFrancois Romieu <romieu@fr.zoreil.com>2011-07-14 17:22:24 -0400
commit133ac40ac26a6cba957ad5765892f0531ba6ccee (patch)
tree8db211136f72feccf0031b3be235c02e1b43adab
parent92fc43b4159b518f5baae57301f26d770b0834c9 (diff)
r8169: add ERI functions.
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>
-rw-r--r--drivers/net/r8169.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index 604f94647b63..a983eaaaf2e3 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1046,6 +1046,49 @@ static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
1046 return value; 1046 return value;
1047} 1047}
1048 1048
1049static
1050void rtl_eri_write(void __iomem *ioaddr, int addr, u32 mask, u32 val, int type)
1051{
1052 unsigned int i;
1053
1054 BUG_ON((addr & 3) || (mask == 0));
1055 RTL_W32(ERIDR, val);
1056 RTL_W32(ERIAR, ERIAR_WRITE_CMD | type | mask | addr);
1057
1058 for (i = 0; i < 100; i++) {
1059 if (!(RTL_R32(ERIAR) & ERIAR_FLAG))
1060 break;
1061 udelay(100);
1062 }
1063}
1064
1065static u32 rtl_eri_read(void __iomem *ioaddr, int addr, int type)
1066{
1067 u32 value = ~0x00;
1068 unsigned int i;
1069
1070 RTL_W32(ERIAR, ERIAR_READ_CMD | type | ERIAR_MASK_1111 | addr);
1071
1072 for (i = 0; i < 100; i++) {
1073 if (RTL_R32(ERIAR) & ERIAR_FLAG) {
1074 value = RTL_R32(ERIDR);
1075 break;
1076 }
1077 udelay(100);
1078 }
1079
1080 return value;
1081}
1082
1083static void
1084rtl_w1w0_eri(void __iomem *ioaddr, int addr, u32 mask, u32 p, u32 m, int type)
1085{
1086 u32 val;
1087
1088 val = rtl_eri_read(ioaddr, addr, type);
1089 rtl_eri_write(ioaddr, addr, mask, (val & ~m) | p, type);
1090}
1091
1049static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr) 1092static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
1050{ 1093{
1051 u8 value = 0xff; 1094 u8 value = 0xff;