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