#include #include #include "ethtool-util.h" #include "../../linux-2.6.10/drivers/net/arm/ape110.h" int ape110_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs) { u16 *ape110_reg = (short *)regs->data; int i; u32 OUI_model = 0; OUI_model = (ape110_reg[APE110__OUI1] << 16) + ape110_reg[APE110__OUI2]; switch (OUI_model) { case ICPLUS_MODEL_IP175C: fprintf(stdout, "ICPLUS IP175C Registers\n"); break; case ICPLUS_MODEL_IP175D: fprintf(stdout, "ICPLUS IP175D Registers\n"); break; case ICS_MODEL_1893BF: fprintf(stdout, "ICS 1893BF Registers\n"); break; case MICREL_MODEL_KS8721: fprintf(stdout, "MICREL KS8721 Registers\n"); break; case REALTEK_MODEL_RTL8201CP: fprintf(stdout, "REALTEK RTL8201CP Registers\n"); break; default: fprintf(stdout, "Unknown Chipset %08x\n", OUI_model); return 0; break; } switch (OUI_model) { default: break; case ICPLUS_MODEL_IP175C: fprintf(stdout, "PHY 0, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175C__BMSR_PHY0]); fprintf(stdout, "PHY 1, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175C__BMSR_PHY1]); fprintf(stdout, "PHY 2, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175C__BMSR_PHY2]); fprintf(stdout, "PHY 3, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175C__BMSR_PHY3]); fprintf(stdout, "PHY 4, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175C__BMSR_PHY4]); break; case ICPLUS_MODEL_IP175D: fprintf(stdout, "PHY 0, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175D__BMSR_PHY0]); fprintf(stdout, "PHY 1, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175D__BMSR_PHY1]); fprintf(stdout, "PHY 2, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175D__BMSR_PHY2]); fprintf(stdout, "PHY 3, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175D__BMSR_PHY3]); fprintf(stdout, "PHY 4, Basic Status Reg = 0x%04X\n",ape110_reg[ICPLUS_IP175D__BMSR_PHY4]); fprintf(stdout, "\n"); break; } switch (OUI_model) { default: break; case ICPLUS_MODEL_IP175C: fprintf(stdout, "MII | PHY29 PHY30 PHY31\n"); for (i=0; i<= 6; i++) { fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x\n", i, 0, ape110_reg[ICPLUS_IP175C__PHY30_MII0 + i], ape110_reg[ICPLUS_IP175C__PHY31_MII0 + i]); } for (i=7; i<= 17; i++) { fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x\n", i, 0, ape110_reg[ICPLUS_IP175C__PHY30_MII0 + i], 0); } for (i=18; i<= 31; i++) { fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x\n", i, ape110_reg[ICPLUS_IP175C__PHY29_MII18 + (i-18)], ape110_reg[ICPLUS_IP175C__PHY30_MII0 + i], 0); } break; case ICPLUS_MODEL_IP175D: fprintf(stdout, "MII | PHY20 PHY21 PHY22 PHY23 PHY24 PHY25 PHY26\n"); for (i=0; i<= REGDUMP_ICPLUS_IP175D_PHY24_End; i++) { // From 0 to 3 included fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i, ape110_reg[ICPLUS_IP175D__PHY20_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY21_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY22_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY23_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY24_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY25_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY26_MII0 + i]); } for (i=4; i<= REGDUMP_ICPLUS_IP175D_PHY25_End; i++) { // from 4 to 23 included fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i, ape110_reg[ICPLUS_IP175D__PHY20_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY21_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY22_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY23_MII0 + i], 0, ape110_reg[ICPLUS_IP175D__PHY25_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY26_MII0 + i]); } fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", 24, ape110_reg[ICPLUS_IP175D__PHY20_MII0 + 24], ape110_reg[ICPLUS_IP175D__PHY21_MII0 + 24], ape110_reg[ICPLUS_IP175D__PHY22_MII0 + 24], ape110_reg[ICPLUS_IP175D__PHY23_MII0 + 24], 0, 0, 0); fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", 25, 0, ape110_reg[ICPLUS_IP175D__PHY21_MII0 + 25], ape110_reg[ICPLUS_IP175D__PHY22_MII0 + 25], ape110_reg[ICPLUS_IP175D__PHY23_MII0 + 25], 0, 0, 0); for (i=26; i<= REGDUMP_ICPLUS_IP175D_PHY22_End; i++) { // from 26 to 29 included fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i, 0, 0, ape110_reg[ICPLUS_IP175D__PHY22_MII0 + i], ape110_reg[ICPLUS_IP175D__PHY23_MII0 + i], 0, 0, 0); } for (i=30; i<= REGDUMP_ICPLUS_IP175D_PHY23_End; i++) { // from 30 to 31 included fprintf(stdout, "%3d | 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i, 0, 0, 0, ape110_reg[ICPLUS_IP175D__PHY23_MII0 + i], 0, 0, 0); } fprintf(stdout, "\n"); break; } fprintf(stdout, "\n"); return 0; }