upgrade wireless-tools and iproute2
[openwrt/svn-archive/archive.git] / openwrt / package / linux / kernel-source / include / bcmenet47xx.h
1 /*
2 * Hardware-specific definitions for
3 * Broadcom BCM47XX 10/100 Mbps Ethernet cores.
4 *
5 * Copyright 2004, Broadcom Corporation
6 * All Rights Reserved.
7 *
8 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
9 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
10 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
11 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
12 * $Id$
13 */
14
15 #ifndef _bcmenet_47xx_h_
16 #define _bcmenet_47xx_h_
17
18 #include <bcmdevs.h>
19 #include <hnddma.h>
20
21 #define BCMENET_NFILTERS 64 /* # ethernet address filter entries */
22 #define BCMENET_MCHASHBASE 0x200 /* multicast hash filter base address */
23 #define BCMENET_MCHASHSIZE 256 /* multicast hash filter size in bytes */
24 #define BCMENET_MAX_DMA 4096 /* chip has 12 bits of DMA addressing */
25
26 /* power management event wakeup pattern constants */
27 #define BCMENET_NPMP 4 /* chip supports 4 wakeup patterns */
28 #define BCMENET_PMPBASE 0x400 /* wakeup pattern base address */
29 #define BCMENET_PMPSIZE 0x80 /* 128bytes each pattern */
30 #define BCMENET_PMMBASE 0x600 /* wakeup mask base address */
31 #define BCMENET_PMMSIZE 0x10 /* 128bits each mask */
32
33 /* cpp contortions to concatenate w/arg prescan */
34 #ifndef PAD
35 #define _PADLINE(line) pad ## line
36 #define _XSTR(line) _PADLINE(line)
37 #define PAD _XSTR(__LINE__)
38 #endif /* PAD */
39
40 /* sometimes you just need the enet mib definitions */
41 #include <bcmenetmib.h>
42
43 /*
44 * Host Interface Registers
45 */
46 typedef volatile struct _bcmenettregs {
47 /* Device and Power Control */
48 uint32 devcontrol;
49 uint32 PAD[2];
50 uint32 biststatus;
51 uint32 wakeuplength;
52 uint32 PAD[3];
53
54 /* Interrupt Control */
55 uint32 intstatus;
56 uint32 intmask;
57 uint32 gptimer;
58 uint32 PAD[23];
59
60 /* Ethernet MAC Address Filtering Control */
61 uint32 PAD[2];
62 uint32 enetftaddr;
63 uint32 enetftdata;
64 uint32 PAD[2];
65
66 /* Ethernet MAC Control */
67 uint32 emactxmaxburstlen;
68 uint32 emacrxmaxburstlen;
69 uint32 emaccontrol;
70 uint32 emacflowcontrol;
71
72 uint32 PAD[20];
73
74 /* DMA Lazy Interrupt Control */
75 uint32 intrecvlazy;
76 uint32 PAD[63];
77
78 /* DMA engine */
79 dmaregs_t dmaregs;
80 dmafifo_t dmafifo;
81 uint32 PAD[116];
82
83 /* EMAC Registers */
84 uint32 rxconfig;
85 uint32 rxmaxlength;
86 uint32 txmaxlength;
87 uint32 PAD;
88 uint32 mdiocontrol;
89 uint32 mdiodata;
90 uint32 emacintmask;
91 uint32 emacintstatus;
92 uint32 camdatalo;
93 uint32 camdatahi;
94 uint32 camcontrol;
95 uint32 enetcontrol;
96 uint32 txcontrol;
97 uint32 txwatermark;
98 uint32 mibcontrol;
99 uint32 PAD[49];
100
101 /* EMAC MIB counters */
102 bcmenetmib_t mib;
103
104 uint32 PAD[585];
105
106 /* Sonics SiliconBackplane config registers */
107 sbconfig_t sbconfig;
108 } bcmenetregs_t;
109
110 /* device control */
111 #define DC_PM ((uint32)1 << 7) /* pattern filtering enable */
112 #define DC_IP ((uint32)1 << 10) /* internal ephy present (rev >= 1) */
113 #define DC_ER ((uint32)1 << 15) /* ephy reset */
114 #define DC_MP ((uint32)1 << 16) /* mii phy mode enable */
115 #define DC_CO ((uint32)1 << 17) /* mii phy mode: enable clocks */
116 #define DC_PA_MASK 0x7c0000 /* mii phy mode: mdc/mdio phy address */
117 #define DC_PA_SHIFT 18
118
119 /* wakeup length */
120 #define WL_P0_MASK 0x7f /* pattern 0 */
121 #define WL_D0 ((uint32)1 << 7)
122 #define WL_P1_MASK 0x7f00 /* pattern 1 */
123 #define WL_P1_SHIFT 8
124 #define WL_D1 ((uint32)1 << 15)
125 #define WL_P2_MASK 0x7f0000 /* pattern 2 */
126 #define WL_P2_SHIFT 16
127 #define WL_D2 ((uint32)1 << 23)
128 #define WL_P3_MASK 0x7f000000 /* pattern 3 */
129 #define WL_P3_SHIFT 24
130 #define WL_D3 ((uint32)1 << 31)
131
132 /* intstatus and intmask */
133 #define I_PME ((uint32)1 << 6) /* power management event */
134 #define I_TO ((uint32)1 << 7) /* general purpose timeout */
135 #define I_PC ((uint32)1 << 10) /* descriptor error */
136 #define I_PD ((uint32)1 << 11) /* data error */
137 #define I_DE ((uint32)1 << 12) /* descriptor protocol error */
138 #define I_RU ((uint32)1 << 13) /* receive descriptor underflow */
139 #define I_RO ((uint32)1 << 14) /* receive fifo overflow */
140 #define I_XU ((uint32)1 << 15) /* transmit fifo underflow */
141 #define I_RI ((uint32)1 << 16) /* receive interrupt */
142 #define I_XI ((uint32)1 << 24) /* transmit interrupt */
143 #define I_EM ((uint32)1 << 26) /* emac interrupt */
144 #define I_MW ((uint32)1 << 27) /* mii write */
145 #define I_MR ((uint32)1 << 28) /* mii read */
146
147 /* emaccontrol */
148 #define EMC_CG ((uint32)1 << 0) /* crc32 generation enable */
149 #define EMC_EP ((uint32)1 << 2) /* onchip ephy: powerdown (rev >= 1) */
150 #define EMC_ED ((uint32)1 << 3) /* onchip ephy: energy detected (rev >= 1) */
151 #define EMC_LC_MASK 0xe0 /* onchip ephy: led control (rev >= 1) */
152 #define EMC_LC_SHIFT 5
153
154 /* emacflowcontrol */
155 #define EMF_RFH_MASK 0xff /* rx fifo hi water mark */
156 #define EMF_PG ((uint32)1 << 15) /* enable pause frame generation */
157
158 /* interrupt receive lazy */
159 #define IRL_TO_MASK 0x00ffffff /* timeout */
160 #define IRL_FC_MASK 0xff000000 /* frame count */
161 #define IRL_FC_SHIFT 24 /* frame count */
162
163 /* emac receive config */
164 #define ERC_DB ((uint32)1 << 0) /* disable broadcast */
165 #define ERC_AM ((uint32)1 << 1) /* accept all multicast */
166 #define ERC_RDT ((uint32)1 << 2) /* receive disable while transmitting */
167 #define ERC_PE ((uint32)1 << 3) /* promiscuous enable */
168 #define ERC_LE ((uint32)1 << 4) /* loopback enable */
169 #define ERC_FE ((uint32)1 << 5) /* enable flow control */
170 #define ERC_UF ((uint32)1 << 6) /* accept unicast flow control frame */
171 #define ERC_RF ((uint32)1 << 7) /* reject filter */
172
173 /* emac mdio control */
174 #define MC_MF_MASK 0x7f /* mdc frequency */
175 #define MC_PE ((uint32)1 << 7) /* mii preamble enable */
176
177 /* emac mdio data */
178 #define MD_DATA_MASK 0xffff /* r/w data */
179 #define MD_TA_MASK 0x30000 /* turnaround value */
180 #define MD_TA_SHIFT 16
181 #define MD_TA_VALID (2 << MD_TA_SHIFT) /* valid ta */
182 #define MD_RA_MASK 0x7c0000 /* register address */
183 #define MD_RA_SHIFT 18
184 #define MD_PMD_MASK 0xf800000 /* physical media device */
185 #define MD_PMD_SHIFT 23
186 #define MD_OP_MASK 0x30000000 /* opcode */
187 #define MD_OP_SHIFT 28
188 #define MD_OP_WRITE (1 << MD_OP_SHIFT) /* write op */
189 #define MD_OP_READ (2 << MD_OP_SHIFT) /* read op */
190 #define MD_SB_MASK 0xc0000000 /* start bits */
191 #define MD_SB_SHIFT 30
192 #define MD_SB_START (0x1 << MD_SB_SHIFT) /* start of frame */
193
194 /* emac intstatus and intmask */
195 #define EI_MII ((uint32)1 << 0) /* mii mdio interrupt */
196 #define EI_MIB ((uint32)1 << 1) /* mib interrupt */
197 #define EI_FLOW ((uint32)1 << 2) /* flow control interrupt */
198
199 /* emac cam data high */
200 #define CD_V ((uint32)1 << 16) /* valid bit */
201
202 /* emac cam control */
203 #define CC_CE ((uint32)1 << 0) /* cam enable */
204 #define CC_MS ((uint32)1 << 1) /* mask select */
205 #define CC_RD ((uint32)1 << 2) /* read */
206 #define CC_WR ((uint32)1 << 3) /* write */
207 #define CC_INDEX_MASK 0x3f0000 /* index */
208 #define CC_INDEX_SHIFT 16
209 #define CC_CB ((uint32)1 << 31) /* cam busy */
210
211 /* emac ethernet control */
212 #define EC_EE ((uint32)1 << 0) /* emac enable */
213 #define EC_ED ((uint32)1 << 1) /* emac disable */
214 #define EC_ES ((uint32)1 << 2) /* emac soft reset */
215 #define EC_EP ((uint32)1 << 3) /* external phy select */
216
217 /* emac transmit control */
218 #define EXC_FD ((uint32)1 << 0) /* full duplex */
219 #define EXC_FM ((uint32)1 << 1) /* flowmode */
220 #define EXC_SB ((uint32)1 << 2) /* single backoff enable */
221 #define EXC_SS ((uint32)1 << 3) /* small slottime */
222
223 /* emac mib control */
224 #define EMC_RZ ((uint32)1 << 0) /* autoclear on read */
225
226 /* sometimes you just need the enet rxheader definitions */
227 #include <bcmenetrxh.h>
228
229 #endif /* _bcmenet_47xx_h_ */