source: umon/main/dev/smsc911x.h @ 87db514

Last change on this file since 87db514 was 87db514, checked in by Amar Takhar <amar@…>, on 04/16/15 at 19:26:21

Initial commit of the umon repository.

Prior to this three changes were made:

  • Remove umon_ prefix from parent directories.
  • Collapse main/target/ into main/
  • Remove ports/template/flashtest.scr.ucon script.
  • Property mode set to 100644
File size: 12.4 KB
Line 
1//==========================================================================
2//
3// smsc911x.h     
4//
5//
6// Author(s):    Jay Monkman <jtm@lopingdog.com>
7// Contributors:
8// Date:         06-07-2007
9// Description:  This file contains definitions for the SMSC 911x and 912x
10//               families of ethernet controllers.
11//
12//--------------------------------------------------------------------------
13
14// ------------------------------------------------------------------------
15// cpuio.h must provide SMSC911X_BASE_ADDRESS
16// defines
17#define SMSC_REG(_x_)         *(vulong *)(SMSC911X_BASE_ADDRESS + _x_)
18
19// ------------------------------------------------------------------------
20// Directly visible registers.
21#define RX_FIFO_PORT                    SMSC_REG(0x00)
22#define TX_FIFO_PORT                    SMSC_REG(0x20)
23#define RX_FIFO_PORT_INC                SMSC_REG(0x100)
24#define TX_FIFO_PORT_INC                SMSC_REG(0x120)
25#define RX_STATUS_FIFO_PORT             SMSC_REG(0x40)
26#define RX_STATUS_FIFO_PEEK             SMSC_REG(0x44)
27#define RX_STATUS_FF                    (1 << 30)
28#define RX_STATUS_PL_MASK               (0x3fff << 16)
29#define RX_STATUS_PL_SHIFT              (16)
30#define RX_STATUS_ES                    (1 << 15)
31#define RX_STATUS_BF                    (1 << 13)
32#define RX_STATUS_LE                    (1 << 12)
33#define RX_STATUS_RF                    (1 << 11)
34#define RX_STATUS_MF                    (1 << 10)
35#define RX_STATUS_FTL                   (1 <<  7)
36#define RX_STATUS_CS                    (1 <<  6)
37#define RX_STATUS_FT                    (1 <<  5)
38#define RX_STATUS_RWTO                  (1 <<  4)
39#define RX_STATUS_ME                    (1 <<  3)
40#define RX_STATUS_DB                    (1 <<  2)
41#define RX_STATUS_CE                    (1 <<  1)
42
43#define TX_STATUS_FIFO_PORT             SMSC_REG(0x48)
44#define TX_STATUS_FIFO_PEEK             SMSC_REG(0x4c)
45#define TX_STATUS_FIFO_ES               (1 << 15)
46#define TX_STATUS_FIFO_LOC              (1 << 11)
47#define TX_STATUS_FIFO_NC               (1 << 10)
48#define TX_STATUS_FIFO_LC               (1 <<  9)
49#define TX_STATUS_FIFO_EC               (1 <<  8)
50#define TX_STATUS_FIFO_ED               (1 <<  2)
51#define TX_STATUS_FIFO_UE               (1 <<  1)
52#define TX_STATUS_FIFO_D                (1 <<  0)
53#define TX_STATUS_FIFO_TAG_MASK          (0xffff << 16)
54
55#define ID_REV                          SMSC_REG(0x50)
56#define ID_REV_ID_MASK                  (0xffff << 16)
57#define ID_REV_CHIP_9118                (0x0115 << 16)
58#define ID_REV_CHIP_9211                (0x9211 << 16)
59#define ID_REV_CHIP_9215                (0x115A << 16)
60#define ID_REV_CHIP_9218                (0x118A << 16)
61#define ID_REV_REV_MASK                 (0xffff <<  0)
62
63#define INT_STS                         SMSC_REG(0x58)
64#define INT_STS_SW_INT                  (1 << 21)
65#define INT_STS_TXSTOP_INT              (1 << 25)
66#define INT_STS_RXSTOP_INT              (1 << 24)
67#define INT_STS_RXDFH_INT               (1 << 23)
68#define INT_STS_TIOC_INT                (1 << 21)
69#define INT_STS_RXD_INT                 (1 << 20)
70#define INT_STS_GPT_INT                 (1 << 19)
71#define INT_STS_PHY_INT                 (1 << 18)
72#define INT_STS_PMT_INT                 (1 << 17)
73#define INT_STS_TXSO_INT                (1 << 16)
74#define INT_STS_RWT_INT                 (1 << 15)
75#define INT_STS_RXE_INT                 (1 << 14)
76#define INT_STS_TXE_INT                 (1 << 13)
77#define INT_STS_TDFU_INT                (1 << 11)
78#define INT_STS_TDFO_INT                (1 << 10)
79#define INT_STS_TDFA_INT                (1 <<  9)
80#define INT_STS_TSFF_INT                (1 <<  8)
81#define INT_STS_TSFL_INT                (1 <<  7)
82#define INT_STS_RDXF_INT                (1 <<  6)
83#define INT_STS_RDFL_INT                (1 <<  5)
84#define INT_STS_RSFF_INT                (1 <<  4)
85#define INT_STS_RSFL_INT                (1 <<  3)
86#define INT_STS_GPIO2_INT               (1 <<  2)
87#define INT_STS_GPIO1_INT               (1 <<  1)
88#define INT_STS_GPIO0_INT               (1 <<  0)
89
90#define BYTE_TEST                       SMSC_REG(0x64)
91#define BYTE_TEST_VAL                   (0x87654321)
92
93#define FIFO_INT                        SMSC_REG(0x68)
94#define FIFO_INT_TDAL(x)                (((x) & 0xff) << 24)
95#define FIFO_INT_TSL(x)                 (((x) & 0xff) << 16)
96#define FIFO_INT_RDAL(x)                (((x) & 0xff) <<  8)
97#define FIFO_INT_RSL(x)                 (((x) & 0xff) <<  0)
98
99#define RX_CFG                          SMSC_REG(0x6c)
100#define RX_CFG_END_ALIGN4               (0 << 30)
101#define RX_CFG_END_ALIGN16              (1 << 30)
102#define RX_CFG_END_ALIGN32              (2 << 30)
103#define RX_CFG_FORCE_DISCARD            (1 << 15)
104#define RX_CFG_RXDOFF(x)                (((x) & 0x1f) << 8)
105
106#define TX_CFG                          SMSC_REG(0x70)
107#define TX_CFG_TXS_DUMP                 (1 << 15)
108#define TX_CFG_TXD_DUMP                 (1 << 14)
109#define TX_CFG_TXSAO                    (1 <<  2)
110#define TX_CFG_TX_ON                    (1 <<  1)
111#define TX_CFG_STOP_TX                  (1 <<  0)
112
113#define HW_CFG                          SMSC_REG(0x74)
114#define HW_CFG_TTM                      (1 << 21)
115#define HW_CFG_SF                       (1 << 20)
116#define HW_CFG_TX_FIF_SZ(x)             (((x) & 0xf) << 16)
117#define HW_CFG_TX_FIF_MASK              (0xf << 16)
118#define HW_CFG_TR(x)                    (((x) & 0x3) << 12)
119#define HW_CFG_PHY_CLK_MASK             (3 << 5)
120#define HW_CFG_PHY_CLK_INT              (0 << 5)
121#define HW_CFG_PHY_CLK_EXT              (1 << 5)
122#define HW_CFG_PHY_CLK_DIS              (2 << 5)
123#define HW_CFG_SMI_SEL                  (1 << 3)
124#define HW_CFG_EXT_PHY_EN               (1 << 2)
125#define HW_CFG_BITMD_32                 (1 << 2)
126#define HW_CFG_SRST_TO                  (1 << 1)
127#define HW_CFG_SRST                     (1 << 0)
128
129#define RX_DP_CTL                       SMSC_REG(0x78)
130#define RX_DP_RX_FFWD                   (1 << 31)
131
132#define RX_FIFO_INF                     SMSC_REG(0x7c)
133#define TX_FIFO_RXSUSED_MASK             (0x00ff << 16)
134#define TX_FIFO_RXDUSED_MASK             (0xffff <<  0)
135
136#define TX_FIFO_INF                     SMSC_REG(0x80)
137#define TX_FIFO_TXSUSED_MASK             (0x00ff << 16)
138#define TX_FIFO_TDFREE_MASK              (0xffff <<  0)
139
140#define PMT_CTRL                        SMSC_REG(0x84)
141#define PMT_CTRL_PM_MODE_D0             (0 << 12)
142#define PMT_CTRL_PM_MODE_D1             (1 << 12)
143#define PMT_CTRL_PM_MODE_D2             (2 << 12)
144#define PMT_CTRL_PHY_RST                (1 << 10)
145#define PMT_CTRL_WOL_EN                 (1 <<  9)
146#define PMT_CTRL_ED_EN                  (1 <<  8)
147#define PMT_CTRL_PME_TYPE               (1 <<  6)
148#define PMT_CTRL_WUPS_NONE              (0 <<  4)
149#define PMT_CTRL_WUPS_D2                (1 <<  4)
150#define PMT_CTRL_WUPS_D1                (2 <<  4)
151#define PMT_CTRL_WUPS_MULT              (3 <<  4)
152#define PMT_CTRL_PME_IND                (1 <<  3)
153#define PMT_CTRL_PME_POL                (1 <<  2)
154#define PMT_CTRL_PME_EN                 (1 <<  1)
155#define PMT_CTRL_PME_READY              (1 <<  0)
156
157#define GPIO_CFG                        SMSC_REG(0x88)
158#define GPIO_CFG_LED3_EN                (1 << 30)
159#define GPIO_CFG_LED2_EN                (1 << 29)
160#define GPIO_CFG_LED1_EN                (1 << 28)
161#define GPIO_CFG_GPIO_INT_POL(x)        (1 << (((x) & 0x3) + 24))
162#define GPIO_CFG_EEPR_EEPROM            (0 << 20)
163#define GPIO_CFG_GPIOBUF(x)             (1 << (((x) & 0x3) + 16))
164#define GPIO_CFG_GPIODIR(x)             (1 << (((x) & 0x3) + 8))
165
166#define GPT_CFG                         SMSC_REG(0x8c)
167#define GPT_CFG_TIMER_EN                (1 << 29)
168#define GPT_CFG_GPT_LOAD(x)             (((x) & 0xffff) << 0)
169
170#define GPT_CNT                         SMSC_REG(0x90)
171#define GPT_CNT_MASK                     (0xffff << 0)
172
173#define WORD_SWAP                       SMSC_REG(0x98)
174#define WORD_SWAP_BIG                   (0xFFFFFFFF)
175
176#define FREE_RUN                        SMSC_REG(0x9c)
177
178#define RX_DROP                         SMSC_REG(0xa0)
179
180#define MAC_CSR_CMD                    SMSC_REG(0xa4)
181#define MAC_CSR_CMD_CSR_BUSY           (0x80000000)
182#define MAC_CSR_CMD_RNW                (0x40000000)
183#define MAC_RD_CMD(x)                  (((x) & 0xff) | (MAC_CSR_CMD_CSR_BUSY |\
184                                                        MAC_CSR_CMD_RNW))
185#define MAC_WR_CMD(x)                  (((x) & 0xff) | (MAC_CSR_CMD_CSR_BUSY))
186
187#define MAC_CSR_DATA                   SMSC_REG(0xa8)
188
189#define AFC_CFG                        SMSC_REG(0xac)
190#define AFC_CFG_AFC_HI(x)              (((x) & 0xff) << 16)
191#define AFC_CFG_AFC_LO(x)              (((x) & 0xff) <<  8)
192#define AFC_CFG_BACK_DUR(x)            (((x) & 0xf) <<   4)
193#define AFC_CFG_FCMULT                 (1 << 3)
194#define AFC_CFG_FCBRD                  (1 << 2)
195#define AFC_CFG_FCADD                  (1 << 1)
196#define AFC_CFG_FCANY                  (1 << 0)
197
198#define E2P_CMD                         SMSC_REG(0xb0)
199#define E2P_DATA                        SMSC_REG(0xb4)
200
201// ----------------------------------------------------------
202// Registers available via MAC_CSR_CMD/MAC_CSR_DATA registers
203#define MAC_CR                (0x1)
204#define MAC_CR_RXALL          (1 << 31)
205#define MAC_CR_RCVOWN         (1 << 23)
206#define MAC_CR_LOOPBK         (1 << 21)
207#define MAC_CR_FDPX           (1 << 20)
208#define MAC_CR_MCPAS          (1 << 18)
209#define MAC_CR_PRMS           (1 << 18)
210#define MAC_CR_INVFILT        (1 << 17)
211#define MAC_CR_PASSBAD        (1 << 16)
212#define MAC_CR_HO             (1 << 15)
213#define MAC_CR_HPFILT         (1 << 13)
214#define MAC_CR_LCOLL          (1 << 12)
215#define MAC_CR_BCAST          (1 << 11)
216#define MAC_CR_DISRTY         (1 << 10)
217#define MAC_CR_PADSTR         (1 <<  8)
218#define MAC_CR_BOLMT10        (0 <<  6)
219#define MAC_CR_BOLMT8         (1 <<  6)
220#define MAC_CR_BOLMT4         (2 <<  6)
221#define MAC_CR_BOLMT1         (3 <<  6)
222#define MAC_CR_DFCHK          (1 <<  5)
223#define MAC_CR_TXEN           (1 <<  3)
224#define MAC_CR_RXEN           (1 <<  2)
225
226#define ADDRH                 (0x2)
227#define ADDRL                 (0x3)
228#define HASHH                 (0x4)
229#define HASHL                 (0x5)
230
231#define MII_ACC               (0x6)
232#define MII_ACC_ADDR(x)       (((x) & 0x1f) << 11)
233#define MII_ACC_REG(x)        (((x) & 0x1f) << 6)
234#define MII_ACC_WR            (1 << 1)
235#define MII_ACC_BUSY          (1 << 0)
236
237#define MII_DATA              (0x7)
238#define FLOW                  (0x8)
239#define VLAN1                 (0x9)
240#define VLAN2                 (0xa)
241#define WUFF                  (0xb)
242#define WUCSR                 (0xc)
243
244// ----------------------------------------------------------
245// PHY Registers
246#define PHY_BCR               0
247#define PHY_BCR_RESET         (1 << 15)
248#define PHY_BCR_LOOP          (1 << 14)
249#define PHY_BCR_SPEED         (1 << 13)
250#define PHY_BCR_ANE           (1 << 12)
251#define PHY_BCR_PD            (1 << 11)
252#define PHY_BCR_RAN           (1 <<  9)
253#define PHY_BCR_FD            (1 <<  8)
254#define PHY_BCR_CT            (1 <<  7)
255
256#define PHY_BSR               1
257#define PHY_PHY1              2
258#define PHY_PHY2              3
259#define PHY_ANAR              4
260#define PHY_ANAR_NP           (1 << 15)
261#define PHY_ANAR_RF           (1 << 13)
262#define PHY_ANAR_PAUSE(x)     (((x) & 0x3) << 10)
263#define PHY_ANAR_100T4        (1 << 9)
264#define PHY_ANAR_100TX_FD     (1 << 8)
265#define PHY_ANAR_100TX        (1 << 7)
266#define PHY_ANAR_10T_FD       (1 << 6)
267#define PHY_ANAR_10T          (1 << 5)
268#define PHY_ANAR_SF           (0x01)
269
270
271#define PHY_ANLPAR            5
272#define PHY_ANER              6
273#define PHY_MCSR             17
274#define PHY_SMR              18
275#define PHY_SCSI             27
276#define PHY_ISR              29
277#define PHY_IMR              30
278#define PHY_PSCSR            31
279
280
281// ----------------------------------------------------------
282// TX and RX command definitions
283#define TX_CMD_IC            (1 << 31)
284#define TX_CMD_BEA(x)        (((x) & 0x3) << 24)
285#define TX_CMD_DS(x)         (((x) & 0x1f) << 16)
286#define TX_CMD_FS            (1 << 13)
287#define TX_CMD_LS            (1 << 12)
288#define TX_CMD_BS(x)         (((x) & 0x7ff) << 0)
289#define TX_CMD_TAG(x)        (((x) & 0xffff) << 16)
290#define TX_CMD_CRCDIS        (1 << 13)
291#define TX_CMD_PKTLEN(x)     (((x) & 0x7ff) << 0)
292
293
294
295void smsc911x_reset(void);
296int smsc911x_rx(uchar *);
297int smsc911x_tx(uchar *, ulong);
298int smsc911x_init(void);
299void smsc911x_enable_promiscuous_reception(void);
300void smsc911x_disable_promiscuous_reception(void);
301void smsc911x_enable_multicast_reception(void);
302void smsc911x_disable_multicast_reception(void);
303void smsc911x_enable_broadcast_reception(void);
304void smsc911x_disable_broadcast_reception(void);
Note: See TracBrowser for help on using the repository browser.