Home | History | Annotate | Line # | Download | only in imx
if_enetreg.h revision 1.1
      1  1.1  ryo /*	$NetBSD: if_enetreg.h,v 1.1 2014/09/25 05:05:28 ryo Exp $	*/
      2  1.1  ryo 
      3  1.1  ryo /*-
      4  1.1  ryo  * Copyright (c) 2014 Ryo Shimizu <ryo (at) nerv.org>
      5  1.1  ryo  * All rights reserved.
      6  1.1  ryo  *
      7  1.1  ryo  * Redistribution and use in source and binary forms, with or without
      8  1.1  ryo  * modification, are permitted provided that the following conditions
      9  1.1  ryo  * are met:
     10  1.1  ryo  * 1. Redistributions of source code must retain the above copyright
     11  1.1  ryo  *    notice, this list of conditions and the following disclaimer.
     12  1.1  ryo  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  ryo  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  ryo  *    documentation and/or other materials provided with the distribution.
     15  1.1  ryo  *
     16  1.1  ryo  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     17  1.1  ryo  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     18  1.1  ryo  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     19  1.1  ryo  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
     20  1.1  ryo  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     21  1.1  ryo  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     22  1.1  ryo  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23  1.1  ryo  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     24  1.1  ryo  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     25  1.1  ryo  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26  1.1  ryo  * POSSIBILITY OF SUCH DAMAGE.
     27  1.1  ryo  */
     28  1.1  ryo 
     29  1.1  ryo /*
     30  1.1  ryo  * i.MX6 10/100/1000-Mbps ethernet MAC (ENET)
     31  1.1  ryo  */
     32  1.1  ryo 
     33  1.1  ryo #ifndef _ARM_IMX_IF_ENETREG_H_
     34  1.1  ryo #define _ARM_IMX_IF_ENETREG_H_
     35  1.1  ryo 
     36  1.1  ryo #include <sys/cdefs.h>
     37  1.1  ryo 
     38  1.1  ryo #define ENET_EIR			0x00000004
     39  1.1  ryo # define ENET_EIR_BABR			__BIT(30)
     40  1.1  ryo # define ENET_EIR_BABT			__BIT(29)
     41  1.1  ryo # define ENET_EIR_GRA			__BIT(28)
     42  1.1  ryo # define ENET_EIR_TXF			__BIT(27)
     43  1.1  ryo # define ENET_EIR_TXB			__BIT(26)
     44  1.1  ryo # define ENET_EIR_RXF			__BIT(25)
     45  1.1  ryo # define ENET_EIR_RXB			__BIT(24)
     46  1.1  ryo # define ENET_EIR_MII			__BIT(23)
     47  1.1  ryo # define ENET_EIR_EBERR			__BIT(22)
     48  1.1  ryo # define ENET_EIR_LC			__BIT(21)
     49  1.1  ryo # define ENET_EIR_RL			__BIT(20)
     50  1.1  ryo # define ENET_EIR_UN			__BIT(19)
     51  1.1  ryo # define ENET_EIR_PLR			__BIT(18)
     52  1.1  ryo # define ENET_EIR_WAKEUP		__BIT(17)
     53  1.1  ryo # define ENET_EIR_TS_AVAIL		__BIT(16)
     54  1.1  ryo # define ENET_EIR_TS_TIMER		__BIT(15)
     55  1.1  ryo #define ENET_EIMR			0x00000008
     56  1.1  ryo #define ENET_RDAR			0x00000010
     57  1.1  ryo # define ENET_RDAR_ACTIVE		__BIT(24)
     58  1.1  ryo #define ENET_TDAR			0x00000014
     59  1.1  ryo # define ENET_TDAR_ACTIVE		__BIT(24)
     60  1.1  ryo 
     61  1.1  ryo #define ENET_ECR			0x00000024
     62  1.1  ryo # define ENET_ECR_DBSWP			__BIT(8)
     63  1.1  ryo # define ENET_ECR_STOPEN		__BIT(7)
     64  1.1  ryo # define ENET_ECR_DBGEN			__BIT(6)
     65  1.1  ryo # define ENET_ECR_SPEED			__BIT(5)
     66  1.1  ryo # define ENET_ECR_EN1588		__BIT(4)
     67  1.1  ryo # define ENET_ECR_SLEEP			__BIT(3)
     68  1.1  ryo # define ENET_ECR_MAGICEN		__BIT(2)
     69  1.1  ryo # define ENET_ECR_ETHEREN		__BIT(1)
     70  1.1  ryo # define ENET_ECR_RESET			__BIT(0)
     71  1.1  ryo #define ENET_MMFR			0x00000040
     72  1.1  ryo # define ENET_MMFR_ST			0x40000000
     73  1.1  ryo # define ENET_MMFR_OP_FORCEWRITE	0x00000000
     74  1.1  ryo # define ENET_MMFR_OP_WRITE		0x10000000
     75  1.1  ryo # define ENET_MMFR_OP_READ		0x20000000
     76  1.1  ryo # define ENET_MMFR_OP_FORCEREAD		0x30000000
     77  1.1  ryo # define ENET_MMFR_TA			0x00020000
     78  1.1  ryo # define ENET_MMFR_PHY_ADDR(phy)	__SHIFTIN(phy, __BITS(27, 23))
     79  1.1  ryo # define ENET_MMFR_PHY_REG(reg)		__SHIFTIN(reg, __BITS(22, 18))
     80  1.1  ryo # define ENET_MMFR_DATAMASK		0x0000ffff
     81  1.1  ryo #define ENET_MSCR			0x00000044
     82  1.1  ryo # define ENET_MSCR_HOLDTIME_1CLK	0x00000000
     83  1.1  ryo # define ENET_MSCR_HOLDTIME_2CLK	0x00000100
     84  1.1  ryo # define ENET_MSCR_HOLDTIME_3CLK	0x00000200
     85  1.1  ryo # define ENET_MSCR_HOLDTIME_8CLK	0x00000700
     86  1.1  ryo # define ENET_MSCR_DIS_PRE		__BIT(7)
     87  1.1  ryo # define ENET_MSCR_MII_SPEED_25MHZ	__SHIFTIN(4, __BITS(6, 1))
     88  1.1  ryo # define ENET_MSCR_MII_SPEED_33MHZ	__SHIFTIN(6, __BITS(6, 1))
     89  1.1  ryo # define ENET_MSCR_MII_SPEED_40MHZ	__SHIFTIN(7, __BITS(6, 1))
     90  1.1  ryo # define ENET_MSCR_MII_SPEED_50MHZ	__SHIFTIN(9, __BITS(6, 1))
     91  1.1  ryo # define ENET_MSCR_MII_SPEED_66MHZ	__SHIFTIN(13, __BITS(6, 1))
     92  1.1  ryo 
     93  1.1  ryo #define ENET_MIBC			0x00000064
     94  1.1  ryo # define ENET_MIBC_MIB_DIS		__BIT(31)
     95  1.1  ryo # define ENET_MIBC_MIB_IDLE		__BIT(30)
     96  1.1  ryo # define ENET_MIBC_MIB_CLEAR		__BIT(29)
     97  1.1  ryo 
     98  1.1  ryo #define ENET_RCR			0x00000084
     99  1.1  ryo # define ENET_RCR_GRS			__BIT(31)
    100  1.1  ryo # define ENET_RCR_NLC			__BIT(30)
    101  1.1  ryo # define ENET_RCR_MAX_FL(n)		__SHIFTIN(n, __BITS(29, 16))
    102  1.1  ryo # define ENET_RCR_CFEN			__BIT(15)
    103  1.1  ryo # define ENET_RCR_CRCFWD		__BIT(14)
    104  1.1  ryo # define ENET_RCR_PAUFWD		__BIT(13)
    105  1.1  ryo # define ENET_RCR_PADEN			__BIT(12)
    106  1.1  ryo # define ENET_RCR_RMII_10T		__BIT(9)
    107  1.1  ryo # define ENET_RCR_RGMII_EN		__BIT(6)
    108  1.1  ryo # define ENET_RCR_FCE			__BIT(5)
    109  1.1  ryo # define ENET_RCR_PROM			__BIT(3)
    110  1.1  ryo # define ENET_RCR_DRT			__BIT(1)
    111  1.1  ryo 
    112  1.1  ryo #define ENET_TCR			0x000000c4
    113  1.1  ryo # define ENET_TCR_FDEN			__BIT(2)
    114  1.1  ryo 
    115  1.1  ryo #define ENET_PALR			0x000000e4
    116  1.1  ryo #define ENET_PAUR			0x000000e8
    117  1.1  ryo #define ENET_OPD			0x000000ec
    118  1.1  ryo #define ENET_IAUR			0x00000118
    119  1.1  ryo #define ENET_IALR			0x0000011c
    120  1.1  ryo #define ENET_GAUR			0x00000120
    121  1.1  ryo #define ENET_GALR			0x00000124
    122  1.1  ryo #define ENET_TFWR			0x00000144
    123  1.1  ryo # define ENET_TFWR_STRFWD		__BIT(8)
    124  1.1  ryo # define ENET_TFWR_FIFO(n)		__SHIFTIN(((n) / 64), __BITS(5, 0))
    125  1.1  ryo #define ENET_RDSR			0x00000180
    126  1.1  ryo #define ENET_TDSR			0x00000184
    127  1.1  ryo #define ENET_MRBR			0x00000188
    128  1.1  ryo #define ENET_RSFL			0x00000190
    129  1.1  ryo #define ENET_RSEM			0x00000194
    130  1.1  ryo #define ENET_RAEM			0x00000198
    131  1.1  ryo #define ENET_RAFL			0x0000019c
    132  1.1  ryo #define ENET_TSEM			0x000001a0
    133  1.1  ryo #define ENET_TAEM			0x000001a4
    134  1.1  ryo #define ENET_TAFL			0x000001a8
    135  1.1  ryo #define ENET_TIPG			0x000001ac
    136  1.1  ryo #define ENET_FTRL			0x000001b0
    137  1.1  ryo #define ENET_TACC			0x000001c0
    138  1.1  ryo # define ENET_TACC_PROCHK		__BIT(4)
    139  1.1  ryo # define ENET_TACC_IPCHK		__BIT(3)
    140  1.1  ryo # define ENET_TACC_SHIFT16		__BIT(0)
    141  1.1  ryo #define ENET_RACC			0x000001c4
    142  1.1  ryo # define ENET_RACC_SHIFT16		__BIT(7)
    143  1.1  ryo # define ENET_RACC_LINEDIS		__BIT(6)
    144  1.1  ryo # define ENET_RACC_PRODIS		__BIT(2)
    145  1.1  ryo # define ENET_RACC_IPDIS		__BIT(1)
    146  1.1  ryo # define ENET_RACC_PADREM		__BIT(0)
    147  1.1  ryo 
    148  1.1  ryo /* Statistics counters */
    149  1.1  ryo #define ENET_RMON_T_DROP		0x00000200
    150  1.1  ryo #define ENET_RMON_T_PACKETS		0x00000204
    151  1.1  ryo #define ENET_RMON_T_BC_PKT		0x00000208
    152  1.1  ryo #define ENET_RMON_T_MC_PKT		0x0000020c
    153  1.1  ryo #define ENET_RMON_T_CRC_ALIGN		0x00000210
    154  1.1  ryo #define ENET_RMON_T_UNDERSIZE		0x00000214
    155  1.1  ryo #define ENET_RMON_T_OVERSIZE		0x00000218
    156  1.1  ryo #define ENET_RMON_T_FRAG		0x0000021c
    157  1.1  ryo #define ENET_RMON_T_JAB			0x00000220
    158  1.1  ryo #define ENET_RMON_T_COL			0x00000224
    159  1.1  ryo #define ENET_RMON_T_P64			0x00000228
    160  1.1  ryo #define ENET_RMON_T_P65TO127N		0x0000022c
    161  1.1  ryo #define ENET_RMON_T_P128TO255N		0x00000230
    162  1.1  ryo #define ENET_RMON_T_P256TO511		0x00000234
    163  1.1  ryo #define ENET_RMON_T_P512TO1023		0x00000238
    164  1.1  ryo #define ENET_RMON_T_P1024TO2047		0x0000023c
    165  1.1  ryo #define ENET_RMON_T_P_GTE2048		0x00000240
    166  1.1  ryo #define ENET_RMON_T_OCTETS		0x00000244
    167  1.1  ryo #define ENET_IEEE_T_DROP		0x00000248
    168  1.1  ryo #define ENET_IEEE_T_FRAME_OK		0x0000024c
    169  1.1  ryo #define ENET_IEEE_T_1COL		0x00000250
    170  1.1  ryo #define ENET_IEEE_T_MCOL		0x00000254
    171  1.1  ryo #define ENET_IEEE_T_DEF			0x00000258
    172  1.1  ryo #define ENET_IEEE_T_LCOL		0x0000025c
    173  1.1  ryo #define ENET_IEEE_T_EXCOL		0x00000260
    174  1.1  ryo #define ENET_IEEE_T_MACERR		0x00000264
    175  1.1  ryo #define ENET_IEEE_T_CSERR		0x00000268
    176  1.1  ryo #define ENET_IEEE_T_SQE			0x0000026c
    177  1.1  ryo #define ENET_IEEE_T_FDXFC		0x00000270
    178  1.1  ryo #define ENET_IEEE_T_OCTETS_OK		0x00000274
    179  1.1  ryo #define ENET_RMON_R_PACKETS		0x00000284
    180  1.1  ryo #define ENET_RMON_R_BC_PKT		0x00000288
    181  1.1  ryo #define ENET_RMON_R_MC_PKT		0x0000028c
    182  1.1  ryo #define ENET_RMON_R_CRC_ALIGN		0x00000290
    183  1.1  ryo #define ENET_RMON_R_UNDERSIZE		0x00000294
    184  1.1  ryo #define ENET_RMON_R_OVERSIZE		0x00000298
    185  1.1  ryo #define ENET_RMON_R_FRAG		0x0000029c
    186  1.1  ryo #define ENET_RMON_R_JAB			0x000002a0
    187  1.1  ryo #define ENET_RMON_R_RESVD_0		0x000002a4
    188  1.1  ryo #define ENET_RMON_R_P64			0x000002a8
    189  1.1  ryo #define ENET_RMON_R_P65TO127		0x000002ac
    190  1.1  ryo #define ENET_RMON_R_P128TO255		0x000002b0
    191  1.1  ryo #define ENET_RMON_R_P256TO511		0x000002b4
    192  1.1  ryo #define ENET_RMON_R_P512TO1023		0x000002b8
    193  1.1  ryo #define ENET_RMON_R_P1024TO2047		0x000002bc
    194  1.1  ryo #define ENET_RMON_R_P_GTE2048		0x000002c0
    195  1.1  ryo #define ENET_RMON_R_OCTETS		0x000002c4
    196  1.1  ryo #define ENET_IEEE_R_DROP		0x000002c8
    197  1.1  ryo #define ENET_IEEE_R_FRAME_OK		0x000002cc
    198  1.1  ryo #define ENET_IEEE_R_CRC			0x000002d0
    199  1.1  ryo #define ENET_IEEE_R_ALIGN		0x000002d4
    200  1.1  ryo #define ENET_IEEE_R_MACERR		0x000002d8
    201  1.1  ryo #define ENET_IEEE_R_FDXFC		0x000002dc
    202  1.1  ryo #define ENET_IEEE_R_OCTETS_OK		0x000002e0
    203  1.1  ryo 
    204  1.1  ryo /* IEEE1588 control */
    205  1.1  ryo #define ENET_ATCR			0x00000400
    206  1.1  ryo #define ENET_ATVR			0x00000404
    207  1.1  ryo #define ENET_ATOFF			0x00000408
    208  1.1  ryo #define ENET_ATPER			0x0000040c
    209  1.1  ryo #define ENET_ATCOR			0x00000410
    210  1.1  ryo #define ENET_ATINC			0x00000414
    211  1.1  ryo #define ENET_ATSTMP			0x00000418
    212  1.1  ryo 
    213  1.1  ryo /* Capture/compare block */
    214  1.1  ryo #define ENET_TGSR			0x00000604
    215  1.1  ryo #define ENET_TCSR0			0x00000608
    216  1.1  ryo #define ENET_TCCR0			0x0000060c
    217  1.1  ryo #define ENET_TCSR1			0x00000610
    218  1.1  ryo #define ENET_TCCR1			0x00000614
    219  1.1  ryo #define ENET_TCSR2			0x00000618
    220  1.1  ryo #define ENET_TCCR2			0x0000061c
    221  1.1  ryo #define ENET_TCSR3			0x00000620
    222  1.1  ryo #define ENET_TCCR3			0x00000624
    223  1.1  ryo 
    224  1.1  ryo /* enhanced transmit buffer descriptor */
    225  1.1  ryo struct enet_txdesc {
    226  1.1  ryo 	uint32_t tx_flags1_len;
    227  1.1  ryo #define TXFLAGS1_R			__BIT(31)	/* Ready */
    228  1.1  ryo #define TXFLAGS1_T1			__BIT(30)	/* TX software owner1 */
    229  1.1  ryo #define TXFLAGS1_W			__BIT(29)	/* Wrap */
    230  1.1  ryo #define TXFLAGS1_T2			__BIT(28)	/* TX software owner2 */
    231  1.1  ryo #define TXFLAGS1_L			__BIT(27)	/* Last in frame */
    232  1.1  ryo #define TXFLAGS1_TC			__BIT(26)	/* Transmit CRC */
    233  1.1  ryo #define TXFLAGS1_ABC			__BIT(25)	/* Append bad CRC */
    234  1.1  ryo #define TXFLAGS1_LEN(n)			((n) & 0xffff)
    235  1.1  ryo 	uint32_t tx_databuf;
    236  1.1  ryo 	uint32_t tx_flags2;
    237  1.1  ryo #define TXFLAGS2_INT			__BIT(30)	/* Interrupt */
    238  1.1  ryo #define TXFLAGS2_TS			__BIT(29)	/* Timestamp */
    239  1.1  ryo #define TXFLAGS2_PINS			__BIT(28)	/* Insert Proto csum */
    240  1.1  ryo #define TXFLAGS2_IINS			__BIT(27)	/* Insert IP csum */
    241  1.1  ryo #define TXFLAGS2_TXE			__BIT(15)	/* Transmit error */
    242  1.1  ryo #define TXFLAGS2_UE			__BIT(13)	/* Underflow error */
    243  1.1  ryo #define TXFLAGS2_EE			__BIT(12)	/* Excess colls Err */
    244  1.1  ryo #define TXFLAGS2_FE			__BIT(11)	/* Frame Error */
    245  1.1  ryo #define TXFLAGS2_LCE			__BIT(10)	/* Late collision Err */
    246  1.1  ryo #define TXFLAGS2_OE			__BIT(9)	/* Overfow Error */
    247  1.1  ryo #define TXFLAGS2_TSE			__BIT(8)	/* Timestamp Error */
    248  1.1  ryo 	uint32_t tx__reserved1;
    249  1.1  ryo 	uint32_t tx_flags3;
    250  1.1  ryo #define TXFLAGS3_BDU			__BIT(31)
    251  1.1  ryo 	uint32_t tx_1588timestamp;
    252  1.1  ryo 	uint32_t tx__reserved2;
    253  1.1  ryo 	uint32_t tx__reserved3;
    254  1.1  ryo } __packed;
    255  1.1  ryo 
    256  1.1  ryo /* enhanced receive buffer descriptor */
    257  1.1  ryo struct enet_rxdesc {
    258  1.1  ryo 	uint32_t rx_flags1_len;
    259  1.1  ryo #define RXFLAGS1_E			__BIT(31)	/* Empty */
    260  1.1  ryo #define RXFLAGS1_R1			__BIT(30)	/* RX software owner1 */
    261  1.1  ryo #define RXFLAGS1_W			__BIT(29)	/* Wrap */
    262  1.1  ryo #define RXFLAGS1_R2			__BIT(28)	/* RX software owner2 */
    263  1.1  ryo #define RXFLAGS1_L			__BIT(27)	/* Last in frame */
    264  1.1  ryo #define RXFLAGS1_M			__BIT(24)	/* Miss */
    265  1.1  ryo #define RXFLAGS1_BC			__BIT(23)	/* Broadcast */
    266  1.1  ryo #define RXFLAGS1_MC			__BIT(22)	/* Multicast */
    267  1.1  ryo #define RXFLAGS1_LG			__BIT(21)	/* Length Violation */
    268  1.1  ryo #define RXFLAGS1_NO			__BIT(20)	/* Non-Octet aligned  */
    269  1.1  ryo #define RXFLAGS1_CR			__BIT(18)	/* CRC or frame error */
    270  1.1  ryo #define RXFLAGS1_OV			__BIT(17)	/* Overrun */
    271  1.1  ryo #define RXFLAGS1_TR			__BIT(16)	/* Truncated */
    272  1.1  ryo #define RXFLAGS1_LEN(n)			((n) & 0xffff)
    273  1.1  ryo 	uint32_t rx_databuf;
    274  1.1  ryo 	uint32_t rx_flags2;
    275  1.1  ryo #define RXFLAGS2_ME			__BIT(31)	/* MAC error */
    276  1.1  ryo #define RXFLAGS2_PE			__BIT(26)	/* PHY error */
    277  1.1  ryo #define RXFLAGS2_CE			__BIT(25)	/* Collision */
    278  1.1  ryo #define RXFLAGS2_UC			__BIT(24)	/* Unicast */
    279  1.1  ryo #define RXFLAGS2_INT			__BIT(23)	/* RXB/RXF interrupt */
    280  1.1  ryo #define RXFLAGS2_ICE			__BIT(5)	/* IP csum error */
    281  1.1  ryo #define RXFLAGS2_PCR			__BIT(4)	/* Proto csum error */
    282  1.1  ryo #define RXFLAGS2_VLAN			__BIT(2)	/* VLAN */
    283  1.1  ryo #define RXFLAGS2_IPV6			__BIT(1)	/* IPv6 frame */
    284  1.1  ryo #define RXFLAGS2_FRAG			__BIT(0)	/* IPv4 fragment */
    285  1.1  ryo #if _BYTE_ORDER == _LITTLE_ENDIAN
    286  1.1  ryo 	uint16_t rx_cksum;
    287  1.1  ryo 	uint8_t rx_proto;
    288  1.1  ryo 	uint8_t rx_hl;
    289  1.1  ryo #else
    290  1.1  ryo 	uint8_t rx_hl;
    291  1.1  ryo 	uint8_t rx_proto;
    292  1.1  ryo 	uint16_t rx_cksum;
    293  1.1  ryo #endif
    294  1.1  ryo 	uint32_t rx_flags3;
    295  1.1  ryo #define RXFLAGS3_BDU			__BIT(31)
    296  1.1  ryo 	uint32_t rx_1588timestamp;
    297  1.1  ryo 	uint32_t rx__reserved2;
    298  1.1  ryo 	uint32_t rx__reserved3;
    299  1.1  ryo } __packed;
    300  1.1  ryo 
    301  1.1  ryo #endif /* _ARM_IMX_IF_ENETREG_H_ */
    302