source: rtems-libbsd/freebsd/sys/dev/ffec/if_ffecreg.h

6-freebsd-12
Last change on this file was bb80d9d, checked in by Sebastian Huber <sebastian.huber@…>, on 08/09/18 at 12:02:09

Update to FreeBSD head 2017-12-01

Git mirror commit e724f51f811a4b2bd29447f8b85ab5c2f9b88266.

Update #3472.

  • Property mode set to 100644
File size: 11.2 KB
Line 
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2013 Ian Lepore <ian@freebsd.org>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 */
29
30#ifndef IF_FFECREG_H
31#define IF_FFECREG_H
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD$");
35
36/*
37 * Hardware defines for Freescale Fast Ethernet Controller.
38 */
39
40/*
41 * MAC registers.
42 */
43#define FEC_IER_REG                     0x0004
44#define FEC_IEM_REG                     0x0008
45#define   FEC_IER_HBERR                   (1U << 31)
46#define   FEC_IER_BABR                    (1 << 30)
47#define   FEC_IER_BABT                    (1 << 29)
48#define   FEC_IER_GRA                     (1 << 28)
49#define   FEC_IER_TXF                     (1 << 27)
50#define   FEC_IER_TXB                     (1 << 26)
51#define   FEC_IER_RXF                     (1 << 25)
52#define   FEC_IER_RXB                     (1 << 24)
53#define   FEC_IER_MII                     (1 << 23)
54#define   FEC_IER_EBERR                   (1 << 22)
55#define   FEC_IER_LC                      (1 << 21)
56#define   FEC_IER_RL                      (1 << 20)
57#define   FEC_IER_UN                      (1 << 19)
58#define   FEC_IER_PLR                     (1 << 18)
59#define   FEC_IER_WAKEUP                  (1 << 17)
60#define   FEC_IER_AVAIL                   (1 << 16)
61#define   FEC_IER_TIMER                   (1 << 15)
62
63#define FEC_RDAR_REG                    0x0010
64#define   FEC_RDAR_RDAR                   (1 << 24)
65
66#define FEC_TDAR_REG                    0x0014
67#define   FEC_TDAR_TDAR                   (1 << 24)
68
69#define FEC_ECR_REG                     0x0024
70#define   FEC_ECR_DBSWP                   (1 <<  8)
71#define   FEC_ECR_STOPEN                  (1 <<  7)
72#define   FEC_ECR_DBGEN                   (1 <<  6)
73#define   FEC_ECR_SPEED                   (1 <<  5)
74#define   FEC_ECR_EN1588                  (1 <<  4)
75#define   FEC_ECR_SLEEP                   (1 <<  3)
76#define   FEC_ECR_MAGICEN                 (1 <<  2)
77#define   FEC_ECR_ETHEREN                 (1 <<  1)
78#define   FEC_ECR_RESET                   (1 <<  0)
79
80#define FEC_MMFR_REG                    0x0040
81#define   FEC_MMFR_ST_SHIFT               30
82#define   FEC_MMFR_ST_VALUE               (0x01 << FEC_MMFR_ST_SHIFT)
83#define   FEC_MMFR_OP_SHIFT               28
84#define   FEC_MMFR_OP_WRITE               (0x01 << FEC_MMFR_OP_SHIFT)
85#define   FEC_MMFR_OP_READ                (0x02 << FEC_MMFR_OP_SHIFT)
86#define   FEC_MMFR_PA_SHIFT               23
87#define   FEC_MMFR_PA_MASK                (0x1f << FEC_MMFR_PA_SHIFT)
88#define   FEC_MMFR_RA_SHIFT               18
89#define   FEC_MMFR_RA_MASK                (0x1f << FEC_MMFR_RA_SHIFT)
90#define   FEC_MMFR_TA_SHIFT               16
91#define   FEC_MMFR_TA_VALUE               (0x02 << FEC_MMFR_TA_SHIFT)
92#define   FEC_MMFR_DATA_SHIFT             0
93#define   FEC_MMFR_DATA_MASK              (0xffff << FEC_MMFR_DATA_SHIFT)
94
95#define FEC_MSCR_REG                    0x0044
96#define   FEC_MSCR_HOLDTIME_SHIFT         8
97#define   FEC_MSCR_HOLDTIME_MASK          (0x07 << FEC_MSCR_HOLDTIME_SHIFT)
98#define   FEC_MSCR_DIS_PRE                (1 <<  7)
99#define   FEC_MSCR_MII_SPEED_SHIFT        1
100#define   FEC_MSCR_MII_SPEED_MASk         (0x3f << FEC_MSCR_MII_SPEED_SHIFT)
101
102#define FEC_MIBC_REG                    0x0064
103#define   FEC_MIBC_DIS                    (1U << 31)
104#define   FEC_MIBC_IDLE                   (1 << 30)
105#define   FEC_MIBC_CLEAR                  (1 << 29) /* imx6 only */
106
107#define FEC_RCR_REG                     0x0084
108#define   FEC_RCR_GRS                     (1U << 31)
109#define   FEC_RCR_NLC                     (1 << 30)
110#define   FEC_RCR_MAX_FL_SHIFT            16
111#define   FEC_RCR_MAX_FL_MASK             (0x3fff << FEC_RCR_MAX_FL_SHIFT)
112#define   FEC_RCR_CFEN                    (1 << 15)
113#define   FEC_RCR_CRCFWD                  (1 << 14)
114#define   FEC_RCR_PAUFWD                  (1 << 13)
115#define   FEC_RCR_PADEN                   (1 << 12)
116#define   FEC_RCR_RMII_10T                (1 <<  9)
117#define   FEC_RCR_RMII_MODE               (1 <<  8)
118#define   FEC_RCR_RGMII_EN                (1 <<  6)
119#define   FEC_RCR_FCE                     (1 <<  5)
120#define   FEC_RCR_BC_REJ                  (1 <<  4)
121#define   FEC_RCR_PROM                    (1 <<  3)
122#define   FEC_RCR_MII_MODE                (1 <<  2)
123#define   FEC_RCR_DRT                     (1 <<  1)
124#define   FEC_RCR_LOOP                    (1 <<  0)
125
126#define FEC_TCR_REG                     0x00c4
127#define   FEC_TCR_ADDINS                  (1 <<  9)
128#define   FEC_TCR_ADDSEL_SHIFT            5
129#define   FEC_TCR_ADDSEL_MASK             (0x07 << FEC_TCR_ADDSEL_SHIFT)
130#define   FEC_TCR_RFC_PAUSE               (1 <<  4)
131#define   FEC_TCR_TFC_PAUSE               (1 <<  3)
132#define   FEC_TCR_FDEN                    (1 <<  2)
133#define   FEC_TCR_GTS                     (1 <<  0)
134
135#define FEC_PALR_REG                    0x00e4
136#define   FEC_PALR_PADDR1_SHIFT           0
137#define   FEC_PALR_PADDR1_MASK            (0xffffffff << FEC_PALR_PADDR1_SHIFT)
138
139#define FEC_PAUR_REG                    0x00e8
140#define   FEC_PAUR_PADDR2_SHIFT           16
141#define   FEC_PAUR_PADDR2_MASK            (0xffff << FEC_PAUR_PADDR2_SHIFT)
142#define   FEC_PAUR_TYPE_VALUE             (0x8808)
143
144#define FEC_OPD_REG                     0x00ec
145#define   FEC_OPD_PAUSE_DUR_SHIFT         0
146#define   FEC_OPD_PAUSE_DUR_MASK          (0xffff << FEC_OPD_PAUSE_DUR_SHIFT)
147
148#define FEC_TXIC0_REG                   0x00f0
149#define FEC_TXIC1_REG                   0x00f4
150#define FEC_TXIC2_REG                   0x00f8
151#define FEC_RXIC0_REG                   0x0100
152#define FEC_RXIC1_REG                   0x0104
153#define FEC_RXIC2_REG                   0x0108
154#define   FEC_IC_ICEN                     (1 <<  31)
155#define   FEC_IC_ICCS                     (1 <<  30)
156#define   FEC_IC_ICFT(x)                  (((x) & 0xff) << 20)
157#define   FEC_IC_ICTT(x)                  ((x) & 0xffff)
158
159#define FEC_IAUR_REG                    0x0118
160#define FEC_IALR_REG                    0x011c
161
162#define FEC_GAUR_REG                    0x0120
163#define FEC_GALR_REG                    0x0124
164
165#define FEC_TFWR_REG                    0x0144
166#define   FEC_TFWR_STRFWD                 (1 <<  8)
167#define   FEC_TFWR_TWFR_SHIFT             0
168#define   FEC_TFWR_TWFR_MASK              (0x3f << FEC_TFWR_TWFR_SHIFT)
169#define   FEC_TFWR_TWFR_128BYTE           (0x02 << FEC_TFWR_TWFR_SHIFT)
170
171#define FEC_RDSR_REG                    0x0180
172
173#define FEC_TDSR_REG                    0x0184
174
175#define FEC_MRBR_REG                    0x0188
176#define   FEC_MRBR_R_BUF_SIZE_SHIFT       0
177#define   FEC_MRBR_R_BUF_SIZE_MASK        (0x3fff << FEC_MRBR_R_BUF_SIZE_SHIFT)
178
179#define FEC_RSFL_REG                    0x0190
180#define FEC_RSEM_REG                    0x0194
181#define FEC_RAEM_REG                    0x0198
182#define FEC_RAFL_REG                    0x019c
183#define FEC_TSEM_REG                    0x01a0
184#define FEC_TAEM_REG                    0x01a4
185#define FEC_TAFL_REG                    0x01a8
186#define FEC_TIPG_REG                    0x01ac
187#define FEC_FTRL_REG                    0x01b0
188
189#define FEC_TACC_REG                    0x01c0
190#define   FEC_TACC_PROCHK                 (1 <<  4)
191#define   FEC_TACC_IPCHK                  (1 <<  3)
192#define   FEC_TACC_SHIFT16                (1 <<  0)
193
194#define FEC_RACC_REG                    0x01c4
195#define   FEC_RACC_SHIFT16                (1 <<  7)
196#define   FEC_RACC_LINEDIS                (1 <<  6)
197#define   FEC_RACC_PRODIS                 (1 <<  2)
198#define   FEC_RACC_IPDIS                  (1 <<  1)
199#define   FEC_RACC_PADREM                 (1 <<  0)
200
201/*
202 * IEEE-1588 timer registers
203 */
204
205#define FEC_ATCR_REG                    0x0400
206#define   FEC_ATCR_SLAVE                  (1u << 13)
207#define   FEC_ATCR_CAPTURE                (1u << 11)
208#define   FEC_ATCR_RESTART                (1u << 9)
209#define   FEC_ATCR_PINPER                 (1u << 7)
210#define   FEC_ATCR_PEREN                  (1u << 4)
211#define   FEC_ATCR_OFFRST                 (1u << 3)
212#define   FEC_ATCR_OFFEN                  (1u << 2)
213#define   FEC_ATCR_EN                     (1u << 0)
214
215#define FEC_ATVR_REG                    0x0404
216#define FEC_ATOFF_REG                   0x0408
217#define FEC_ATPER_REG                   0x040c
218#define FEC_ATCOR_REG                   0x0410
219#define FEC_ATINC_REG                   0x0414
220#define FEC_ATSTMP_REG                  0x0418
221
222/*
223 * Statistics registers
224 */
225#define FEC_RMON_T_DROP                 0x200
226#define FEC_RMON_T_PACKETS              0x204
227#define FEC_RMON_T_BC_PKT               0x208
228#define FEC_RMON_T_MC_PKT               0x20C
229#define FEC_RMON_T_CRC_ALIGN            0x210
230#define FEC_RMON_T_UNDERSIZE            0x214
231#define FEC_RMON_T_OVERSIZE             0x218
232#define FEC_RMON_T_FRAG                 0x21C
233#define FEC_RMON_T_JAB                  0x220
234#define FEC_RMON_T_COL                  0x224
235#define FEC_RMON_T_P64                  0x228
236#define FEC_RMON_T_P65TO127             0x22C
237#define FEC_RMON_T_P128TO255            0x230
238#define FEC_RMON_T_P256TO511            0x234
239#define FEC_RMON_T_P512TO1023           0x238
240#define FEC_RMON_T_P1024TO2047          0x23C
241#define FEC_RMON_T_P_GTE2048            0x240
242#define FEC_RMON_T_OCTECTS              0x240
243#define FEC_IEEE_T_DROP                 0x248
244#define FEC_IEEE_T_FRAME_OK             0x24C
245#define FEC_IEEE_T_1COL                 0x250
246#define FEC_IEEE_T_MCOL                 0x254
247#define FEC_IEEE_T_DEF                  0x258
248#define FEC_IEEE_T_LCOL                 0x25C
249#define FEC_IEEE_T_EXCOL                0x260
250#define FEC_IEEE_T_MACERR               0x264
251#define FEC_IEEE_T_CSERR                0x268
252#define FEC_IEEE_T_SQE                  0x26C
253#define FEC_IEEE_T_FDXFC                0x270
254#define FEC_IEEE_T_OCTETS_OK            0x274
255#define FEC_RMON_R_PACKETS              0x284
256#define FEC_RMON_R_BC_PKT               0x288
257#define FEC_RMON_R_MC_PKT               0x28C
258#define FEC_RMON_R_CRC_ALIGN            0x290
259#define FEC_RMON_R_UNDERSIZE            0x294
260#define FEC_RMON_R_OVERSIZE             0x298
261#define FEC_RMON_R_FRAG                 0x29C
262#define FEC_RMON_R_JAB                  0x2A0
263#define FEC_RMON_R_RESVD_0              0x2A4
264#define FEC_RMON_R_P64                  0x2A8
265#define FEC_RMON_R_P65TO127             0x2AC
266#define FEC_RMON_R_P128TO255            0x2B0
267#define FEC_RMON_R_P256TO511            0x2B4
268#define FEC_RMON_R_P512TO1023           0x2B8
269#define FEC_RMON_R_P1024TO2047          0x2BC
270#define FEC_RMON_R_P_GTE2048            0x2C0
271#define FEC_RMON_R_OCTETS               0x2C4
272#define FEC_IEEE_R_DROP                 0x2C8
273#define FEC_IEEE_R_FRAME_OK             0x2CC
274#define FEC_IEEE_R_CRC                  0x2D0
275#define FEC_IEEE_R_ALIGN                0x2D4
276#define FEC_IEEE_R_MACERR               0x2D8
277#define FEC_IEEE_R_FDXFC                0x2DC
278#define FEC_IEEE_R_OCTETS_OK            0x2E0
279
280#define FEC_MIIGSK_CFGR                 0x300
281#define FEC_MIIGSK_CFGR_FRCONT          (1 << 6)   /* Freq: 0=50MHz, 1=5MHz */
282#define FEC_MIIGSK_CFGR_LBMODE          (1 << 4)   /* loopback mode */
283#define FEC_MIIGSK_CFGR_EMODE           (1 << 3)   /* echo mode */
284#define FEC_MIIGSK_CFGR_IF_MODE_MASK    (0x3 << 0)
285#define FEC_MIIGSK_CFGR_IF_MODE_MII       (0 << 0)
286#define FEC_MIIGSK_CFGR_IF_MODE_RMII      (1 << 0)
287
288#define FEC_MIIGSK_ENR                  0x308
289#define FEC_MIIGSK_ENR_READY            (1 << 2)
290#define FEC_MIIGSK_ENR_EN               (1 << 1)
291
292/*
293 * A hardware buffer descriptor.  Rx and Tx buffers have the same descriptor
294 * layout, but the bits in the flags field have different meanings.
295 */
296struct ffec_hwdesc
297{
298        uint32_t        flags_len;
299        uint32_t        buf_paddr;
300        uint32_t        flags2;
301        uint32_t        hlen_proto;
302        uint32_t        bdu;
303        uint32_t        ts;
304        uint32_t        res[2];
305};
306
307#define FEC_TXDESC_READY                (1U << 31)
308#define FEC_TXDESC_T01                  (1 << 30)
309#define FEC_TXDESC_WRAP                 (1 << 29)
310#define FEC_TXDESC_T02                  (1 << 28)
311#define FEC_TXDESC_L                    (1 << 27)
312#define FEC_TXDESC_TC                   (1 << 26)
313#define FEC_TXDESC_ABC                  (1 << 25)
314#define FEC_TXDESC_LEN_MASK             (0xffff)
315
316#define FEC_TXDESC_INT                  (1 << 30)
317#define FEC_TXDESC_TS                   (1 << 29)
318#define FEC_TXDESC_PINS                 (1 << 28)
319#define FEC_TXDESC_IINS                 (1 << 27)
320
321#define FEC_RXDESC_EMPTY                (1U << 31)
322#define FEC_RXDESC_R01                  (1 << 30)
323#define FEC_RXDESC_WRAP                 (1 << 29)
324#define FEC_RXDESC_R02                  (1 << 28)
325#define FEC_RXDESC_L                    (1 << 27)
326#define FEC_RXDESC_M                    (1 << 24)
327#define FEC_RXDESC_BC                   (1 << 23)
328#define FEC_RXDESC_MC                   (1 << 22)
329#define FEC_RXDESC_LG                   (1 << 21)
330#define FEC_RXDESC_NO                   (1 << 20)
331#define FEC_RXDESC_CR                   (1 << 18)
332#define FEC_RXDESC_OV                   (1 << 17)
333#define FEC_RXDESC_TR                   (1 << 16)
334#define FEC_RXDESC_LEN_MASK             (0xffff)
335
336#define FEC_RXDESC_INT                  (1 << 23)
337#define FEC_RXDESC_ICE                  (1 << 5)
338#define FEC_RXDESC_PCR                  (1 << 4)
339
340#define FEC_RXDESC_ERROR_BITS   (FEC_RXDESC_LG | FEC_RXDESC_NO | \
341    FEC_RXDESC_OV | FEC_RXDESC_TR)
342
343/*
344 * The hardware imposes alignment restrictions on various objects involved in
345 * DMA transfers.  These values are expressed in bytes (not bits).
346 */
347#define FEC_DESC_RING_ALIGN             64
348
349#endif  /* IF_FFECREG_H */
Note: See TracBrowser for help on using the repository browser.