xref: /rk3399_rockchip-uboot/drivers/net/cs8900.h (revision 2439e4bfa111babf4bc07ba20efbf3e36036813e)
1*2439e4bfSJean-Christophe PLAGNIOL-VILLARD /*
2*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * Cirrus Logic CS8900A Ethernet
3*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  *
4*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2002
5*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
6*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * Marius Groeger <mgroeger@sysgo.de>
7*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  *
8*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * Copyright (C) 1999 Ben Williamson <benw@pobox.com>
9*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  *
10*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * See file CREDITS for list of people who contributed to this
11*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * project.
12*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  *
13*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * This program is loaded into SRAM in bootstrap mode, where it waits
14*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * for commands on UART1 to read and write memory, jump to code etc.
15*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * A design goal for this program is to be entirely independent of the
16*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * target board.  Anything with a CL-PS7111 or EP7211 should be able to run
17*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * this code in bootstrap mode.  All the board specifics can be handled on
18*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * the host.
19*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  *
20*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * This program is free software; you can redistribute it and/or modify
21*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * it under the terms of the GNU General Public License as published by
22*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * the Free Software Foundation; either version 2 of the License, or
23*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * (at your option) any later version.
24*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  *
25*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * This program is distributed in the hope that it will be useful,
26*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * GNU General Public License for more details.
29*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  *
30*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * You should have received a copy of the GNU General Public License
31*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * along with this program; if not, write to the Free Software
32*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
33*2439e4bfSJean-Christophe PLAGNIOL-VILLARD  */
34*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
35*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #include <asm/types.h>
36*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #include <config.h>
37*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
38*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_DRIVER_CS8900
39*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
40*2439e4bfSJean-Christophe PLAGNIOL-VILLARD /* although the registers are 16 bit, they are 32-bit aligned on the
41*2439e4bfSJean-Christophe PLAGNIOL-VILLARD    EDB7111. so we have to read them as 32-bit registers and ignore the
42*2439e4bfSJean-Christophe PLAGNIOL-VILLARD    upper 16-bits. i'm not sure if this holds for the EDB7211. */
43*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
44*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #ifdef CS8900_BUS16
45*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   /* 16 bit aligned registers, 16 bit wide */
46*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   #define CS8900_REG u16
47*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   #define CS8900_OFF 0x02
48*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   #define CS8900_BUS16_0  *(volatile u8 *)(CS8900_BASE+0x00)
49*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   #define CS8900_BUS16_1  *(volatile u8 *)(CS8900_BASE+0x01)
50*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #elif  defined(CS8900_BUS32)
51*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   /* 32 bit aligned registers, 16 bit wide (we ignore upper 16 bits) */
52*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   #define CS8900_REG u32
53*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   #define CS8900_OFF 0x04
54*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #else
55*2439e4bfSJean-Christophe PLAGNIOL-VILLARD   #error unknown bussize ...
56*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #endif
57*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
58*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define CS8900_RTDATA *(volatile CS8900_REG *)(CS8900_BASE+0x00*CS8900_OFF)
59*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define CS8900_TxCMD  *(volatile CS8900_REG *)(CS8900_BASE+0x02*CS8900_OFF)
60*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define CS8900_TxLEN  *(volatile CS8900_REG *)(CS8900_BASE+0x03*CS8900_OFF)
61*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define CS8900_ISQ    *(volatile CS8900_REG *)(CS8900_BASE+0x04*CS8900_OFF)
62*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define CS8900_PPTR   *(volatile CS8900_REG *)(CS8900_BASE+0x05*CS8900_OFF)
63*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define CS8900_PDATA  *(volatile CS8900_REG *)(CS8900_BASE+0x06*CS8900_OFF)
64*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
65*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
66*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define ISQ_RxEvent     0x04
67*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define ISQ_TxEvent     0x08
68*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define ISQ_BufEvent    0x0C
69*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define ISQ_RxMissEvent 0x10
70*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define ISQ_TxColEvent  0x12
71*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define ISQ_EventMask   0x3F
72*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
73*2439e4bfSJean-Christophe PLAGNIOL-VILLARD /* packet page register offsets */
74*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
75*2439e4bfSJean-Christophe PLAGNIOL-VILLARD /* bus interface registers */
76*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_ChipID    0x0000  /* Chip identifier - must be 0x630E */
77*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_ChipRev   0x0002  /* Chip revision, model codes */
78*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
79*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_IntReg    0x0022  /* Interrupt configuration */
80*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_IntReg_IRQ0         0x0000  /* Use INTR0 pin */
81*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_IntReg_IRQ1         0x0001  /* Use INTR1 pin */
82*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_IntReg_IRQ2         0x0002  /* Use INTR2 pin */
83*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_IntReg_IRQ3         0x0003  /* Use INTR3 pin */
84*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
85*2439e4bfSJean-Christophe PLAGNIOL-VILLARD /* status and control registers */
86*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
87*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG     0x0102  /* Receiver configuration */
88*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_Skip1         0x0040  /* Skip (i.e. discard) current frame */
89*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_Stream        0x0080  /* Enable streaming mode */
90*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_RxOK          0x0100  /* RxOK interrupt enable */
91*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_RxDMAonly     0x0200  /* Use RxDMA for all frames */
92*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_AutoRxDMA     0x0400  /* Select RxDMA automatically */
93*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_BufferCRC     0x0800  /* Include CRC characters in frame */
94*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_CRC           0x1000  /* Enable interrupt on CRC error */
95*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_RUNT          0x2000  /* Enable interrupt on RUNT frames */
96*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCFG_EXTRA         0x4000  /* Enable interrupt on frames with extra data */
97*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
98*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL     0x0104  /* Receiver control */
99*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_IAHash        0x0040  /* Accept frames that match hash */
100*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_Promiscuous   0x0080  /* Accept any frame */
101*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_RxOK          0x0100  /* Accept well formed frames */
102*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_Multicast     0x0200  /* Accept multicast frames */
103*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_IA            0x0400  /* Accept frame that matches IA */
104*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_Broadcast     0x0800  /* Accept broadcast frames */
105*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_CRC           0x1000  /* Accept frames with bad CRC */
106*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_RUNT          0x2000  /* Accept runt frames */
107*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxCTL_EXTRA         0x4000  /* Accept frames that are too long */
108*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
109*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCFG     0x0106  /* Transmit configuration */
110*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCFG_CRS           0x0040  /* Enable interrupt on loss of carrier */
111*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCFG_SQE           0x0080  /* Enable interrupt on Signal Quality Error */
112*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCFG_TxOK          0x0100  /* Enable interrupt on successful xmits */
113*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCFG_Late          0x0200  /* Enable interrupt on "out of window" */
114*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCFG_Jabber        0x0400  /* Enable interrupt on jabber detect */
115*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCFG_Collision     0x0800  /* Enable interrupt if collision */
116*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCFG_16Collisions  0x8000  /* Enable interrupt if > 16 collisions */
117*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
118*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd     0x0108  /* Transmit command status */
119*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd_TxStart_5     0x0000  /* Start after 5 bytes in buffer */
120*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd_TxStart_381   0x0040  /* Start after 381 bytes in buffer */
121*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd_TxStart_1021  0x0080  /* Start after 1021 bytes in buffer */
122*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd_TxStart_Full  0x00C0  /* Start after all bytes loaded */
123*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd_Force         0x0100  /* Discard any pending packets */
124*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd_OneCollision  0x0200  /* Abort after a single collision */
125*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd_NoCRC         0x1000  /* Do not add CRC */
126*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCmd_NoPad         0x2000  /* Do not pad short packets */
127*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
128*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG    0x010A  /* Buffer configuration */
129*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_SWI          0x0040  /* Force interrupt via software */
130*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_RxDMA        0x0080  /* Enable interrupt on Rx DMA */
131*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_TxRDY        0x0100  /* Enable interrupt when ready for Tx */
132*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_TxUE         0x0200  /* Enable interrupt in Tx underrun */
133*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_RxMiss       0x0400  /* Enable interrupt on missed Rx packets */
134*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_Rx128        0x0800  /* Enable Rx interrupt after 128 bytes */
135*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_TxCol        0x1000  /* Enable int on Tx collision ctr overflow */
136*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_Miss         0x2000  /* Enable int on Rx miss ctr overflow */
137*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BufCFG_RxDest       0x8000  /* Enable int on Rx dest addr match */
138*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
139*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL   0x0112  /* Line control */
140*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL_Rx          0x0040  /* Enable receiver */
141*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL_Tx          0x0080  /* Enable transmitter */
142*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL_AUIonly     0x0100  /* AUI interface only */
143*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL_AutoAUI10BT 0x0200  /* Autodetect AUI or 10BaseT interface */
144*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL_ModBackoffE 0x0800  /* Enable modified backoff algorithm */
145*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL_PolarityDis 0x1000  /* Disable Rx polarity autodetect */
146*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL_2partDefDis 0x2000  /* Disable two-part defferal */
147*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineCTL_LoRxSquelch 0x4000  /* Reduce receiver squelch threshold */
148*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
149*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL   0x0114  /* Chip self control */
150*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL_Reset       0x0040  /* Self-clearing reset */
151*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL_SWSuspend   0x0100  /* Initiate suspend mode */
152*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL_HWSleepE    0x0200  /* Enable SLEEP input */
153*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL_HWStandbyE  0x0400  /* Enable standby mode */
154*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL_HC0E        0x1000  /* use HCB0 for LINK LED */
155*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL_HC1E        0x2000  /* use HCB1 for BSTATUS LED */
156*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL_HCB0        0x4000  /* control LINK LED if HC0E set */
157*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfCTL_HCB1        0x8000  /* control BSTATUS LED if HC1E set */
158*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
159*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL    0x0116  /* Bus control */
160*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL_ResetRxDMA   0x0040  /* Reset RxDMA pointer */
161*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL_DMAextend    0x0100  /* Extend DMA cycle */
162*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL_UseSA        0x0200  /* Assert MEMCS16 on address decode */
163*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL_MemoryE      0x0400  /* Enable memory mode */
164*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL_DMAburst     0x0800  /* Limit DMA access burst */
165*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL_IOCHRDYE     0x1000  /* Set IOCHRDY high impedence */
166*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL_RxDMAsize    0x2000  /* Set DMA buffer size 64KB */
167*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusCTL_EnableIRQ    0x8000  /* Generate interrupt on interrupt event */
168*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
169*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TestCTL   0x0118  /* Test control */
170*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TestCTL_DisableLT   0x0080  /* Disable link status */
171*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TestCTL_ENDECloop   0x0200  /* Internal loopback */
172*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TestCTL_AUIloop     0x0400  /* AUI loopback */
173*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TestCTL_DisBackoff  0x0800  /* Disable backoff algorithm */
174*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TestCTL_FDX         0x4000  /* Enable full duplex mode */
175*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
176*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_ISQ       0x0120  /* Interrupt Status Queue */
177*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
178*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER       0x0124  /* Receive event */
179*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_IAHash          0x0040  /* Frame hash match */
180*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_Dribble         0x0080  /* Frame had 1-7 extra bits after last byte */
181*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_RxOK            0x0100  /* Frame received with no errors */
182*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_Hashed          0x0200  /* Frame address hashed OK */
183*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_IA              0x0400  /* Frame address matched IA */
184*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_Broadcast       0x0800  /* Broadcast frame */
185*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_CRC             0x1000  /* Frame had CRC error */
186*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_RUNT            0x2000  /* Runt frame */
187*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RER_EXTRA           0x4000  /* Frame was too long */
188*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
189*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TER       0x0128 /* Transmit event */
190*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TER_CRS             0x0040  /* Carrier lost */
191*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TER_SQE             0x0080  /* Signal Quality Error */
192*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TER_TxOK            0x0100  /* Packet sent without error */
193*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TER_Late            0x0200  /* Out of window */
194*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TER_Jabber          0x0400  /* Stuck transmit? */
195*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TER_NumCollisions   0x7800  /* Number of collisions */
196*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TER_16Collisions    0x8000  /* > 16 collisions */
197*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
198*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BER       0x012C /* Buffer event */
199*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BER_SWint           0x0040 /* Software interrupt */
200*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BER_RxDMAFrame      0x0080 /* Received framed DMAed */
201*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BER_Rdy4Tx          0x0100 /* Ready for transmission */
202*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BER_TxUnderrun      0x0200 /* Transmit underrun */
203*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BER_RxMiss          0x0400 /* Received frame missed */
204*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BER_Rx128           0x0800 /* 128 bytes received */
205*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BER_RxDest          0x8000 /* Received framed passed address filter */
206*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
207*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_RxMiss    0x0130  /*  Receiver miss counter */
208*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
209*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCol     0x0132  /*  Transmit collision counter */
210*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
211*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineSTAT  0x0134  /* Line status */
212*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineSTAT_LinkOK     0x0080  /* Line is connected and working */
213*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineSTAT_AUI        0x0100  /* Connected via AUI */
214*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineSTAT_10BT       0x0200  /* Connected via twisted pair */
215*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineSTAT_Polarity   0x1000  /* Line polarity OK (10BT only) */
216*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LineSTAT_CRS        0x4000  /* Frame being received */
217*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
218*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfSTAT  0x0136  /* Chip self status */
219*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfSTAT_33VActive  0x0040  /* supply voltage is 3.3V */
220*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfSTAT_InitD      0x0080  /* Chip initialization complete */
221*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfSTAT_SIBSY      0x0100  /* EEPROM is busy */
222*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfSTAT_EEPROM     0x0200  /* EEPROM present */
223*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfSTAT_EEPROM_OK  0x0400  /* EEPROM checks out */
224*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfSTAT_ELPresent  0x0800  /* External address latch logic available */
225*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfSTAT_EEsize     0x1000  /* Size of EEPROM */
226*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
227*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusSTAT   0x0138  /* Bus status */
228*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusSTAT_TxBid       0x0080  /* Tx error */
229*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_BusSTAT_TxRDY       0x0100  /* Ready for Tx data */
230*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
231*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TDR       0x013C  /* AUI Time Domain Reflectometer */
232*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
233*2439e4bfSJean-Christophe PLAGNIOL-VILLARD /* initiate transmit registers */
234*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
235*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxCommand 0x0144  /* Tx Command */
236*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_TxLength  0x0146  /* Tx Length */
237*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
238*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
239*2439e4bfSJean-Christophe PLAGNIOL-VILLARD /* address filter registers */
240*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
241*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_LAF       0x0150  /* Logical address filter (6 bytes) */
242*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_IA        0x0158  /* Individual address (MAC) */
243*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
244*2439e4bfSJean-Christophe PLAGNIOL-VILLARD /* EEPROM Kram */
245*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define SI_BUSY 0x0100
246*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_SelfST 0x0136	/*  Self State register */
247*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_EECMD 0x0040		/*  NVR Interface Command register */
248*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define PP_EEData 0x0042	/*  NVR Interface Data Register */
249*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define EEPROM_WRITE_EN		0x00F0
250*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define EEPROM_WRITE_DIS	0x0000
251*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define EEPROM_WRITE_CMD	0x0100
252*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define EEPROM_READ_CMD		0x0200
253*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #define EEPROM_ERASE_CMD	0x0300
254*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
255*2439e4bfSJean-Christophe PLAGNIOL-VILLARD extern int cs8900_e2prom_read(uchar, ushort *);
256*2439e4bfSJean-Christophe PLAGNIOL-VILLARD extern int cs8900_e2prom_write(uchar, ushort);
257*2439e4bfSJean-Christophe PLAGNIOL-VILLARD 
258*2439e4bfSJean-Christophe PLAGNIOL-VILLARD #endif /* CONFIG_DRIVER_CS8900 */
259