You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
6.8 KiB
250 lines
6.8 KiB
/* 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);
|
|
}
|
|
|