xref: /freebsd-src/sys/dev/tsec/if_tsecreg.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
167196661SRafal Jaworowski /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
4bd37530eSRafal Jaworowski  * Copyright (C) 2008-2009 Semihalf, Piotr Ziecik
5bd37530eSRafal Jaworowski  * Copyright (C) 2006-2007 Semihalf, Piotr Kruszynski
667196661SRafal Jaworowski  * All rights reserved.
767196661SRafal Jaworowski  *
867196661SRafal Jaworowski  * Redistribution and use in source and binary forms, with or without
967196661SRafal Jaworowski  * modification, are permitted provided that the following conditions
1067196661SRafal Jaworowski  * are met:
1167196661SRafal Jaworowski  * 1. Redistributions of source code must retain the above copyright
1267196661SRafal Jaworowski  *    notice, this list of conditions and the following disclaimer.
1367196661SRafal Jaworowski  * 2. Redistributions in binary form must reproduce the above copyright
1467196661SRafal Jaworowski  *    notice, this list of conditions and the following disclaimer in the
1567196661SRafal Jaworowski  *    documentation and/or other materials provided with the distribution.
1667196661SRafal Jaworowski  *
1767196661SRafal Jaworowski  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1867196661SRafal Jaworowski  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1967196661SRafal Jaworowski  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
2067196661SRafal Jaworowski  * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2167196661SRafal Jaworowski  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
2267196661SRafal Jaworowski  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
2367196661SRafal Jaworowski  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
2467196661SRafal Jaworowski  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
2567196661SRafal Jaworowski  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2667196661SRafal Jaworowski  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2767196661SRafal Jaworowski  */
2867196661SRafal Jaworowski 
2967196661SRafal Jaworowski #define	TSEC_REG_ID		0x000	/* Controller ID register #1. */
3067196661SRafal Jaworowski #define	TSEC_REG_ID2		0x004	/* Controller ID register #2. */
3167196661SRafal Jaworowski 
3267196661SRafal Jaworowski /* TSEC General Control and Status Registers */
3367196661SRafal Jaworowski #define TSEC_REG_IEVENT		0x010 /* Interrupt event register */
3467196661SRafal Jaworowski #define TSEC_REG_IMASK		0x014 /* Interrupt mask register */
3567196661SRafal Jaworowski #define TSEC_REG_EDIS		0x018 /* Error disabled register */
3667196661SRafal Jaworowski #define TSEC_REG_ECNTRL		0x020 /* Ethernet control register */
3767196661SRafal Jaworowski #define TSEC_REG_MINFLR		0x024 /* Minimum frame length register */
3867196661SRafal Jaworowski #define TSEC_REG_PTV		0x028 /* Pause time value register */
3967196661SRafal Jaworowski #define TSEC_REG_DMACTRL	0x02c /* DMA control register */
4067196661SRafal Jaworowski #define TSEC_REG_TBIPA		0x030 /* TBI PHY address register */
4167196661SRafal Jaworowski 
4267196661SRafal Jaworowski /* TSEC FIFO Control and Status Registers */
4367196661SRafal Jaworowski #define TSEC_REG_FIFO_PAUSE_CTRL 0x04c /* FIFO pause control register */
4467196661SRafal Jaworowski #define TSEC_REG_FIFO_TX_THR	0x08c /* FIFO transmit threshold register */
4567196661SRafal Jaworowski #define TSEC_REG_FIFO_TX_STARVE	0x098 /* FIFO transmit starve register */
4667196661SRafal Jaworowski #define TSEC_REG_FIFO_TX_STARVE_SHUTOFF	0x09c /* FIFO transmit starve shutoff
4767196661SRafal Jaworowski 					       * register */
4867196661SRafal Jaworowski 
4967196661SRafal Jaworowski /* TSEC Transmit Control and Status Registers */
5067196661SRafal Jaworowski #define TSEC_REG_TCTRL		0x100 /* Transmit control register */
5167196661SRafal Jaworowski #define TSEC_REG_TSTAT		0x104 /* Transmit Status Register */
5267196661SRafal Jaworowski #define TSEC_REG_TBDLEN		0x10c /* TxBD data length register */
5367196661SRafal Jaworowski #define TSEC_REG_TXIC		0x110 /* Transmit interrupt coalescing
5467196661SRafal Jaworowski 				       * configuration register */
5567196661SRafal Jaworowski #define TSEC_REG_CTBPTR		0x124 /* Current TxBD pointer register */
5667196661SRafal Jaworowski #define TSEC_REG_TBPTR		0x184 /* TxBD pointer register */
5767196661SRafal Jaworowski #define TSEC_REG_TBASE		0x204 /* TxBD base address register */
5867196661SRafal Jaworowski #define TSEC_REG_OSTBD		0x2b0 /* Out-of-sequence TxBD register */
5967196661SRafal Jaworowski #define TSEC_REG_OSTBDP		0x2b4 /* Out-of-sequence Tx data buffer pointer
6067196661SRafal Jaworowski 				       * register */
6167196661SRafal Jaworowski 
6267196661SRafal Jaworowski /* TSEC Receive Control and Status Registers */
6367196661SRafal Jaworowski #define TSEC_REG_RCTRL		0x300 /* Receive control register */
6467196661SRafal Jaworowski #define TSEC_REG_RSTAT		0x304 /* Receive status register */
6567196661SRafal Jaworowski #define TSEC_REG_RBDLEN		0x30c /* RxBD data length register */
6667196661SRafal Jaworowski #define TSEC_REG_RXIC		0x310 /* Receive interrupt coalescing
6767196661SRafal Jaworowski 				       * configuration register */
6867196661SRafal Jaworowski #define TSEC_REG_CRBPTR		0x324 /* Current RxBD pointer register */
6967196661SRafal Jaworowski #define TSEC_REG_MRBLR		0x340 /* Maximum receive buffer length register */
7067196661SRafal Jaworowski #define TSEC_REG_RBPTR		0x384 /* RxBD pointer register */
7167196661SRafal Jaworowski #define TSEC_REG_RBASE		0x404 /* RxBD base address register */
7267196661SRafal Jaworowski 
7367196661SRafal Jaworowski /* TSEC MAC Registers */
7467196661SRafal Jaworowski #define TSEC_REG_MACCFG1	0x500 /* MAC configuration 1 register */
7567196661SRafal Jaworowski #define TSEC_REG_MACCFG2	0x504 /* MAC configuration 2 register */
7667196661SRafal Jaworowski #define TSEC_REG_IPGIFG		0x508 /* Inter-packet gap/inter-frame gap
7767196661SRafal Jaworowski 				       * register */
7867196661SRafal Jaworowski #define TSEC_REG_HAFDUP		0x50c /* Half-duplex register */
7967196661SRafal Jaworowski #define TSEC_REG_MAXFRM		0x510 /* Maximum frame length register */
80629aa519SNathan Whitehorn #define TSEC_REG_MIIBASE	0x520 /* MII Management base, rest offsets */
81629aa519SNathan Whitehorn #define TSEC_REG_MIIMCFG	0x0   /* MII Management configuration register */
82629aa519SNathan Whitehorn #define TSEC_REG_MIIMCOM	0x4   /* MII Management command register */
83629aa519SNathan Whitehorn #define TSEC_REG_MIIMADD	0x8   /* MII Management address register */
84629aa519SNathan Whitehorn #define TSEC_REG_MIIMCON	0xc   /* MII Management control register */
85629aa519SNathan Whitehorn #define TSEC_REG_MIIMSTAT	0x10  /* MII Management status register */
86629aa519SNathan Whitehorn #define TSEC_REG_MIIMIND	0x14  /* MII Management indicator register */
8767196661SRafal Jaworowski #define TSEC_REG_IFSTAT		0x53c /* Interface status register */
8867196661SRafal Jaworowski #define TSEC_REG_MACSTNADDR1	0x540 /* Station address register, part 1 */
8967196661SRafal Jaworowski #define TSEC_REG_MACSTNADDR2	0x544 /* Station address register, part 2 */
9067196661SRafal Jaworowski 
9167196661SRafal Jaworowski /* TSEC Transmit and Receive Counters */
9267196661SRafal Jaworowski #define TSEC_REG_MON_TR64	0x680 /* Transmit and receive 64-byte
9367196661SRafal Jaworowski 				       * frame counter register */
9467196661SRafal Jaworowski #define TSEC_REG_MON_TR127	0x684 /* Transmit and receive 65-127 byte
9567196661SRafal Jaworowski 				       * frame counter register */
9667196661SRafal Jaworowski #define TSEC_REG_MON_TR255	0x688 /* Transmit and receive 128-255 byte
9767196661SRafal Jaworowski 				       * frame counter register */
9867196661SRafal Jaworowski #define TSEC_REG_MON_TR511	0x68c /* Transmit and receive 256-511 byte
9967196661SRafal Jaworowski 				       * frame counter register */
10067196661SRafal Jaworowski #define TSEC_REG_MON_TR1K 	0x690 /* Transmit and receive 512-1023 byte
10167196661SRafal Jaworowski 				       * frame counter register */
10267196661SRafal Jaworowski #define TSEC_REG_MON_TRMAX	0x694 /* Transmit and receive 1024-1518 byte
10367196661SRafal Jaworowski 				       * frame counter register */
10467196661SRafal Jaworowski #define TSEC_REG_MON_TRMGV	0x698 /* Transmit and receive 1519-1522 byte
10567196661SRafal Jaworowski 				       * good VLAN frame counter register */
10667196661SRafal Jaworowski 
10767196661SRafal Jaworowski /* TSEC Receive Counters */
10867196661SRafal Jaworowski #define TSEC_REG_MON_RBYT	0x69c /* Receive byte counter register */
10967196661SRafal Jaworowski #define TSEC_REG_MON_RPKT	0x6a0 /* Receive packet counter register */
11067196661SRafal Jaworowski #define TSEC_REG_MON_RFCS	0x6a4 /* Receive FCS error counter register */
11167196661SRafal Jaworowski #define TSEC_REG_MON_RMCA	0x6a8 /* Receive multicast packet counter
11267196661SRafal Jaworowski 				       * register */
11367196661SRafal Jaworowski #define TSEC_REG_MON_RBCA	0x6ac /* Receive broadcast packet counter
11467196661SRafal Jaworowski 				       * register */
11567196661SRafal Jaworowski #define TSEC_REG_MON_RXCF	0x6b0 /* Receive control frame packet counter
11667196661SRafal Jaworowski 				       * register */
11767196661SRafal Jaworowski #define TSEC_REG_MON_RXPF	0x6b4 /* Receive pause frame packet counter
11867196661SRafal Jaworowski 				       * register */
11967196661SRafal Jaworowski #define TSEC_REG_MON_RXUO	0x6b8 /* Receive unknown OP code counter
12067196661SRafal Jaworowski 				       * register */
12167196661SRafal Jaworowski #define TSEC_REG_MON_RALN	0x6bc /* Receive alignment error counter
12267196661SRafal Jaworowski 				       * register */
12367196661SRafal Jaworowski #define TSEC_REG_MON_RFLR	0x6c0 /* Receive frame length error counter
12467196661SRafal Jaworowski 				       * register */
12567196661SRafal Jaworowski #define TSEC_REG_MON_RCDE	0x6c4 /* Receive code error counter register */
12667196661SRafal Jaworowski #define TSEC_REG_MON_RCSE	0x6c8 /* Receive carrier sense error counter
12767196661SRafal Jaworowski 				       * register */
12867196661SRafal Jaworowski #define TSEC_REG_MON_RUND	0x6cc /* Receive undersize packet counter
12967196661SRafal Jaworowski 				       * register */
13067196661SRafal Jaworowski #define TSEC_REG_MON_ROVR	0x6d0 /* Receive oversize packet counter
13167196661SRafal Jaworowski 				       * register */
13267196661SRafal Jaworowski #define TSEC_REG_MON_RFRG	0x6d4 /* Receive fragments counter register */
13367196661SRafal Jaworowski #define TSEC_REG_MON_RJBR	0x6d8 /* Receive jabber counter register */
13467196661SRafal Jaworowski #define TSEC_REG_MON_RDRP	0x6dc /* Receive drop counter register */
13567196661SRafal Jaworowski 
13667196661SRafal Jaworowski /* TSEC Transmit Counters */
13767196661SRafal Jaworowski #define TSEC_REG_MON_TBYT	0x6e0 /* Transmit byte counter register */
13867196661SRafal Jaworowski #define TSEC_REG_MON_TPKT	0x6e4 /* Transmit packet counter register */
13967196661SRafal Jaworowski #define TSEC_REG_MON_TMCA	0x6e8 /* Transmit multicast packet counter
14067196661SRafal Jaworowski 				       * register */
14167196661SRafal Jaworowski #define TSEC_REG_MON_TBCA	0x6ec /* Transmit broadcast packet counter
14267196661SRafal Jaworowski 				       * register */
14367196661SRafal Jaworowski #define TSEC_REG_MON_TXPF	0x6f0 /* Transmit PAUSE control frame counter
14467196661SRafal Jaworowski 				       * register */
14567196661SRafal Jaworowski #define TSEC_REG_MON_TDFR	0x6f4 /* Transmit deferral packet counter
14667196661SRafal Jaworowski 				       * register */
14767196661SRafal Jaworowski #define TSEC_REG_MON_TEDF	0x6f8 /* Transmit excessive deferral packet
14867196661SRafal Jaworowski 				       * counter register */
14967196661SRafal Jaworowski #define TSEC_REG_MON_TSCL	0x6fc /* Transmit single collision packet counter
15067196661SRafal Jaworowski 				       * register */
15167196661SRafal Jaworowski #define TSEC_REG_MON_TMCL	0x700 /* Transmit multiple collision packet counter
15267196661SRafal Jaworowski 				       * register */
15367196661SRafal Jaworowski #define TSEC_REG_MON_TLCL	0x704 /* Transmit late collision packet counter
15467196661SRafal Jaworowski 				       * register */
15567196661SRafal Jaworowski #define TSEC_REG_MON_TXCL	0x708 /* Transmit excessive collision packet
15667196661SRafal Jaworowski 				       * counter register */
15767196661SRafal Jaworowski #define TSEC_REG_MON_TNCL	0x70c /* Transmit total collision counter
15867196661SRafal Jaworowski 				       * register */
15967196661SRafal Jaworowski #define TSEC_REG_MON_TDRP	0x714 /* Transmit drop frame counter register */
16067196661SRafal Jaworowski #define TSEC_REG_MON_TJBR	0x718 /* Transmit jabber frame counter register */
16167196661SRafal Jaworowski #define TSEC_REG_MON_TFCS	0x71c /* Transmit FCS error counter register */
16267196661SRafal Jaworowski #define TSEC_REG_MON_TXCF	0x720 /* Transmit control frame counter register */
16367196661SRafal Jaworowski #define TSEC_REG_MON_TOVR	0x724 /* Transmit oversize frame counter
16467196661SRafal Jaworowski 				       * register */
16567196661SRafal Jaworowski #define TSEC_REG_MON_TUND	0x728 /* Transmit undersize frame counter
16667196661SRafal Jaworowski 				       * register */
16767196661SRafal Jaworowski #define TSEC_REG_MON_TFRG	0x72c /* Transmit fragments frame counter
16867196661SRafal Jaworowski 				       * register */
16967196661SRafal Jaworowski 
17067196661SRafal Jaworowski /* TSEC General Registers */
17167196661SRafal Jaworowski #define TSEC_REG_MON_CAR1	0x730 /* Carry register one register */
17267196661SRafal Jaworowski #define TSEC_REG_MON_CAR2	0x734 /* Carry register two register */
17367196661SRafal Jaworowski #define TSEC_REG_MON_CAM1	0x738 /* Carry register one mask register */
17467196661SRafal Jaworowski #define TSEC_REG_MON_CAM2	0x73c /* Carry register two mask register */
17567196661SRafal Jaworowski 
17667196661SRafal Jaworowski /* TSEC Hash Function Registers */
17767196661SRafal Jaworowski #define TSEC_REG_IADDR0		0x800 /* Indivdual address register 0 */
17867196661SRafal Jaworowski #define TSEC_REG_IADDR1		0x804 /* Indivdual address register 1 */
17967196661SRafal Jaworowski #define TSEC_REG_IADDR2		0x808 /* Indivdual address register 2 */
18067196661SRafal Jaworowski #define TSEC_REG_IADDR3		0x80c /* Indivdual address register 3 */
18167196661SRafal Jaworowski #define TSEC_REG_IADDR4		0x810 /* Indivdual address register 4 */
18267196661SRafal Jaworowski #define TSEC_REG_IADDR5		0x814 /* Indivdual address register 5 */
18367196661SRafal Jaworowski #define TSEC_REG_IADDR6		0x818 /* Indivdual address register 6 */
18467196661SRafal Jaworowski #define TSEC_REG_IADDR7		0x81c /* Indivdual address register 7 */
18567196661SRafal Jaworowski #define TSEC_REG_GADDR0		0x880 /* Group address register 0 */
18667196661SRafal Jaworowski #define TSEC_REG_GADDR1		0x884 /* Group address register 1 */
18767196661SRafal Jaworowski #define TSEC_REG_GADDR2		0x888 /* Group address register 2 */
18867196661SRafal Jaworowski #define TSEC_REG_GADDR3		0x88c /* Group address register 3 */
18967196661SRafal Jaworowski #define TSEC_REG_GADDR4		0x890 /* Group address register 4 */
19067196661SRafal Jaworowski #define TSEC_REG_GADDR5		0x894 /* Group address register 5 */
19167196661SRafal Jaworowski #define TSEC_REG_GADDR6		0x898 /* Group address register 6 */
19267196661SRafal Jaworowski #define TSEC_REG_GADDR7		0x89c /* Group address register 7 */
193bd37530eSRafal Jaworowski #define	TSEC_REG_IADDR(n)	(TSEC_REG_IADDR0 + (n << 2))
194bd37530eSRafal Jaworowski #define	TSEC_REG_GADDR(n)	(TSEC_REG_GADDR0 + (n << 2))
19567196661SRafal Jaworowski 
19667196661SRafal Jaworowski /* TSEC attribute registers */
19767196661SRafal Jaworowski #define TSEC_REG_ATTR		0xbf8 /* Attributes Register */
19867196661SRafal Jaworowski #define TSEC_REG_ATTRELI	0xbfc /* Attributes EL & EI register */
19967196661SRafal Jaworowski 
20067196661SRafal Jaworowski /* Size of TSEC registers area */
20167196661SRafal Jaworowski #define TSEC_IO_SIZE		0x1000
20267196661SRafal Jaworowski 
20367196661SRafal Jaworowski /* reg bits */
20467196661SRafal Jaworowski #define TSEC_FIFO_PAUSE_CTRL_EN		0x0002
20567196661SRafal Jaworowski 
20667196661SRafal Jaworowski #define TSEC_DMACTRL_TDSEN		0x00000080 /* Tx Data snoop enable */
20767196661SRafal Jaworowski #define TSEC_DMACTRL_TBDSEN		0x00000040 /* TxBD snoop enable */
20867196661SRafal Jaworowski #define TSEC_DMACTRL_GRS		0x00000010 /* Graceful receive stop */
20967196661SRafal Jaworowski #define TSEC_DMACTRL_GTS		0x00000008 /* Graceful transmit stop */
21067196661SRafal Jaworowski #define DMACTRL_WWR			0x00000002 /* Write with response */
21167196661SRafal Jaworowski #define DMACTRL_WOP			0x00000001 /* Wait or poll */
21267196661SRafal Jaworowski 
213bd37530eSRafal Jaworowski #define	TSEC_RCTRL_VLEX			0x00002000 /* Enable automatic VLAN tag
214bd37530eSRafal Jaworowski 						    * extraction and deletion
215bd37530eSRafal Jaworowski 						    * from Ethernet frames */
216bd37530eSRafal Jaworowski #define	TSEC_RCTRL_IPCSEN		0x00000200 /* IP Checksum verification enable */
217bd37530eSRafal Jaworowski #define	TSEC_RCTRL_TUCSEN		0x00000100 /* TCP or UDP Checksum verification enable */
218bd37530eSRafal Jaworowski #define	TSEC_RCTRL_PRSDEP		0x000000C0 /* Parser control */
219bd37530eSRafal Jaworowski #define	TSEC_RCRTL_PRSFM		0x00000020 /* FIFO-mode parsing */
22067196661SRafal Jaworowski #define TSEC_RCTRL_BC_REJ		0x00000010 /* Broadcast frame reject */
22167196661SRafal Jaworowski #define TSEC_RCTRL_PROM			0x00000008 /* Promiscuous mode */
22267196661SRafal Jaworowski #define TSEC_RCTRL_RSF			0x00000004 /* Receive short frame mode */
22367196661SRafal Jaworowski 
224bd37530eSRafal Jaworowski #define	TSEC_RCTRL_PRSDEP_PARSER_OFF	0x00000000 /* Parser Disabled */
225bd37530eSRafal Jaworowski #define	TSEC_RCTRL_PRSDEP_PARSE_L2	0x00000040 /* Parse L2 */
226bd37530eSRafal Jaworowski #define	TSEC_RCTRL_PRSDEP_PARSE_L23	0x00000080 /* Parse L2 and L3 */
227bd37530eSRafal Jaworowski #define	TSEC_RCTRL_PRSDEP_PARSE_L234	0x000000C0 /* Parse L2, L3 and L4 */
228bd37530eSRafal Jaworowski 
229bd37530eSRafal Jaworowski #define	TSEC_TCTRL_IPCSEN		0x00004000 /* IP header checksum generation enable */
230bd37530eSRafal Jaworowski #define	TSEC_TCTRL_TUCSEN		0x00002000 /* TCP/UDP header checksum generation enable */
231bd37530eSRafal Jaworowski 
23267196661SRafal Jaworowski #define TSEC_TSTAT_THLT			0x80000000 /* Transmit halt */
23367196661SRafal Jaworowski #define TSEC_RSTAT_QHLT			0x00800000 /* RxBD queue is halted */
23467196661SRafal Jaworowski 
23567196661SRafal Jaworowski #define TSEC_IEVENT_BABR		0x80000000 /* Babbling receive error */
23667196661SRafal Jaworowski #define TSEC_IEVENT_RXC			0x40000000 /* Receive control interrupt */
23767196661SRafal Jaworowski #define TSEC_IEVENT_BSY			0x20000000 /* Busy condition interrupt */
23867196661SRafal Jaworowski #define TSEC_IEVENT_EBERR		0x10000000 /* Ethernet bus error */
23967196661SRafal Jaworowski #define TSEC_IEVENT_MSRO		0x04000000 /* MSTAT Register Overflow */
24067196661SRafal Jaworowski #define TSEC_IEVENT_GTSC		0x02000000 /* Graceful transmit stop complete */
24167196661SRafal Jaworowski #define TSEC_IEVENT_BABT		0x01000000 /* Babbling transmit error */
24267196661SRafal Jaworowski #define TSEC_IEVENT_TXC			0x00800000 /* Transmit control interrupt */
24367196661SRafal Jaworowski #define TSEC_IEVENT_TXE			0x00400000 /* Transmit error */
24467196661SRafal Jaworowski #define TSEC_IEVENT_TXB			0x00200000 /* Transmit buffer */
24567196661SRafal Jaworowski #define TSEC_IEVENT_TXF			0x00100000 /* Transmit frame interrupt */
24667196661SRafal Jaworowski #define TSEC_IEVENT_LC			0x00040000 /* Late collision */
24767196661SRafal Jaworowski #define TSEC_IEVENT_CRL			0x00020000 /* Collision retry limit/excessive
24867196661SRafal Jaworowski 						    * defer abort */
24967196661SRafal Jaworowski #define TSEC_IEVENT_XFUN		0x00010000 /* Transmit FIFO underrun */
25067196661SRafal Jaworowski #define TSEC_IEVENT_RXB			0x00008000 /* Receive buffer */
25167196661SRafal Jaworowski #define TSEC_IEVENT_MMRD		0x00000400 /* MII management read completion */
25267196661SRafal Jaworowski #define TSEC_IEVENT_MMWR		0x00000200 /* MII management write completion */
25367196661SRafal Jaworowski #define TSEC_IEVENT_GRSC		0x00000100 /* Graceful receive stop complete */
25467196661SRafal Jaworowski #define TSEC_IEVENT_RXF			0x00000080 /* Receive frame interrupt */
25567196661SRafal Jaworowski 
25667196661SRafal Jaworowski #define TSEC_IMASK_BREN		0x80000000 /* Babbling receiver interrupt */
25767196661SRafal Jaworowski #define TSEC_IMASK_RXCEN	0x40000000 /* Receive control interrupt */
25867196661SRafal Jaworowski #define TSEC_IMASK_BSYEN	0x20000000 /* Busy interrupt */
25967196661SRafal Jaworowski #define TSEC_IMASK_EBERREN	0x10000000 /* Ethernet controller bus error */
26067196661SRafal Jaworowski #define TSEC_IMASK_MSROEN	0x04000000 /* MSTAT register overflow interrupt */
26167196661SRafal Jaworowski #define TSEC_IMASK_GTSCEN	0x02000000 /* Graceful transmit stop complete interrupt */
26267196661SRafal Jaworowski #define TSEC_IMASK_BTEN		0x01000000 /* Babbling transmitter interrupt */
26367196661SRafal Jaworowski #define TSEC_IMASK_TXCEN	0x00800000 /* Transmit control interrupt */
26467196661SRafal Jaworowski #define TSEC_IMASK_TXEEN	0x00400000 /* Transmit error interrupt */
26567196661SRafal Jaworowski #define TSEC_IMASK_TXBEN	0x00200000 /* Transmit buffer interrupt */
26667196661SRafal Jaworowski #define TSEC_IMASK_TXFEN	0x00100000 /* Transmit frame interrupt */
26767196661SRafal Jaworowski #define TSEC_IMASK_LCEN		0x00040000 /* Late collision */
26867196661SRafal Jaworowski #define TSEC_IMASK_CRLEN	0x00020000 /* Collision retry limit/excessive defer */
26967196661SRafal Jaworowski #define TSEC_IMASK_XFUNEN	0x00010000 /* Transmit FIFO underrun */
27067196661SRafal Jaworowski #define TSEC_IMASK_RXBEN	0x00008000 /* Receive buffer interrupt */
27167196661SRafal Jaworowski #define TSEC_IMASK_MMRD		0x00000400 /* MII management read completion */
27267196661SRafal Jaworowski #define TSEC_IMASK_MMWR		0x00000200 /* MII management write completion */
27367196661SRafal Jaworowski #define TSEC_IMASK_GRSCEN	0x00000100 /* Graceful receive stop complete interrupt */
27467196661SRafal Jaworowski #define TSEC_IMASK_RXFEN	0x00000080 /* Receive frame interrupt */
27567196661SRafal Jaworowski 
27667196661SRafal Jaworowski #define TSEC_ATTR_ELCWT		0x00004000 /* Write extracted data to L2 cache */
27767196661SRafal Jaworowski #define TSEC_ATTR_BDLWT		0x00000800 /* Write buffer descriptor to L2 cache */
27867196661SRafal Jaworowski #define TSEC_ATTR_RDSEN		0x00000080 /* Rx data snoop enable */
27967196661SRafal Jaworowski #define TSEC_ATTR_RBDSEN	0x00000040 /* RxBD snoop enable */
28067196661SRafal Jaworowski 
28167196661SRafal Jaworowski #define TSEC_MACCFG1_SOFT_RESET		0x80000000 /* Soft reset */
28267196661SRafal Jaworowski #define TSEC_MACCFG1_RESET_RX_MC	0x00080000 /* Reset receive MAC control block */
28367196661SRafal Jaworowski #define TSEC_MACCFG1_RESET_TX_MC	0x00040000 /* Reset transmit MAC control block */
28467196661SRafal Jaworowski #define TSEC_MACCFG1_RESET_RX_FUN	0x00020000 /* Reset receive function block */
28567196661SRafal Jaworowski #define TSEC_MACCFG1_RESET_TX_FUN	0x00010000 /* Reset transmit function block */
28667196661SRafal Jaworowski #define TSEC_MACCFG1_LOOPBACK		0x00000100 /* Loopback */
28767196661SRafal Jaworowski #define TSEC_MACCFG1_RX_FLOW		0x00000020 /* Receive flow */
28867196661SRafal Jaworowski #define TSEC_MACCFG1_TX_FLOW		0x00000010 /* Transmit flow */
28967196661SRafal Jaworowski #define TSEC_MACCFG1_SYNCD_RX_EN	0x00000008 /* Receive enable synchronized
29067196661SRafal Jaworowski 						    * to the receive stream (Read-only) */
29167196661SRafal Jaworowski #define TSEC_MACCFG1_RX_EN		0x00000004 /* Receive enable */
29267196661SRafal Jaworowski #define TSEC_MACCFG1_SYNCD_TX_EN	0x00000002 /* Transmit enable synchronized
29367196661SRafal Jaworowski 						    * to the transmit stream (Read-only) */
29467196661SRafal Jaworowski #define TSEC_MACCFG1_TX_EN		0x00000001 /* Transmit enable */
29567196661SRafal Jaworowski 
29667196661SRafal Jaworowski #define TSEC_MACCFG2_PRECNT		0x00007000 /* Preamble Length (0x7) */
29767196661SRafal Jaworowski #define TSEC_MACCFG2_IF			0x00000300 /* Determines the type of interface
29867196661SRafal Jaworowski 						    * to which the MAC is connected */
29967196661SRafal Jaworowski #define TSEC_MACCFG2_MII		0x00000100 /* Nibble mode (MII) */
30067196661SRafal Jaworowski #define TSEC_MACCFG2_GMII		0x00000200 /* Byte mode (GMII/TBI) */
30167196661SRafal Jaworowski #define TSEC_MACCFG2_HUGEFRAME		0x00000020 /* Huge frame enable */
30267196661SRafal Jaworowski #define TSEC_MACCFG2_LENGTHCHECK	0x00000010 /* Length check */
30367196661SRafal Jaworowski #define TSEC_MACCFG2_PADCRC		0x00000004 /* Pad and append CRC */
30467196661SRafal Jaworowski #define TSEC_MACCFG2_CRCEN		0x00000002 /* CRC enable */
30567196661SRafal Jaworowski #define TSEC_MACCFG2_FULLDUPLEX		0x00000001 /* Full duplex configure */
30667196661SRafal Jaworowski 
30767196661SRafal Jaworowski #define	TSEC_ECNTRL_STEN		0x00001000 /* Statistics enabled */
30867196661SRafal Jaworowski #define	TSEC_ECNTRL_GMIIM		0x00000040 /* GMII I/F mode */
30967196661SRafal Jaworowski #define	TSEC_ECNTRL_TBIM		0x00000020 /* Ten-bit I/F mode */
31067196661SRafal Jaworowski #define	TSEC_ECNTRL_R100M		0x00000008 /* RGMII/RMII 100 mode */
31167196661SRafal Jaworowski #define	TSEC_ECNTRL_RMM			0x00000004 /* Reduced-pin mode */
31267196661SRafal Jaworowski #define	TSEC_ECNTRL_SGMIIM		0x00000002 /* Serial GMII mode */
31367196661SRafal Jaworowski 
31467196661SRafal Jaworowski #define TSEC_MIIMCFG_RESETMGMT		0x80000000 /* Reset management */
31567196661SRafal Jaworowski #define TSEC_MIIMCFG_NOPRE		0x00000010 /* Preamble suppress */
31667196661SRafal Jaworowski #define TSEC_MIIMCFG_CLKDIV28		0x00000007 /* source clock divided by 28 */
31767196661SRafal Jaworowski #define TSEC_MIIMCFG_CLKDIV20		0x00000006 /* source clock divided by 20 */
31867196661SRafal Jaworowski #define TSEC_MIIMCFG_CLKDIV14		0x00000005 /* source clock divided by 14 */
31967196661SRafal Jaworowski #define TSEC_MIIMCFG_CLKDIV10		0x00000004 /* source clock divided by 10 */
32067196661SRafal Jaworowski #define TSEC_MIIMCFG_CLKDIV8		0x00000003 /* source clock divided by 8 */
32167196661SRafal Jaworowski #define TSEC_MIIMCFG_CLKDIV6		0x00000002 /* source clock divided by 6 */
32267196661SRafal Jaworowski #define TSEC_MIIMCFG_CLKDIV4		0x00000001 /* source clock divided by 4 */
32367196661SRafal Jaworowski 
32467196661SRafal Jaworowski #define TSEC_MIIMIND_NOTVALID		0x00000004 /* Not valid */
32567196661SRafal Jaworowski #define TSEC_MIIMIND_SCAN		0x00000002 /* Scan in progress */
32667196661SRafal Jaworowski #define TSEC_MIIMIND_BUSY		0x00000001 /* Busy */
32767196661SRafal Jaworowski 
32867196661SRafal Jaworowski #define TSEC_MIIMCOM_SCANCYCLE		0x00000002 /* Scan cycle */
32967196661SRafal Jaworowski #define TSEC_MIIMCOM_READCYCLE		0x00000001 /* Read cycle */
33067196661SRafal Jaworowski 
33167196661SRafal Jaworowski /* Transmit Data Buffer Descriptor (TxBD) Field Descriptions */
33267196661SRafal Jaworowski #define TSEC_TXBD_R		0x8000 /* Ready */
33367196661SRafal Jaworowski #define TSEC_TXBD_PADCRC	0x4000 /* PAD/CRC */
33467196661SRafal Jaworowski #define TSEC_TXBD_W		0x2000 /* Wrap */
33567196661SRafal Jaworowski #define TSEC_TXBD_I		0x1000 /* Interrupt */
33667196661SRafal Jaworowski #define TSEC_TXBD_L		0x0800 /* Last in frame */
33767196661SRafal Jaworowski #define TSEC_TXBD_TC		0x0400 /* Tx CRC */
33867196661SRafal Jaworowski #define TSEC_TXBD_DEF		0x0200 /* Defer indication */
33967196661SRafal Jaworowski #define TSEC_TXBD_TO1		0x0100 /* Transmit software ownership */
34067196661SRafal Jaworowski #define TSEC_TXBD_HFE		0x0080 /* Huge frame enable (written by user) */
34167196661SRafal Jaworowski #define TSEC_TXBD_LC		0x0080 /* Late collision (written by TSEC) */
34267196661SRafal Jaworowski #define TSEC_TXBD_RL		0x0040 /* Retransmission Limit */
343bd37530eSRafal Jaworowski #define TSEC_TXBD_TOE		0x0002 /* TCP/IP Offload Enable */
34467196661SRafal Jaworowski #define TSEC_TXBD_UN		0x0002 /* Underrun */
34567196661SRafal Jaworowski #define TSEC_TXBD_TXTRUNC	0x0001 /* TX truncation */
34667196661SRafal Jaworowski 
34767196661SRafal Jaworowski /* Receive Data Buffer Descriptor (RxBD) Field Descriptions */
34867196661SRafal Jaworowski #define TSEC_RXBD_E		0x8000 /* Empty */
34967196661SRafal Jaworowski #define TSEC_RXBD_RO1		0x4000 /* Receive software ownership bit */
35067196661SRafal Jaworowski #define TSEC_RXBD_W		0x2000 /* Wrap */
35167196661SRafal Jaworowski #define TSEC_RXBD_I		0x1000 /* Interrupt */
35267196661SRafal Jaworowski #define TSEC_RXBD_L		0x0800 /* Last in frame */
35367196661SRafal Jaworowski #define TSEC_RXBD_F		0x0400 /* First in frame */
35467196661SRafal Jaworowski #define TSEC_RXBD_M		0x0100 /* Miss - The frame was received because
35567196661SRafal Jaworowski 					* of promiscuous mode. */
35667196661SRafal Jaworowski #define TSEC_RXBD_B		0x0080 /* Broadcast */
35767196661SRafal Jaworowski #define TSEC_RXBD_MC		0x0040 /* Multicast */
35867196661SRafal Jaworowski #define TSEC_RXBD_LG		0x0020 /* Large - Rx frame length violation */
35967196661SRafal Jaworowski #define TSEC_RXBD_NO		0x0010 /* Rx non-octet aligned frame */
36067196661SRafal Jaworowski #define TSEC_RXBD_SH		0x0008 /* Short frame */
36167196661SRafal Jaworowski #define TSEC_RXBD_CR		0x0004 /* Rx CRC error */
36267196661SRafal Jaworowski #define TSEC_RXBD_OV		0x0002 /* Overrun */
36367196661SRafal Jaworowski #define TSEC_RXBD_TR		0x0001 /* Truncation */
36467196661SRafal Jaworowski #define TSEC_RXBD_ZEROONINIT (TSEC_RXBD_TR | TSEC_RXBD_OV | TSEC_RXBD_CR |  \
36567196661SRafal Jaworowski 		TSEC_RXBD_SH | TSEC_RXBD_NO | TSEC_RXBD_LG | TSEC_RXBD_MC | \
36667196661SRafal Jaworowski 		TSEC_RXBD_B | TSEC_RXBD_M)
36767196661SRafal Jaworowski 
36867196661SRafal Jaworowski #define TSEC_TXBUFFER_ALIGNMENT		64
36967196661SRafal Jaworowski #define TSEC_RXBUFFER_ALIGNMENT		64
370bd37530eSRafal Jaworowski 
371bd37530eSRafal Jaworowski /* Transmit Path Off-Load Frame Control Block flags */
372bd37530eSRafal Jaworowski #define TSEC_TX_FCB_VLAN		0x8000 /* VLAN control word valid */
373bd37530eSRafal Jaworowski #define TSEC_TX_FCB_L3_IS_IP		0x4000 /* Layer 3 header is an IP header */
374bd37530eSRafal Jaworowski #define TSEC_TX_FCB_L3_IS_IP6		0x2000 /* IP header is IP version 6 */
375bd37530eSRafal Jaworowski #define TSEC_TX_FCB_L4_IS_TCP_UDP	0x1000 /* Layer 4 header is a TCP or UDP header */
376bd37530eSRafal Jaworowski #define TSEC_TX_FCB_L4_IS_UDP		0x0800 /* UDP protocol at layer 4 */
377bd37530eSRafal Jaworowski #define TSEC_TX_FCB_CSUM_IP		0x0400 /* Checksum IP header enable */
378bd37530eSRafal Jaworowski #define TSEC_TX_FCB_CSUM_TCP_UDP	0x0200 /* Checksum TCP or UDP header enable */
379bd37530eSRafal Jaworowski #define TSEC_TX_FCB_FLAG_NO_PH_CSUM	0x0100 /* Disable pseudo-header checksum */
380bd37530eSRafal Jaworowski #define TSEC_TX_FCB_FLAG_PTP		0x0001 /* This is a PTP packet */
381bd37530eSRafal Jaworowski 
382bd37530eSRafal Jaworowski /* Receive Path Off-Load Frame Control Block flags */
383bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_VLAN		0x8000 /* VLAN tag recognized */
384bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_IP_FOUND		0x4000 /* IP header found at layer 3 */
385bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_IP6_FOUND		0x2000 /* IP version 6 header found at layer 3 */
386bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_TCP_UDP_FOUND	0x1000 /* TCP or UDP header found at layer 4 */
387bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_IP_CSUM		0x0800 /* IPv4 header checksum checked */
388bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_TCP_UDP_CSUM	0x0400 /* TCP or UDP header checksum checked */
389bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_IP_CSUM_ERROR	0x0200 /* IPv4 header checksum verification error */
390bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_TCP_UDP_CSUM_ERROR	0x0100 /* TCP or UDP header checksum verification error */
391bd37530eSRafal Jaworowski #define	TSEC_RX_FCB_PARSE_ERROR		0x000C /* Parse error */
392