1*8044SWilliam.Kucharski@Sun.COM /* -*- Mode:C; c-basic-offset:4; -*- */ 2*8044SWilliam.Kucharski@Sun.COM 3*8044SWilliam.Kucharski@Sun.COM /* Definitions for SiS ethernet controllers including 7014/7016 and 900 4*8044SWilliam.Kucharski@Sun.COM * References: 5*8044SWilliam.Kucharski@Sun.COM * SiS 7016 Fast Ethernet PCI Bus 10/100 Mbps LAN Controller with OnNow Support, 6*8044SWilliam.Kucharski@Sun.COM * preliminary Rev. 1.0 Jan. 14, 1998 7*8044SWilliam.Kucharski@Sun.COM * SiS 900 Fast Ethernet PCI Bus 10/100 Mbps LAN Single Chip with OnNow Support, 8*8044SWilliam.Kucharski@Sun.COM * preliminary Rev. 1.0 Nov. 10, 1998 9*8044SWilliam.Kucharski@Sun.COM * SiS 7014 Single Chip 100BASE-TX/10BASE-T Physical Layer Solution, 10*8044SWilliam.Kucharski@Sun.COM * preliminary Rev. 1.0 Jan. 18, 1998 11*8044SWilliam.Kucharski@Sun.COM * http://www.sis.com.tw/support/databook.htm 12*8044SWilliam.Kucharski@Sun.COM */ 13*8044SWilliam.Kucharski@Sun.COM 14*8044SWilliam.Kucharski@Sun.COM /* MAC operationl registers of SiS 7016 and SiS 900 ethernet controller */ 15*8044SWilliam.Kucharski@Sun.COM /* The I/O extent, SiS 900 needs 256 bytes of io address */ 16*8044SWilliam.Kucharski@Sun.COM #define SIS900_TOTAL_SIZE 0x100 17*8044SWilliam.Kucharski@Sun.COM 18*8044SWilliam.Kucharski@Sun.COM /* Symbolic offsets to registers. */ 19*8044SWilliam.Kucharski@Sun.COM enum sis900_registers { 20*8044SWilliam.Kucharski@Sun.COM cr=0x0, /* Command Register */ 21*8044SWilliam.Kucharski@Sun.COM cfg=0x4, /* Configuration Register */ 22*8044SWilliam.Kucharski@Sun.COM mear=0x8, /* EEPROM Access Register */ 23*8044SWilliam.Kucharski@Sun.COM ptscr=0xc, /* PCI Test Control Register */ 24*8044SWilliam.Kucharski@Sun.COM isr=0x10, /* Interrupt Status Register */ 25*8044SWilliam.Kucharski@Sun.COM imr=0x14, /* Interrupt Mask Register */ 26*8044SWilliam.Kucharski@Sun.COM ier=0x18, /* Interrupt Enable Register */ 27*8044SWilliam.Kucharski@Sun.COM epar=0x18, /* Enhanced PHY Access Register */ 28*8044SWilliam.Kucharski@Sun.COM txdp=0x20, /* Transmit Descriptor Pointer Register */ 29*8044SWilliam.Kucharski@Sun.COM txcfg=0x24, /* Transmit Configuration Register */ 30*8044SWilliam.Kucharski@Sun.COM rxdp=0x30, /* Receive Descriptor Pointer Register */ 31*8044SWilliam.Kucharski@Sun.COM rxcfg=0x34, /* Receive Configuration Register */ 32*8044SWilliam.Kucharski@Sun.COM flctrl=0x38, /* Flow Control Register */ 33*8044SWilliam.Kucharski@Sun.COM rxlen=0x3c, /* Receive Packet Length Register */ 34*8044SWilliam.Kucharski@Sun.COM rfcr=0x48, /* Receive Filter Control Register */ 35*8044SWilliam.Kucharski@Sun.COM rfdr=0x4C, /* Receive Filter Data Register */ 36*8044SWilliam.Kucharski@Sun.COM pmctrl=0xB0, /* Power Management Control Register */ 37*8044SWilliam.Kucharski@Sun.COM pmer=0xB4 /* Power Management Wake-up Event Register */ 38*8044SWilliam.Kucharski@Sun.COM }; 39*8044SWilliam.Kucharski@Sun.COM 40*8044SWilliam.Kucharski@Sun.COM /* Symbolic names for bits in various registers */ 41*8044SWilliam.Kucharski@Sun.COM enum sis900_command_register_bits { 42*8044SWilliam.Kucharski@Sun.COM RELOAD = 0x00000400, 43*8044SWilliam.Kucharski@Sun.COM ACCESSMODE = 0x00000200, 44*8044SWilliam.Kucharski@Sun.COM RESET = 0x00000100, 45*8044SWilliam.Kucharski@Sun.COM SWI = 0x00000080, 46*8044SWilliam.Kucharski@Sun.COM RxRESET = 0x00000020, 47*8044SWilliam.Kucharski@Sun.COM TxRESET = 0x00000010, 48*8044SWilliam.Kucharski@Sun.COM RxDIS = 0x00000008, 49*8044SWilliam.Kucharski@Sun.COM RxENA = 0x00000004, 50*8044SWilliam.Kucharski@Sun.COM TxDIS = 0x00000002, 51*8044SWilliam.Kucharski@Sun.COM TxENA = 0x00000001 52*8044SWilliam.Kucharski@Sun.COM }; 53*8044SWilliam.Kucharski@Sun.COM 54*8044SWilliam.Kucharski@Sun.COM enum sis900_configuration_register_bits { 55*8044SWilliam.Kucharski@Sun.COM DESCRFMT = 0x00000100, /* 7016 specific */ 56*8044SWilliam.Kucharski@Sun.COM REQALG = 0x00000080, 57*8044SWilliam.Kucharski@Sun.COM SB = 0x00000040, 58*8044SWilliam.Kucharski@Sun.COM POW = 0x00000020, 59*8044SWilliam.Kucharski@Sun.COM EXD = 0x00000010, 60*8044SWilliam.Kucharski@Sun.COM PESEL = 0x00000008, 61*8044SWilliam.Kucharski@Sun.COM LPM = 0x00000004, 62*8044SWilliam.Kucharski@Sun.COM BEM = 0x00000001, 63*8044SWilliam.Kucharski@Sun.COM RND_CNT = 0x00000400, 64*8044SWilliam.Kucharski@Sun.COM FAIR_BACKOFF = 0x00000200, 65*8044SWilliam.Kucharski@Sun.COM EDB_MASTER_EN = 0x00002000 66*8044SWilliam.Kucharski@Sun.COM }; 67*8044SWilliam.Kucharski@Sun.COM 68*8044SWilliam.Kucharski@Sun.COM enum sis900_eeprom_access_reigster_bits { 69*8044SWilliam.Kucharski@Sun.COM MDC = 0x00000040, 70*8044SWilliam.Kucharski@Sun.COM MDDIR = 0x00000020, 71*8044SWilliam.Kucharski@Sun.COM MDIO = 0x00000010, /* 7016 specific */ 72*8044SWilliam.Kucharski@Sun.COM EECS = 0x00000008, 73*8044SWilliam.Kucharski@Sun.COM EECLK = 0x00000004, 74*8044SWilliam.Kucharski@Sun.COM EEDO = 0x00000002, 75*8044SWilliam.Kucharski@Sun.COM EEDI = 0x00000001 76*8044SWilliam.Kucharski@Sun.COM }; 77*8044SWilliam.Kucharski@Sun.COM 78*8044SWilliam.Kucharski@Sun.COM enum sis900_interrupt_register_bits { 79*8044SWilliam.Kucharski@Sun.COM WKEVT = 0x10000000, 80*8044SWilliam.Kucharski@Sun.COM TxPAUSEEND = 0x08000000, 81*8044SWilliam.Kucharski@Sun.COM TxPAUSE = 0x04000000, 82*8044SWilliam.Kucharski@Sun.COM TxRCMP = 0x02000000, 83*8044SWilliam.Kucharski@Sun.COM RxRCMP = 0x01000000, 84*8044SWilliam.Kucharski@Sun.COM DPERR = 0x00800000, 85*8044SWilliam.Kucharski@Sun.COM SSERR = 0x00400000, 86*8044SWilliam.Kucharski@Sun.COM RMABT = 0x00200000, 87*8044SWilliam.Kucharski@Sun.COM RTABT = 0x00100000, 88*8044SWilliam.Kucharski@Sun.COM RxSOVR = 0x00010000, 89*8044SWilliam.Kucharski@Sun.COM HIBERR = 0x00008000, 90*8044SWilliam.Kucharski@Sun.COM SWINT = 0x00001000, 91*8044SWilliam.Kucharski@Sun.COM MIBINT = 0x00000800, 92*8044SWilliam.Kucharski@Sun.COM TxURN = 0x00000400, 93*8044SWilliam.Kucharski@Sun.COM TxIDLE = 0x00000200, 94*8044SWilliam.Kucharski@Sun.COM TxERR = 0x00000100, 95*8044SWilliam.Kucharski@Sun.COM TxDESC = 0x00000080, 96*8044SWilliam.Kucharski@Sun.COM TxOK = 0x00000040, 97*8044SWilliam.Kucharski@Sun.COM RxORN = 0x00000020, 98*8044SWilliam.Kucharski@Sun.COM RxIDLE = 0x00000010, 99*8044SWilliam.Kucharski@Sun.COM RxEARLY = 0x00000008, 100*8044SWilliam.Kucharski@Sun.COM RxERR = 0x00000004, 101*8044SWilliam.Kucharski@Sun.COM RxDESC = 0x00000002, 102*8044SWilliam.Kucharski@Sun.COM RxOK = 0x00000001 103*8044SWilliam.Kucharski@Sun.COM }; 104*8044SWilliam.Kucharski@Sun.COM 105*8044SWilliam.Kucharski@Sun.COM enum sis900_interrupt_enable_reigster_bits { 106*8044SWilliam.Kucharski@Sun.COM IE = 0x00000001 107*8044SWilliam.Kucharski@Sun.COM }; 108*8044SWilliam.Kucharski@Sun.COM 109*8044SWilliam.Kucharski@Sun.COM /* maximum dma burst fro transmission and receive*/ 110*8044SWilliam.Kucharski@Sun.COM #define MAX_DMA_RANGE 7 /* actually 0 means MAXIMUM !! */ 111*8044SWilliam.Kucharski@Sun.COM #define TxMXDMA_shift 20 112*8044SWilliam.Kucharski@Sun.COM #define RxMXDMA_shift 20 113*8044SWilliam.Kucharski@Sun.COM #define TX_DMA_BURST 0 114*8044SWilliam.Kucharski@Sun.COM #define RX_DMA_BURST 0 115*8044SWilliam.Kucharski@Sun.COM 116*8044SWilliam.Kucharski@Sun.COM enum sis900_tx_rx_dma{ 117*8044SWilliam.Kucharski@Sun.COM DMA_BURST_512 = 0, DMA_BURST_64 = 5 118*8044SWilliam.Kucharski@Sun.COM }; 119*8044SWilliam.Kucharski@Sun.COM 120*8044SWilliam.Kucharski@Sun.COM /* transmit FIFO threshholds */ 121*8044SWilliam.Kucharski@Sun.COM #define TX_FILL_THRESH 16 /* 1/4 FIFO size */ 122*8044SWilliam.Kucharski@Sun.COM #define TxFILLT_shift 8 123*8044SWilliam.Kucharski@Sun.COM #define TxDRNT_shift 0 124*8044SWilliam.Kucharski@Sun.COM #define TxDRNT_100 48 /* 3/4 FIFO size */ 125*8044SWilliam.Kucharski@Sun.COM #define TxDRNT_10 16 /* 1/2 FIFO size */ 126*8044SWilliam.Kucharski@Sun.COM 127*8044SWilliam.Kucharski@Sun.COM enum sis900_transmit_config_register_bits { 128*8044SWilliam.Kucharski@Sun.COM TxCSI = 0x80000000, 129*8044SWilliam.Kucharski@Sun.COM TxHBI = 0x40000000, 130*8044SWilliam.Kucharski@Sun.COM TxMLB = 0x20000000, 131*8044SWilliam.Kucharski@Sun.COM TxATP = 0x10000000, 132*8044SWilliam.Kucharski@Sun.COM TxIFG = 0x0C000000, 133*8044SWilliam.Kucharski@Sun.COM TxFILLT = 0x00003F00, 134*8044SWilliam.Kucharski@Sun.COM TxDRNT = 0x0000003F 135*8044SWilliam.Kucharski@Sun.COM }; 136*8044SWilliam.Kucharski@Sun.COM 137*8044SWilliam.Kucharski@Sun.COM /* recevie FIFO thresholds */ 138*8044SWilliam.Kucharski@Sun.COM #define RxDRNT_shift 1 139*8044SWilliam.Kucharski@Sun.COM #define RxDRNT_100 16 /* 1/2 FIFO size */ 140*8044SWilliam.Kucharski@Sun.COM #define RxDRNT_10 24 /* 3/4 FIFO size */ 141*8044SWilliam.Kucharski@Sun.COM 142*8044SWilliam.Kucharski@Sun.COM enum sis900_reveive_config_register_bits { 143*8044SWilliam.Kucharski@Sun.COM RxAEP = 0x80000000, 144*8044SWilliam.Kucharski@Sun.COM RxARP = 0x40000000, 145*8044SWilliam.Kucharski@Sun.COM RxATX = 0x10000000, 146*8044SWilliam.Kucharski@Sun.COM RxAJAB = 0x08000000, 147*8044SWilliam.Kucharski@Sun.COM RxDRNT = 0x0000007F 148*8044SWilliam.Kucharski@Sun.COM }; 149*8044SWilliam.Kucharski@Sun.COM 150*8044SWilliam.Kucharski@Sun.COM #define RFAA_shift 28 151*8044SWilliam.Kucharski@Sun.COM #define RFADDR_shift 16 152*8044SWilliam.Kucharski@Sun.COM 153*8044SWilliam.Kucharski@Sun.COM enum sis900_receive_filter_control_register_bits { 154*8044SWilliam.Kucharski@Sun.COM RFEN = 0x80000000, 155*8044SWilliam.Kucharski@Sun.COM RFAAB = 0x40000000, 156*8044SWilliam.Kucharski@Sun.COM RFAAM = 0x20000000, 157*8044SWilliam.Kucharski@Sun.COM RFAAP = 0x10000000, 158*8044SWilliam.Kucharski@Sun.COM RFPromiscuous = (RFAAB|RFAAM|RFAAP) 159*8044SWilliam.Kucharski@Sun.COM }; 160*8044SWilliam.Kucharski@Sun.COM 161*8044SWilliam.Kucharski@Sun.COM enum sis900_reveive_filter_data_mask { 162*8044SWilliam.Kucharski@Sun.COM RFDAT = 0x0000FFFF 163*8044SWilliam.Kucharski@Sun.COM }; 164*8044SWilliam.Kucharski@Sun.COM 165*8044SWilliam.Kucharski@Sun.COM /* EEPROM Addresses */ 166*8044SWilliam.Kucharski@Sun.COM enum sis900_eeprom_address { 167*8044SWilliam.Kucharski@Sun.COM EEPROMSignature = 0x00, 168*8044SWilliam.Kucharski@Sun.COM EEPROMVendorID = 0x02, 169*8044SWilliam.Kucharski@Sun.COM EEPROMDeviceID = 0x03, 170*8044SWilliam.Kucharski@Sun.COM EEPROMMACAddr = 0x08, 171*8044SWilliam.Kucharski@Sun.COM EEPROMChecksum = 0x0b 172*8044SWilliam.Kucharski@Sun.COM }; 173*8044SWilliam.Kucharski@Sun.COM 174*8044SWilliam.Kucharski@Sun.COM /* The EEPROM commands include the alway-set leading bit. Refer to NM93Cxx datasheet */ 175*8044SWilliam.Kucharski@Sun.COM enum sis900_eeprom_command { 176*8044SWilliam.Kucharski@Sun.COM EEread = 0x0180, 177*8044SWilliam.Kucharski@Sun.COM EEwrite = 0x0140, 178*8044SWilliam.Kucharski@Sun.COM EEerase = 0x01C0, 179*8044SWilliam.Kucharski@Sun.COM EEwriteEnable = 0x0130, 180*8044SWilliam.Kucharski@Sun.COM EEwriteDisable = 0x0100, 181*8044SWilliam.Kucharski@Sun.COM EEeraseAll = 0x0120, 182*8044SWilliam.Kucharski@Sun.COM EEwriteAll = 0x0110, 183*8044SWilliam.Kucharski@Sun.COM EEaddrMask = 0x013F, 184*8044SWilliam.Kucharski@Sun.COM EEcmdShift = 16 185*8044SWilliam.Kucharski@Sun.COM }; 186*8044SWilliam.Kucharski@Sun.COM /* For SiS962 or SiS963, request the eeprom software access */ 187*8044SWilliam.Kucharski@Sun.COM enum sis96x_eeprom_command { 188*8044SWilliam.Kucharski@Sun.COM EEREQ = 0x00000400, EEDONE = 0x00000200, EEGNT = 0x00000100 189*8044SWilliam.Kucharski@Sun.COM }; 190*8044SWilliam.Kucharski@Sun.COM 191*8044SWilliam.Kucharski@Sun.COM /* Manamgement Data I/O (mdio) frame */ 192*8044SWilliam.Kucharski@Sun.COM #define MIIread 0x6000 193*8044SWilliam.Kucharski@Sun.COM #define MIIwrite 0x5002 194*8044SWilliam.Kucharski@Sun.COM #define MIIpmdShift 7 195*8044SWilliam.Kucharski@Sun.COM #define MIIregShift 2 196*8044SWilliam.Kucharski@Sun.COM #define MIIcmdLen 16 197*8044SWilliam.Kucharski@Sun.COM #define MIIcmdShift 16 198*8044SWilliam.Kucharski@Sun.COM 199*8044SWilliam.Kucharski@Sun.COM /* Buffer Descriptor Status*/ 200*8044SWilliam.Kucharski@Sun.COM enum sis900_buffer_status { 201*8044SWilliam.Kucharski@Sun.COM OWN = 0x80000000, 202*8044SWilliam.Kucharski@Sun.COM MORE = 0x40000000, 203*8044SWilliam.Kucharski@Sun.COM INTR = 0x20000000, 204*8044SWilliam.Kucharski@Sun.COM SUPCRC = 0x10000000, 205*8044SWilliam.Kucharski@Sun.COM INCCRC = 0x10000000, 206*8044SWilliam.Kucharski@Sun.COM OK = 0x08000000, 207*8044SWilliam.Kucharski@Sun.COM DSIZE = 0x00000FFF 208*8044SWilliam.Kucharski@Sun.COM }; 209*8044SWilliam.Kucharski@Sun.COM 210*8044SWilliam.Kucharski@Sun.COM /* Status for TX Buffers */ 211*8044SWilliam.Kucharski@Sun.COM enum sis900_tx_buffer_status { 212*8044SWilliam.Kucharski@Sun.COM ABORT = 0x04000000, 213*8044SWilliam.Kucharski@Sun.COM UNDERRUN = 0x02000000, 214*8044SWilliam.Kucharski@Sun.COM NOCARRIER = 0x01000000, 215*8044SWilliam.Kucharski@Sun.COM DEFERD = 0x00800000, 216*8044SWilliam.Kucharski@Sun.COM EXCDEFER = 0x00400000, 217*8044SWilliam.Kucharski@Sun.COM OWCOLL = 0x00200000, 218*8044SWilliam.Kucharski@Sun.COM EXCCOLL = 0x00100000, 219*8044SWilliam.Kucharski@Sun.COM COLCNT = 0x000F0000 220*8044SWilliam.Kucharski@Sun.COM }; 221*8044SWilliam.Kucharski@Sun.COM 222*8044SWilliam.Kucharski@Sun.COM enum sis900_rx_bufer_status { 223*8044SWilliam.Kucharski@Sun.COM OVERRUN = 0x02000000, 224*8044SWilliam.Kucharski@Sun.COM DEST = 0x00800000, 225*8044SWilliam.Kucharski@Sun.COM BCAST = 0x01800000, 226*8044SWilliam.Kucharski@Sun.COM MCAST = 0x01000000, 227*8044SWilliam.Kucharski@Sun.COM UNIMATCH = 0x00800000, 228*8044SWilliam.Kucharski@Sun.COM TOOLONG = 0x00400000, 229*8044SWilliam.Kucharski@Sun.COM RUNT = 0x00200000, 230*8044SWilliam.Kucharski@Sun.COM RXISERR = 0x00100000, 231*8044SWilliam.Kucharski@Sun.COM CRCERR = 0x00080000, 232*8044SWilliam.Kucharski@Sun.COM FAERR = 0x00040000, 233*8044SWilliam.Kucharski@Sun.COM LOOPBK = 0x00020000, 234*8044SWilliam.Kucharski@Sun.COM RXCOL = 0x00010000 235*8044SWilliam.Kucharski@Sun.COM }; 236*8044SWilliam.Kucharski@Sun.COM 237*8044SWilliam.Kucharski@Sun.COM /* MII register offsets */ 238*8044SWilliam.Kucharski@Sun.COM enum mii_registers { 239*8044SWilliam.Kucharski@Sun.COM MII_CONTROL = 0x0000, 240*8044SWilliam.Kucharski@Sun.COM MII_STATUS = 0x0001, 241*8044SWilliam.Kucharski@Sun.COM MII_PHY_ID0 = 0x0002, 242*8044SWilliam.Kucharski@Sun.COM MII_PHY_ID1 = 0x0003, 243*8044SWilliam.Kucharski@Sun.COM MII_ANADV = 0x0004, 244*8044SWilliam.Kucharski@Sun.COM MII_ANLPAR = 0x0005, 245*8044SWilliam.Kucharski@Sun.COM MII_ANEXT = 0x0006 246*8044SWilliam.Kucharski@Sun.COM }; 247*8044SWilliam.Kucharski@Sun.COM 248*8044SWilliam.Kucharski@Sun.COM /* mii registers specific to SiS 900 */ 249*8044SWilliam.Kucharski@Sun.COM enum sis_mii_registers { 250*8044SWilliam.Kucharski@Sun.COM MII_CONFIG1 = 0x0010, 251*8044SWilliam.Kucharski@Sun.COM MII_CONFIG2 = 0x0011, 252*8044SWilliam.Kucharski@Sun.COM MII_STSOUT = 0x0012, 253*8044SWilliam.Kucharski@Sun.COM MII_MASK = 0x0013, 254*8044SWilliam.Kucharski@Sun.COM MII_RESV = 0x0014 255*8044SWilliam.Kucharski@Sun.COM }; 256*8044SWilliam.Kucharski@Sun.COM 257*8044SWilliam.Kucharski@Sun.COM /* mii registers specific to AMD 79C901 */ 258*8044SWilliam.Kucharski@Sun.COM enum amd_mii_registers { 259*8044SWilliam.Kucharski@Sun.COM MII_STATUS_SUMMARY = 0x0018 260*8044SWilliam.Kucharski@Sun.COM }; 261*8044SWilliam.Kucharski@Sun.COM 262*8044SWilliam.Kucharski@Sun.COM /* mii registers specific to ICS 1893 */ 263*8044SWilliam.Kucharski@Sun.COM enum ics_mii_registers { 264*8044SWilliam.Kucharski@Sun.COM MII_EXTCTRL = 0x0010, MII_QPDSTS = 0x0011, MII_10BTOP = 0x0012, 265*8044SWilliam.Kucharski@Sun.COM MII_EXTCTRL2 = 0x0013 266*8044SWilliam.Kucharski@Sun.COM }; 267*8044SWilliam.Kucharski@Sun.COM 268*8044SWilliam.Kucharski@Sun.COM 269*8044SWilliam.Kucharski@Sun.COM 270*8044SWilliam.Kucharski@Sun.COM /* MII Control register bit definitions. */ 271*8044SWilliam.Kucharski@Sun.COM enum mii_control_register_bits { 272*8044SWilliam.Kucharski@Sun.COM MII_CNTL_FDX = 0x0100, 273*8044SWilliam.Kucharski@Sun.COM MII_CNTL_RST_AUTO = 0x0200, 274*8044SWilliam.Kucharski@Sun.COM MII_CNTL_ISOLATE = 0x0400, 275*8044SWilliam.Kucharski@Sun.COM MII_CNTL_PWRDWN = 0x0800, 276*8044SWilliam.Kucharski@Sun.COM MII_CNTL_AUTO = 0x1000, 277*8044SWilliam.Kucharski@Sun.COM MII_CNTL_SPEED = 0x2000, 278*8044SWilliam.Kucharski@Sun.COM MII_CNTL_LPBK = 0x4000, 279*8044SWilliam.Kucharski@Sun.COM MII_CNTL_RESET = 0x8000 280*8044SWilliam.Kucharski@Sun.COM }; 281*8044SWilliam.Kucharski@Sun.COM 282*8044SWilliam.Kucharski@Sun.COM /* MII Status register bit */ 283*8044SWilliam.Kucharski@Sun.COM enum mii_status_register_bits { 284*8044SWilliam.Kucharski@Sun.COM MII_STAT_EXT = 0x0001, 285*8044SWilliam.Kucharski@Sun.COM MII_STAT_JAB = 0x0002, 286*8044SWilliam.Kucharski@Sun.COM MII_STAT_LINK = 0x0004, 287*8044SWilliam.Kucharski@Sun.COM MII_STAT_CAN_AUTO = 0x0008, 288*8044SWilliam.Kucharski@Sun.COM MII_STAT_FAULT = 0x0010, 289*8044SWilliam.Kucharski@Sun.COM MII_STAT_AUTO_DONE = 0x0020, 290*8044SWilliam.Kucharski@Sun.COM MII_STAT_CAN_T = 0x0800, 291*8044SWilliam.Kucharski@Sun.COM MII_STAT_CAN_T_FDX = 0x1000, 292*8044SWilliam.Kucharski@Sun.COM MII_STAT_CAN_TX = 0x2000, 293*8044SWilliam.Kucharski@Sun.COM MII_STAT_CAN_TX_FDX = 0x4000, 294*8044SWilliam.Kucharski@Sun.COM MII_STAT_CAN_T4 = 0x8000 295*8044SWilliam.Kucharski@Sun.COM }; 296*8044SWilliam.Kucharski@Sun.COM 297*8044SWilliam.Kucharski@Sun.COM #define MII_ID1_OUI_LO 0xFC00 /* low bits of OUI mask */ 298*8044SWilliam.Kucharski@Sun.COM #define MII_ID1_MODEL 0x03F0 /* model number */ 299*8044SWilliam.Kucharski@Sun.COM #define MII_ID1_REV 0x000F /* model number */ 300*8044SWilliam.Kucharski@Sun.COM 301*8044SWilliam.Kucharski@Sun.COM /* MII NWAY Register Bits ... 302*8044SWilliam.Kucharski@Sun.COM valid for the ANAR (Auto-Negotiation Advertisement) and 303*8044SWilliam.Kucharski@Sun.COM ANLPAR (Auto-Negotiation Link Partner) registers */ 304*8044SWilliam.Kucharski@Sun.COM enum mii_nway_register_bits { 305*8044SWilliam.Kucharski@Sun.COM MII_NWAY_NODE_SEL = 0x001f, 306*8044SWilliam.Kucharski@Sun.COM MII_NWAY_CSMA_CD = 0x0001, 307*8044SWilliam.Kucharski@Sun.COM MII_NWAY_T = 0x0020, 308*8044SWilliam.Kucharski@Sun.COM MII_NWAY_T_FDX = 0x0040, 309*8044SWilliam.Kucharski@Sun.COM MII_NWAY_TX = 0x0080, 310*8044SWilliam.Kucharski@Sun.COM MII_NWAY_TX_FDX = 0x0100, 311*8044SWilliam.Kucharski@Sun.COM MII_NWAY_T4 = 0x0200, 312*8044SWilliam.Kucharski@Sun.COM MII_NWAY_PAUSE = 0x0400, 313*8044SWilliam.Kucharski@Sun.COM MII_NWAY_RF = 0x2000, 314*8044SWilliam.Kucharski@Sun.COM MII_NWAY_ACK = 0x4000, 315*8044SWilliam.Kucharski@Sun.COM MII_NWAY_NP = 0x8000 316*8044SWilliam.Kucharski@Sun.COM }; 317*8044SWilliam.Kucharski@Sun.COM 318*8044SWilliam.Kucharski@Sun.COM enum mii_stsout_register_bits { 319*8044SWilliam.Kucharski@Sun.COM MII_STSOUT_LINK_FAIL = 0x4000, 320*8044SWilliam.Kucharski@Sun.COM MII_STSOUT_SPD = 0x0080, 321*8044SWilliam.Kucharski@Sun.COM MII_STSOUT_DPLX = 0x0040 322*8044SWilliam.Kucharski@Sun.COM }; 323*8044SWilliam.Kucharski@Sun.COM 324*8044SWilliam.Kucharski@Sun.COM enum mii_stsics_register_bits { 325*8044SWilliam.Kucharski@Sun.COM MII_STSICS_SPD = 0x8000, MII_STSICS_DPLX = 0x4000, 326*8044SWilliam.Kucharski@Sun.COM MII_STSICS_LINKSTS = 0x0001 327*8044SWilliam.Kucharski@Sun.COM }; 328*8044SWilliam.Kucharski@Sun.COM 329*8044SWilliam.Kucharski@Sun.COM enum mii_stssum_register_bits { 330*8044SWilliam.Kucharski@Sun.COM MII_STSSUM_LINK = 0x0008, 331*8044SWilliam.Kucharski@Sun.COM MII_STSSUM_DPLX = 0x0004, 332*8044SWilliam.Kucharski@Sun.COM MII_STSSUM_AUTO = 0x0002, 333*8044SWilliam.Kucharski@Sun.COM MII_STSSUM_SPD = 0x0001 334*8044SWilliam.Kucharski@Sun.COM }; 335*8044SWilliam.Kucharski@Sun.COM 336*8044SWilliam.Kucharski@Sun.COM enum sis900_revision_id { 337*8044SWilliam.Kucharski@Sun.COM SIS630A_900_REV = 0x80, SIS630E_900_REV = 0x81, 338*8044SWilliam.Kucharski@Sun.COM SIS630S_900_REV = 0x82, SIS630EA1_900_REV = 0x83, 339*8044SWilliam.Kucharski@Sun.COM SIS630ET_900_REV = 0x84, SIS635A_900_REV = 0x90, 340*8044SWilliam.Kucharski@Sun.COM SIS96x_900_REV = 0X91, SIS900B_900_REV = 0x03 341*8044SWilliam.Kucharski@Sun.COM }; 342*8044SWilliam.Kucharski@Sun.COM 343*8044SWilliam.Kucharski@Sun.COM enum sis630_revision_id { 344*8044SWilliam.Kucharski@Sun.COM SIS630A0 = 0x00, SIS630A1 = 0x01, 345*8044SWilliam.Kucharski@Sun.COM SIS630B0 = 0x10, SIS630B1 = 0x11 346*8044SWilliam.Kucharski@Sun.COM }; 347*8044SWilliam.Kucharski@Sun.COM 348*8044SWilliam.Kucharski@Sun.COM #define FDX_CAPABLE_DUPLEX_UNKNOWN 0 349*8044SWilliam.Kucharski@Sun.COM #define FDX_CAPABLE_HALF_SELECTED 1 350*8044SWilliam.Kucharski@Sun.COM #define FDX_CAPABLE_FULL_SELECTED 2 351*8044SWilliam.Kucharski@Sun.COM 352*8044SWilliam.Kucharski@Sun.COM #define HW_SPEED_UNCONFIG 0 353*8044SWilliam.Kucharski@Sun.COM #define HW_SPEED_HOME 1 354*8044SWilliam.Kucharski@Sun.COM #define HW_SPEED_10_MBPS 10 355*8044SWilliam.Kucharski@Sun.COM #define HW_SPEED_100_MBPS 100 356*8044SWilliam.Kucharski@Sun.COM #define HW_SPEED_DEFAULT (HW_SPEED_100_MBPS) 357*8044SWilliam.Kucharski@Sun.COM 358*8044SWilliam.Kucharski@Sun.COM #define CRC_SIZE 4 359*8044SWilliam.Kucharski@Sun.COM #define MAC_HEADER_SIZE 14 360*8044SWilliam.Kucharski@Sun.COM 361*8044SWilliam.Kucharski@Sun.COM #define TX_BUF_SIZE 1536 362*8044SWilliam.Kucharski@Sun.COM #define RX_BUF_SIZE 1536 363*8044SWilliam.Kucharski@Sun.COM 364*8044SWilliam.Kucharski@Sun.COM #define NUM_RX_DESC 4 /* Number of Rx descriptor registers. */ 365*8044SWilliam.Kucharski@Sun.COM 366*8044SWilliam.Kucharski@Sun.COM typedef unsigned char u8; 367*8044SWilliam.Kucharski@Sun.COM typedef signed char s8; 368*8044SWilliam.Kucharski@Sun.COM typedef unsigned short u16; 369*8044SWilliam.Kucharski@Sun.COM typedef signed short s16; 370*8044SWilliam.Kucharski@Sun.COM typedef unsigned int u32; 371*8044SWilliam.Kucharski@Sun.COM typedef signed int s32; 372*8044SWilliam.Kucharski@Sun.COM 373*8044SWilliam.Kucharski@Sun.COM /* Time in ticks before concluding the transmitter is hung. */ 374*8044SWilliam.Kucharski@Sun.COM #define TX_TIMEOUT (4*TICKS_PER_SEC) 375*8044SWilliam.Kucharski@Sun.COM 376*8044SWilliam.Kucharski@Sun.COM typedef struct _BufferDesc { 377*8044SWilliam.Kucharski@Sun.COM u32 link; 378*8044SWilliam.Kucharski@Sun.COM volatile u32 cmdsts; 379*8044SWilliam.Kucharski@Sun.COM u32 bufptr; 380*8044SWilliam.Kucharski@Sun.COM } BufferDesc; 381