/* Copyright 2004 IBM Corporation (jklewis@us.ibm.com) */ #include <stdio.h> #include <stdlib.h> #include "internal.h" #define BIT0 0x0001 #define BIT1 0x0002 #define BIT2 0x0004 #define BIT3 0x0008 #define BIT4 0x0010 #define BIT5 0x0020 #define BIT6 0x0040 #define BIT7 0x0080 #define BIT8 0x0100 #define BIT9 0x0200 #define BIT10 0x0400 #define BIT11 0x0800 #define BIT12 0x1000 #define BIT13 0x2000 #define BIT14 0x4000 #define BIT15 0x8000 int pcnet32_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs) { int i, csr; u16 *data = (u16 *) regs->data; int len = regs->len / 2; u16 temp,*ptr; printf("Driver: %s\n",info->driver); printf("Version: %s\n",info->version); printf("APROM: "); for (i=0; i<8; i++) printf(" %04x ", data[i]); printf("\n"); csr = i; for (; i<100; i++) { if (((i-csr) & 7) == 0) printf("CSR%02d: ", i-csr); printf(" %04x ", data[i]); if (((i-csr) & 7) == 7) printf("\n"); } if (((i-csr) & 7) != 7) printf("\n"); csr = i; for (; i<136; i++) { if (((i-csr) & 7) == 0) printf("BCR%02d: ", i-csr); printf(" %04x ", data[i]); if (((i-csr) & 7) == 7) printf("\n"); } if (((i-csr) & 7) != 7) printf("\n"); csr = i; for (; i<len; i++) { if (((i-csr) & 7) == 0) printf("MII%02d: ", (i-csr) & 0x1f); printf(" %04x ", data[i]); if (((i-csr) & 7) == 7) printf("\n"); } if (((i-csr) & 7) != 7) printf("\n"); printf("\n"); ptr=&data[8]; /* start of the CSRs */ printf("CSR0: Status and Control 0x%04x\n ",ptr[0]); temp=ptr[0]; if(temp & BIT15) printf("ERR "); if(temp & BIT14) printf("BABL "); if(temp & BIT13) printf("CERR "); if(temp & BIT12) printf("MISS "); if(temp & BIT11) printf("MERR "); if(temp & BIT10) printf("RINT "); if(temp & BIT9) printf("TINT "); if(temp & BIT8) printf("IDON "); if(temp & BIT7) printf("INTR "); if(temp & BIT6) printf("INT "); if(temp & BIT5) printf("RXON "); if(temp & BIT4) printf("TXON "); if(temp & BIT3) printf("TDMD "); if(temp & BIT2) printf("STOP "); if(temp & BIT1) printf("STRT "); if(temp & BIT0) printf("INIT "); printf("\n"); printf("CSR3: Interrupt Mask 0x%04x\n ",ptr[3]); temp=ptr[3]; if(temp & BIT14) printf("BABLM "); if(temp & BIT12) printf("MISSM "); if(temp & BIT11) printf("MERRM "); if(temp & BIT10) printf("RINTM "); if(temp & BIT9) printf("TINTM "); if(temp & BIT8) printf("IDONM "); if(temp & BIT6) printf("DXSUFLO "); if(temp & BIT5) printf("LAPPEN "); if(temp & BIT4) printf("DXMT2PD "); if(temp & BIT3) printf("EMBA "); if(temp & BIT2) printf("BSWP "); printf("\n"); printf("CSR4: Test and Features 0x%04x\n ",ptr[4]); temp=ptr[4]; if(temp & BIT15) printf("EN124 "); if(temp & BIT14) printf("DMAPLUS "); if(temp & BIT12) printf("TXDPOLL "); if(temp & BIT11) printf("APAD_XMT "); if(temp & BIT10) printf("ASTRP_RCV "); if(temp & BIT9) printf("MFCO "); if(temp & BIT8) printf("MFCON "); if(temp & BIT7) printf("UINTCMD "); if(temp & BIT6) printf("UINT "); if(temp & BIT5) printf("RCVCCO "); if(temp & BIT4) printf("RCVCCOM "); if(temp & BIT3) printf("TXSTRT "); if(temp & BIT2) printf("TXSTRTM "); if(temp & BIT1) printf("JAB "); if(temp & BIT0) printf("JABM "); printf("\n"); printf("CSR5: Ext Control and Int 1 0x%04x\n ",ptr[5]); temp=ptr[5]; if(temp & BIT15) printf("TOKINTD "); if(temp & BIT14) printf("LTINTEN "); if(temp & BIT11) printf("SINT "); if(temp & BIT10) printf("SINTE "); if(temp & BIT9) printf("SLPINT "); if(temp & BIT8) printf("SLPINTE "); if(temp & BIT7) printf("EXDINT "); if(temp & BIT6) printf("EXDINTE "); if(temp & BIT5) printf("MPPLBA "); if(temp & BIT4) printf("MPINT "); if(temp & BIT3) printf("MPINTE "); if(temp & BIT2) printf("MPEN "); if(temp & BIT1) printf("MPMODE "); if(temp & BIT0) printf("SPND "); printf("\n"); printf("CSR7: Ext Control and Int 2 0x%04x\n ",ptr[7]); temp=ptr[7]; if(temp & BIT15) printf("FASTSPNDE "); if(temp & BIT14) printf("RXFRTG "); if(temp & BIT13) printf("RDMD "); if(temp & BIT12) printf("RXDPOLL "); if(temp & BIT11) printf("STINT "); if(temp & BIT10) printf("STINTE "); if(temp & BIT9) printf("MREINT "); if(temp & BIT8) printf("MREINTE "); if(temp & BIT7) printf("MAPINT "); if(temp & BIT6) printf("MAPINTE "); if(temp & BIT5) printf("MCCINT "); if(temp & BIT4) printf("MCCINTE "); if(temp & BIT3) printf("MCCIINT "); if(temp & BIT2) printf("MCCIINTE "); if(temp & BIT1) printf("MIIPDTINT "); if(temp & BIT0) printf("MIIPDTINTE "); printf("\n"); printf("CSR15: Mode 0x%04x\n",ptr[15]); printf("CSR40: Current RX Byte Count 0x%04x\n",ptr[40]); printf("CSR41: Current RX Status 0x%04x\n",ptr[41]); printf("CSR42: Current TX Byte Count 0x%04x\n",ptr[42]); printf("CSR43: Current TX Status 0x%04x\n",ptr[43]); printf("CSR88: Chip ID Lower 0x%04x\n",ptr[88]); temp = (((ptr[89] << 16) | ptr[88]) >> 12) & 0xffff; switch (temp) { case 0x2420: printf(" PCnet/PCI 79C970\n"); break; case 0x2621: printf(" PCnet/PCI II 79C970A\n"); break; case 0x2623: printf(" PCnet/FAST 79C971\n"); break; case 0x2624: printf(" PCnet/FAST+ 79C972\n"); break; case 0x2625: printf(" PCnet/FAST III 79C973\n"); break; case 0x2626: printf(" PCnet/Home 79C978\n"); break; case 0x2627: printf(" PCnet/FAST III 79C975\n"); break; case 0x2628: printf(" PCnet/PRO 79C976\n"); break; } printf("CSR89: Chip ID Upper 0x%04x\n ",ptr[89]); temp=ptr[89]; printf("VER: %04x PARTIDU: %04x\n",temp >> 12,temp & 0x00000fff); printf("CSR112: Missed Frame Count 0x%04x\n",ptr[90]); /* 90 is 112 */ printf("CSR114: RX Collision Count 0x%04x\n",ptr[91]); printf("\n"); ptr=&data[100]; /* point to BCR 0 */ printf("BCR2: Misc. Configuration 0x%04x\n ",ptr[2]); temp=ptr[2]; if(temp & BIT14) printf("TMAULOOP "); if(temp & BIT12) printf("LEDPE "); if(temp & BIT8) printf("APROMWE "); if(temp & BIT7) printf("INTLEVEL "); if(temp & BIT3) printf("EADISEL "); if(temp & BIT2) printf("AWAKE "); if(temp & BIT1) printf("ASEL "); if(temp & BIT0) printf("XMAUSEL "); printf("\n"); printf("BCR9: Full-Duplex Control 0x%04x\n",ptr[9]); printf("BCR18: Burst and Bus Control 0x%04x\n",ptr[18]); printf("BCR19: EEPROM Control and Status 0x%04x\n ",ptr[19]); temp=ptr[19]; if(temp & BIT15) printf("PVALID "); if(temp & BIT13) printf("EEDET "); printf("\n"); printf("BCR23: PCI Subsystem Vendor ID 0x%04x\n",ptr[23]); printf("BCR24: PCI Subsystem ID 0x%04x\n",ptr[24]); printf("BCR31: Software Timer 0x%04x\n",ptr[31]); printf("BCR32: MII Control and Status 0x%04x\n",ptr[32]); printf("BCR35: PCI Vendor ID 0x%04x\n",ptr[35]); return(0); }