1*86d7f5d3SJohn Marino /*- 2*86d7f5d3SJohn Marino * Copyright (c) 2008 Stanislav Sedov <stas@FreeBSD.org>. 3*86d7f5d3SJohn Marino * All rights reserved. 4*86d7f5d3SJohn Marino * 5*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 6*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 7*86d7f5d3SJohn Marino * are met: 8*86d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 9*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 10*86d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 11*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 12*86d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 13*86d7f5d3SJohn Marino * 14*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15*86d7f5d3SJohn Marino * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16*86d7f5d3SJohn Marino * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17*86d7f5d3SJohn Marino * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18*86d7f5d3SJohn Marino * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19*86d7f5d3SJohn Marino * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20*86d7f5d3SJohn Marino * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21*86d7f5d3SJohn Marino * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22*86d7f5d3SJohn Marino * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23*86d7f5d3SJohn Marino * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24*86d7f5d3SJohn Marino * 25*86d7f5d3SJohn Marino * $FreeBSD: src/sys/dev/ae/if_aereg.h,v 1.1.2.1.4.1 2009/04/15 03:14:26 kensmith Exp $ 26*86d7f5d3SJohn Marino */ 27*86d7f5d3SJohn Marino 28*86d7f5d3SJohn Marino /* 29*86d7f5d3SJohn Marino * Master configuration register 30*86d7f5d3SJohn Marino */ 31*86d7f5d3SJohn Marino #define AE_MASTER_REG 0x1400 32*86d7f5d3SJohn Marino 33*86d7f5d3SJohn Marino #define AE_MASTER_SOFT_RESET 0x1 /* Reset adapter. */ 34*86d7f5d3SJohn Marino #define AE_MASTER_MTIMER_EN 0x2 /* Unknown. */ 35*86d7f5d3SJohn Marino #define AE_MASTER_IMT_EN 0x4 /* Interrupt moderation timer enable. */ 36*86d7f5d3SJohn Marino #define AE_MASTER_MANUAL_INT 0x8 /* Software manual interrupt. */ 37*86d7f5d3SJohn Marino #define AE_MASTER_REVNUM_SHIFT 16 /* Chip revision number. */ 38*86d7f5d3SJohn Marino #define AE_MASTER_REVNUM_MASK 0xff 39*86d7f5d3SJohn Marino #define AE_MASTER_DEVID_SHIFT 24 /* PCI device id. */ 40*86d7f5d3SJohn Marino #define AE_MASTER_DEVID_MASK 0xff 41*86d7f5d3SJohn Marino 42*86d7f5d3SJohn Marino /* 43*86d7f5d3SJohn Marino * Interrupt status register 44*86d7f5d3SJohn Marino */ 45*86d7f5d3SJohn Marino #define AE_ISR_REG 0x1600 46*86d7f5d3SJohn Marino #define AE_ISR_TIMER 0x00000001 /* Counter expired. */ 47*86d7f5d3SJohn Marino #define AE_ISR_MANUAL 0x00000002 /* Manual interrupt occuried. */ 48*86d7f5d3SJohn Marino #define AE_ISR_RXF_OVERFLOW 0x00000004 /* RxF overflow occuried. */ 49*86d7f5d3SJohn Marino #define AE_ISR_TXF_UNDERRUN 0x00000008 /* TxF underrun occuried. */ 50*86d7f5d3SJohn Marino #define AE_ISR_TXS_OVERFLOW 0x00000010 /* TxS overflow occuried. */ 51*86d7f5d3SJohn Marino #define AE_ISR_RXS_OVERFLOW 0x00000020 /* Internal RxS ring overflow. */ 52*86d7f5d3SJohn Marino #define AE_ISR_LINK_CHG 0x00000040 /* Link state changed. */ 53*86d7f5d3SJohn Marino #define AE_ISR_TXD_UNDERRUN 0x00000080 /* TxD underrun occuried. */ 54*86d7f5d3SJohn Marino #define AE_ISR_RXD_OVERFLOW 0x00000100 /* RxD overflow occuried. */ 55*86d7f5d3SJohn Marino #define AE_ISR_DMAR_TIMEOUT 0x00000200 /* DMA read timeout. */ 56*86d7f5d3SJohn Marino #define AE_ISR_DMAW_TIMEOUT 0x00000400 /* DMA write timeout. */ 57*86d7f5d3SJohn Marino #define AE_ISR_PHY 0x00000800 /* PHY interrupt. */ 58*86d7f5d3SJohn Marino #define AE_ISR_TXS_UPDATED 0x00010000 /* Tx status updated. */ 59*86d7f5d3SJohn Marino #define AE_ISR_RXD_UPDATED 0x00020000 /* Rx status updated. */ 60*86d7f5d3SJohn Marino #define AE_ISR_TX_EARLY 0x00040000 /* TxMAC started transmit. */ 61*86d7f5d3SJohn Marino #define AE_ISR_FIFO_UNDERRUN 0x01000000 /* FIFO underrun. */ 62*86d7f5d3SJohn Marino #define AE_ISR_FRAME_ERROR 0x02000000 /* Frame receive error. */ 63*86d7f5d3SJohn Marino #define AE_ISR_FRAME_SUCCESS 0x04000000 /* Frame receive success. */ 64*86d7f5d3SJohn Marino #define AE_ISR_CRC_ERROR 0x08000000 /* CRC error occuried. */ 65*86d7f5d3SJohn Marino #define AE_ISR_PHY_LINKDOWN 0x10000000 /* PHY link down. */ 66*86d7f5d3SJohn Marino #define AE_ISR_DISABLE 0x80000000 /* Disable interrupts. */ 67*86d7f5d3SJohn Marino 68*86d7f5d3SJohn Marino #define AE_ISR_TX_EVENT (AE_ISR_TXF_UNDERRUN | AE_ISR_TXS_OVERFLOW | \ 69*86d7f5d3SJohn Marino AE_ISR_TXD_UNDERRUN | AE_ISR_TXS_UPDATED | \ 70*86d7f5d3SJohn Marino AE_ISR_TX_EARLY) 71*86d7f5d3SJohn Marino #define AE_ISR_RX_EVENT (AE_ISR_RXF_OVERFLOW | AE_ISR_RXS_OVERFLOW | \ 72*86d7f5d3SJohn Marino AE_ISR_RXD_OVERFLOW | AE_ISR_RXD_UPDATED) 73*86d7f5d3SJohn Marino 74*86d7f5d3SJohn Marino /* Interrupt mask register. */ 75*86d7f5d3SJohn Marino #define AE_IMR_REG 0x1604 76*86d7f5d3SJohn Marino 77*86d7f5d3SJohn Marino #define AE_IMR_DEFAULT (AE_ISR_DMAR_TIMEOUT | AE_ISR_DMAW_TIMEOUT | \ 78*86d7f5d3SJohn Marino AE_ISR_PHY_LINKDOWN | \ 79*86d7f5d3SJohn Marino AE_ISR_TXS_UPDATED | AE_ISR_RXD_UPDATED ) 80*86d7f5d3SJohn Marino 81*86d7f5d3SJohn Marino /* 82*86d7f5d3SJohn Marino * Ethernet address register. 83*86d7f5d3SJohn Marino */ 84*86d7f5d3SJohn Marino #define AE_EADDR0_REG 0x1488 /* 5 - 2 bytes */ 85*86d7f5d3SJohn Marino #define AE_EADDR1_REG 0x148c /* 1 - 0 bytes */ 86*86d7f5d3SJohn Marino 87*86d7f5d3SJohn Marino /* 88*86d7f5d3SJohn Marino * Desriptor rings registers. 89*86d7f5d3SJohn Marino * L2 supports 64-bit addressing but all rings base addresses 90*86d7f5d3SJohn Marino * should have the same high 32 bits of address. 91*86d7f5d3SJohn Marino */ 92*86d7f5d3SJohn Marino #define AE_DESC_ADDR_HI_REG 0x1540 /* High 32 bits of ring base address. */ 93*86d7f5d3SJohn Marino #define AE_RXD_ADDR_LO_REG 0x1554 /* Low 32 bits of RxD ring address. */ 94*86d7f5d3SJohn Marino #define AE_TXD_ADDR_LO_REG 0x1544 /* Low 32 bits of TxD ring address. */ 95*86d7f5d3SJohn Marino #define AE_TXS_ADDR_LO_REG 0x154c /* Low 32 bits of TxS ring address. */ 96*86d7f5d3SJohn Marino #define AE_RXD_COUNT_REG 0x1558 /* Number of RxD descriptors in ring. 97*86d7f5d3SJohn Marino Should be 120-byte aligned (i.e. 98*86d7f5d3SJohn Marino the 'data' field of RxD should 99*86d7f5d3SJohn Marino have 128-byte alignment). */ 100*86d7f5d3SJohn Marino #define AE_TXD_BUFSIZE_REG 0x1548 /* Size of TxD ring in 4-byte units. 101*86d7f5d3SJohn Marino Should be 4-byte aligned. */ 102*86d7f5d3SJohn Marino #define AE_TXS_COUNT_REG 0x1550 /* Number of TxS descriptors in ring. 103*86d7f5d3SJohn Marino 4 byte alignment. */ 104*86d7f5d3SJohn Marino #define AE_RXD_COUNT_MIN 16 105*86d7f5d3SJohn Marino #define AE_RXD_COUNT_MAX 512 106*86d7f5d3SJohn Marino #define AE_RXD_COUNT_DEFAULT 64 107*86d7f5d3SJohn Marino 108*86d7f5d3SJohn Marino #define AE_TXD_BUFSIZE_MIN 4096 109*86d7f5d3SJohn Marino #define AE_TXD_BUFSIZE_MAX 65536 110*86d7f5d3SJohn Marino #define AE_TXD_BUFSIZE_DEFAULT 8192 111*86d7f5d3SJohn Marino 112*86d7f5d3SJohn Marino #define AE_TXS_COUNT_MIN 8 /* Not sure. */ 113*86d7f5d3SJohn Marino #define AE_TXS_COUNT_MAX 160 114*86d7f5d3SJohn Marino #define AE_TXS_COUNT_DEFAULT 64 /* AE_TXD_BUFSIZE_DEFAULT / 128 */ 115*86d7f5d3SJohn Marino 116*86d7f5d3SJohn Marino /* 117*86d7f5d3SJohn Marino * Inter-frame gap configuration register. 118*86d7f5d3SJohn Marino */ 119*86d7f5d3SJohn Marino #define AE_IFG_REG 0x1484 120*86d7f5d3SJohn Marino 121*86d7f5d3SJohn Marino #define AE_IFG_TXIPG_DEFAULT 0x60 /* 96-bit IFG time. */ 122*86d7f5d3SJohn Marino #define AE_IFG_TXIPG_SHIFT 0 123*86d7f5d3SJohn Marino #define AE_IFG_TXIPG_MASK 0x7f 124*86d7f5d3SJohn Marino 125*86d7f5d3SJohn Marino #define AE_IFG_RXIPG_DEFAULT 0x50 /* 80-bit IFG time. */ 126*86d7f5d3SJohn Marino #define AE_IFG_RXIPG_SHIFT 8 127*86d7f5d3SJohn Marino #define AE_IFG_RXIPG_MASK 0xff00 128*86d7f5d3SJohn Marino 129*86d7f5d3SJohn Marino #define AE_IFG_IPGR1_DEFAULT 0x40 /* Carrier-sense window. */ 130*86d7f5d3SJohn Marino #define AE_IFG_IPGR1_SHIFT 16 131*86d7f5d3SJohn Marino #define AE_IFG_IPGR1_MASK 0x7f0000 132*86d7f5d3SJohn Marino 133*86d7f5d3SJohn Marino #define AE_IFG_IPGR2_DEFAULT 0x60 /* IFG window. */ 134*86d7f5d3SJohn Marino #define AE_IFG_IPGR2_SHIFT 24 135*86d7f5d3SJohn Marino #define AE_IFG_IPGR2_MASK 0x7f000000 136*86d7f5d3SJohn Marino 137*86d7f5d3SJohn Marino /* 138*86d7f5d3SJohn Marino * Half-duplex mode configuration register. 139*86d7f5d3SJohn Marino */ 140*86d7f5d3SJohn Marino #define AE_HDPX_REG 0x1498 141*86d7f5d3SJohn Marino 142*86d7f5d3SJohn Marino /* Collision window. */ 143*86d7f5d3SJohn Marino #define AE_HDPX_LCOL_SHIFT 0 144*86d7f5d3SJohn Marino #define AE_HDPX_LCOL_MASK 0x000003ff 145*86d7f5d3SJohn Marino #define AE_HDPX_LCOL_DEFAULT 0x37 146*86d7f5d3SJohn Marino 147*86d7f5d3SJohn Marino /* Max retransmission time, after that the packet will be discarded. */ 148*86d7f5d3SJohn Marino #define AE_HDPX_RETRY_SHIFT 12 149*86d7f5d3SJohn Marino #define AE_HDPX_RETRY_MASK 0x0000f000 150*86d7f5d3SJohn Marino #define AE_HDPX_RETRY_DEFAULT 0x0f 151*86d7f5d3SJohn Marino 152*86d7f5d3SJohn Marino /* Alternative binary exponential back-off time. */ 153*86d7f5d3SJohn Marino #define AE_HDPX_ABEBT_SHIFT 20 154*86d7f5d3SJohn Marino #define AE_HDPX_ABEBT_MASK 0x00f00000 155*86d7f5d3SJohn Marino #define AE_HDPX_ABEBT_DEFAULT 0x0a 156*86d7f5d3SJohn Marino 157*86d7f5d3SJohn Marino /* IFG to start JAM for collision based flow control (8-bit time units).*/ 158*86d7f5d3SJohn Marino #define AE_HDPX_JAMIPG_SHIFT 24 159*86d7f5d3SJohn Marino #define AE_HDPX_JAMIPG_MASK 0x0f000000 160*86d7f5d3SJohn Marino #define AE_HDPX_JAMIPG_DEFAULT 0x07 161*86d7f5d3SJohn Marino 162*86d7f5d3SJohn Marino /* Allow the transmission of a packet which has been excessively deferred. */ 163*86d7f5d3SJohn Marino #define AE_HDPX_EXC_EN 0x00010000 164*86d7f5d3SJohn Marino /* No back-off on collision, immediately start the retransmission. */ 165*86d7f5d3SJohn Marino #define AE_HDPX_NO_BACK_C 0x00020000 166*86d7f5d3SJohn Marino /* No back-off on backpressure, immediately start the transmission. */ 167*86d7f5d3SJohn Marino #define AE_HDPX_NO_BACK_P 0x00040000 168*86d7f5d3SJohn Marino /* Alternative binary exponential back-off enable. */ 169*86d7f5d3SJohn Marino #define AE_HDPX_ABEBE 0x00080000 170*86d7f5d3SJohn Marino 171*86d7f5d3SJohn Marino /* 172*86d7f5d3SJohn Marino * Interrupt moderation timer configuration register. 173*86d7f5d3SJohn Marino */ 174*86d7f5d3SJohn Marino #define AE_IMT_REG 0x1408 /* Timer value in 2 us units. */ 175*86d7f5d3SJohn Marino #define AE_IMT_MAX 65000 176*86d7f5d3SJohn Marino #define AE_IMT_MIN 50 177*86d7f5d3SJohn Marino #define AE_IMT_DEFAULT 100 /* 200 microseconds. */ 178*86d7f5d3SJohn Marino 179*86d7f5d3SJohn Marino /* 180*86d7f5d3SJohn Marino * Interrupt clearing timer configuration register. 181*86d7f5d3SJohn Marino */ 182*86d7f5d3SJohn Marino #define AE_ICT_REG 0x140e /* Maximum time allowed to clear 183*86d7f5d3SJohn Marino interrupt. In 2 us units. */ 184*86d7f5d3SJohn Marino #define AE_ICT_DEFAULT 50000 /* 100ms */ 185*86d7f5d3SJohn Marino 186*86d7f5d3SJohn Marino /* 187*86d7f5d3SJohn Marino * MTU configuration register. 188*86d7f5d3SJohn Marino */ 189*86d7f5d3SJohn Marino #define AE_MTU_REG 0x149c /* MTU size in bytes. */ 190*86d7f5d3SJohn Marino 191*86d7f5d3SJohn Marino /* 192*86d7f5d3SJohn Marino * Cut-through configuration register. 193*86d7f5d3SJohn Marino */ 194*86d7f5d3SJohn Marino #define AE_CUT_THRESH_REG 0x1590 /* Cut-through threshold in unknown units. */ 195*86d7f5d3SJohn Marino #define AE_CUT_THRESH_DEFAULT 0x177 196*86d7f5d3SJohn Marino 197*86d7f5d3SJohn Marino /* 198*86d7f5d3SJohn Marino * Flow-control configuration registers. 199*86d7f5d3SJohn Marino */ 200*86d7f5d3SJohn Marino #define AE_FLOW_THRESH_HI_REG 0x15a8 /* High watermark of RxD 201*86d7f5d3SJohn Marino overflow threshold. */ 202*86d7f5d3SJohn Marino #define AE_FLOW_THRESH_LO_REG 0x15aa /* Lower watermark of RxD 203*86d7f5d3SJohn Marino overflow threshold */ 204*86d7f5d3SJohn Marino 205*86d7f5d3SJohn Marino /* 206*86d7f5d3SJohn Marino * Mailbox configuration registers. 207*86d7f5d3SJohn Marino */ 208*86d7f5d3SJohn Marino #define AE_MB_TXD_IDX_REG 0x15f0 /* TxD read index. */ 209*86d7f5d3SJohn Marino #define AE_MB_RXD_IDX_REG 0x15f4 /* RxD write index. */ 210*86d7f5d3SJohn Marino 211*86d7f5d3SJohn Marino /* 212*86d7f5d3SJohn Marino * DMA configuration registers. 213*86d7f5d3SJohn Marino */ 214*86d7f5d3SJohn Marino #define AE_DMAREAD_REG 0x1580 /* Read DMA configuration register. */ 215*86d7f5d3SJohn Marino #define AE_DMAREAD_EN 1 216*86d7f5d3SJohn Marino #define AE_DMAWRITE_REG 0x15a0 /* Write DMA configuration register. */ 217*86d7f5d3SJohn Marino #define AE_DMAWRITE_EN 1 218*86d7f5d3SJohn Marino 219*86d7f5d3SJohn Marino /* 220*86d7f5d3SJohn Marino * MAC configuration register. 221*86d7f5d3SJohn Marino */ 222*86d7f5d3SJohn Marino #define AE_MAC_REG 0x1480 223*86d7f5d3SJohn Marino 224*86d7f5d3SJohn Marino #define AE_MAC_TX_EN 0x00000001 /* Enable transmit. */ 225*86d7f5d3SJohn Marino #define AE_MAC_RX_EN 0x00000002 /* Enable receive. */ 226*86d7f5d3SJohn Marino #define AE_MAC_TX_FLOW_EN 0x00000004 /* Enable Tx flow control. */ 227*86d7f5d3SJohn Marino #define AE_MAC_RX_FLOW_EN 0x00000008 /* Enable Rx flow control. */ 228*86d7f5d3SJohn Marino #define AE_MAC_LOOPBACK 0x00000010 /* Loopback at MII. */ 229*86d7f5d3SJohn Marino #define AE_MAC_FULL_DUPLEX 0x00000020 /* Enable full-duplex. */ 230*86d7f5d3SJohn Marino #define AE_MAC_TX_CRC_EN 0x00000040 /* Enable CRC generation. */ 231*86d7f5d3SJohn Marino #define AE_MAC_TX_AUTOPAD 0x00000080 /* Pad short frames. */ 232*86d7f5d3SJohn Marino #define AE_MAC_PREAMBLE_MASK 0x00003c00 /* Preamble length. */ 233*86d7f5d3SJohn Marino #define AE_MAC_PREAMBLE_SHIFT 10 234*86d7f5d3SJohn Marino #define AE_MAC_PREAMBLE_DEFAULT 0x07 /* By standard. */ 235*86d7f5d3SJohn Marino #define AE_MAC_RMVLAN_EN 0x00004000 /* Remove VLAN tags in 236*86d7f5d3SJohn Marino incoming packets. */ 237*86d7f5d3SJohn Marino #define AE_MAC_PROMISC_EN 0x00008000 /* Enable promiscue mode. */ 238*86d7f5d3SJohn Marino #define AE_MAC_TX_MAXBACKOFF 0x00100000 /* Unknown. */ 239*86d7f5d3SJohn Marino #define AE_MAC_MCAST_EN 0x02000000 /* Pass all multicast frames. */ 240*86d7f5d3SJohn Marino #define AE_MAC_BCAST_EN 0x04000000 /* Pass all broadcast frames. */ 241*86d7f5d3SJohn Marino #define AE_MAC_CLK_PHY 0x08000000 /* If 1 uses loopback clock 242*86d7f5d3SJohn Marino PHY, if 0 - system clock. */ 243*86d7f5d3SJohn Marino #define AE_HALFBUF_MASK 0xf0000000 /* Half-duplex retry buffer. */ 244*86d7f5d3SJohn Marino #define AE_HALFBUF_SHIFT 28 245*86d7f5d3SJohn Marino #define AE_HALFBUF_DEFAULT 2 /* XXX: From Linux. */ 246*86d7f5d3SJohn Marino 247*86d7f5d3SJohn Marino /* 248*86d7f5d3SJohn Marino * MDIO control register. 249*86d7f5d3SJohn Marino */ 250*86d7f5d3SJohn Marino #define AE_MDIO_REG 0x1414 251*86d7f5d3SJohn Marino #define AE_MDIO_DATA_MASK 0xffff 252*86d7f5d3SJohn Marino #define AE_MDIO_DATA_SHIFT 0 253*86d7f5d3SJohn Marino #define AE_MDIO_REGADDR_MASK 0x1f0000 254*86d7f5d3SJohn Marino #define AE_MDIO_REGADDR_SHIFT 16 255*86d7f5d3SJohn Marino #define AE_MDIO_READ 0x00200000 /* Read operation. */ 256*86d7f5d3SJohn Marino #define AE_MDIO_SUP_PREAMBLE 0x00400000 /* Suppress preamble. */ 257*86d7f5d3SJohn Marino #define AE_MDIO_START 0x00800000 /* Initiate MDIO transfer. */ 258*86d7f5d3SJohn Marino #define AE_MDIO_CLK_SHIFT 24 /* Clock selection. */ 259*86d7f5d3SJohn Marino #define AE_MDIO_CLK_MASK 0x07000000 /* Clock selection. */ 260*86d7f5d3SJohn Marino #define AE_MDIO_CLK_25_4 0 /* Dividers? */ 261*86d7f5d3SJohn Marino #define AE_MDIO_CLK_25_6 2 262*86d7f5d3SJohn Marino #define AE_MDIO_CLK_25_8 3 263*86d7f5d3SJohn Marino #define AE_MDIO_CLK_25_10 4 264*86d7f5d3SJohn Marino #define AE_MDIO_CLK_25_14 5 265*86d7f5d3SJohn Marino #define AE_MDIO_CLK_25_20 6 266*86d7f5d3SJohn Marino #define AE_MDIO_CLK_25_28 7 267*86d7f5d3SJohn Marino #define AE_MDIO_BUSY 0x08000000 /* MDIO is busy. */ 268*86d7f5d3SJohn Marino 269*86d7f5d3SJohn Marino /* 270*86d7f5d3SJohn Marino * Idle status register. 271*86d7f5d3SJohn Marino */ 272*86d7f5d3SJohn Marino #define AE_IDLE_REG 0x1410 273*86d7f5d3SJohn Marino 274*86d7f5d3SJohn Marino /* 275*86d7f5d3SJohn Marino * Idle status bits. 276*86d7f5d3SJohn Marino * If bit is set then the corresponding module is in non-idle state. 277*86d7f5d3SJohn Marino */ 278*86d7f5d3SJohn Marino #define AE_IDLE_RXMAC 1 279*86d7f5d3SJohn Marino #define AE_IDLE_TXMAC 2 280*86d7f5d3SJohn Marino #define AE_IDLE_DMAREAD 8 281*86d7f5d3SJohn Marino #define AE_IDLE_DMAWRITE 4 282*86d7f5d3SJohn Marino 283*86d7f5d3SJohn Marino /* 284*86d7f5d3SJohn Marino * Multicast hash tables registers. 285*86d7f5d3SJohn Marino */ 286*86d7f5d3SJohn Marino #define AE_REG_MHT0 0x1490 287*86d7f5d3SJohn Marino #define AE_REG_MHT1 0x1494 288*86d7f5d3SJohn Marino 289*86d7f5d3SJohn Marino /* 290*86d7f5d3SJohn Marino * Wake on lan (WOL). 291*86d7f5d3SJohn Marino */ 292*86d7f5d3SJohn Marino #define AE_WOL_REG 0x14a0 293*86d7f5d3SJohn Marino #define AE_WOL_MAGIC 0x00000004 294*86d7f5d3SJohn Marino #define AE_WOL_MAGIC_PME 0x00000008 295*86d7f5d3SJohn Marino #define AE_WOL_LNKCHG 0x00000010 296*86d7f5d3SJohn Marino #define AE_WOL_LNKCHG_PME 0x00000020 297*86d7f5d3SJohn Marino 298*86d7f5d3SJohn Marino /* 299*86d7f5d3SJohn Marino * PCIE configuration registers. Descriptions unknown. 300*86d7f5d3SJohn Marino */ 301*86d7f5d3SJohn Marino #define AE_PCIE_LTSSM_TESTMODE_REG 0x12fc 302*86d7f5d3SJohn Marino #define AE_PCIE_LTSSM_TESTMODE_DEFAULT 0x6500 303*86d7f5d3SJohn Marino #define AE_PCIE_DLL_TX_CTRL_REG 0x1104 304*86d7f5d3SJohn Marino #define AE_PCIE_DLL_TX_CTRL_SEL_NOR_CLK 0x0400 305*86d7f5d3SJohn Marino #define AE_PCIE_DLL_TX_CTRL_DEFAULT 0x0568 306*86d7f5d3SJohn Marino #define AE_PCIE_PHYMISC_REG 0x1000 307*86d7f5d3SJohn Marino #define AE_PCIE_PHYMISC_FORCE_RCV_DET 0x4 308*86d7f5d3SJohn Marino 309*86d7f5d3SJohn Marino /* 310*86d7f5d3SJohn Marino * PHY enable register. 311*86d7f5d3SJohn Marino */ 312*86d7f5d3SJohn Marino #define AE_PHY_ENABLE_REG 0x140c 313*86d7f5d3SJohn Marino #define AE_PHY_ENABLE 1 314*86d7f5d3SJohn Marino 315*86d7f5d3SJohn Marino /* 316*86d7f5d3SJohn Marino * VPD registers. 317*86d7f5d3SJohn Marino */ 318*86d7f5d3SJohn Marino #define AE_VPD_CAP_REG 0x6c /* Command register. */ 319*86d7f5d3SJohn Marino #define AE_VPD_CAP_ID_MASK 0xff 320*86d7f5d3SJohn Marino #define AE_VPD_CAP_ID_SHIFT 0 321*86d7f5d3SJohn Marino #define AE_VPD_CAP_NEXT_MASK 0xff00 322*86d7f5d3SJohn Marino #define AE_VPD_CAP_NEXT_SHIFT 8 323*86d7f5d3SJohn Marino #define AE_VPD_CAP_ADDR_MASK 0x7fff0000 324*86d7f5d3SJohn Marino #define AE_VPD_CAP_ADDR_SHIFT 16 325*86d7f5d3SJohn Marino #define AE_VPD_CAP_DONE 0x80000000 326*86d7f5d3SJohn Marino #define AE_VPD_DATA_REG 0x70 /* Data register. */ 327*86d7f5d3SJohn Marino 328*86d7f5d3SJohn Marino #define AE_VPD_NREGS 64 /* Maximum number of VPD regs. */ 329*86d7f5d3SJohn Marino #define AE_VPD_SIG_MASK 0xff 330*86d7f5d3SJohn Marino #define AE_VPD_SIG 0x5a /* VPD block signature. */ 331*86d7f5d3SJohn Marino #define AE_VPD_REG_SHIFT 16 /* Register id offset. */ 332*86d7f5d3SJohn Marino 333*86d7f5d3SJohn Marino /* 334*86d7f5d3SJohn Marino * SPI registers. 335*86d7f5d3SJohn Marino */ 336*86d7f5d3SJohn Marino #define AE_SPICTL_REG 0x200 337*86d7f5d3SJohn Marino #define AE_SPICTL_VPD_EN 0x2000 /* Enable VPD. */ 338*86d7f5d3SJohn Marino 339*86d7f5d3SJohn Marino /* 340*86d7f5d3SJohn Marino * PHY-specific registers constants. 341*86d7f5d3SJohn Marino */ 342*86d7f5d3SJohn Marino #define AE_PHY_DBG_ADDR 0x1d 343*86d7f5d3SJohn Marino #define AE_PHY_DBG_DATA 0x1e 344*86d7f5d3SJohn Marino #define AE_PHY_DBG_POWERSAVE 0x1000 345*86d7f5d3SJohn Marino 346*86d7f5d3SJohn Marino /* 347*86d7f5d3SJohn Marino * TxD flags. 348*86d7f5d3SJohn Marino */ 349*86d7f5d3SJohn Marino #define AE_TXD_INSERT_VTAG 0x8000 /* Insert VLAN tag on transfer. */ 350*86d7f5d3SJohn Marino 351*86d7f5d3SJohn Marino /* 352*86d7f5d3SJohn Marino * TxS flags. 353*86d7f5d3SJohn Marino */ 354*86d7f5d3SJohn Marino #define AE_TXS_SUCCESS 0x0001 /* Packed transmitted successfully. */ 355*86d7f5d3SJohn Marino #define AE_TXS_BCAST 0x0002 /* Transmitted broadcast frame. */ 356*86d7f5d3SJohn Marino #define AE_TXS_MCAST 0x0004 /* Transmitted multicast frame. */ 357*86d7f5d3SJohn Marino #define AE_TXS_PAUSE 0x0008 /* Transmitted pause frame. */ 358*86d7f5d3SJohn Marino #define AE_TXS_CTRL 0x0010 /* Transmitted control frame. */ 359*86d7f5d3SJohn Marino #define AE_TXS_DEFER 0x0020 /* Frame transmitted with defer. */ 360*86d7f5d3SJohn Marino #define AE_TXS_EXCDEFER 0x0040 /* Excessive collision. */ 361*86d7f5d3SJohn Marino #define AE_TXS_SINGLECOL 0x0080 /* Single collision occuried. */ 362*86d7f5d3SJohn Marino #define AE_TXS_MULTICOL 0x0100 /* Multiple collisions occuried. */ 363*86d7f5d3SJohn Marino #define AE_TXS_LATECOL 0x0200 /* Late collision occuried. */ 364*86d7f5d3SJohn Marino #define AE_TXS_ABORTCOL 0x0400 /* Frame abort due to collisions. */ 365*86d7f5d3SJohn Marino #define AE_TXS_UNDERRUN 0x0800 /* Tx SRAM underrun occuried. */ 366*86d7f5d3SJohn Marino #define AE_TXS_UPDATE 0x8000 367*86d7f5d3SJohn Marino 368*86d7f5d3SJohn Marino /* 369*86d7f5d3SJohn Marino * RxD flags. 370*86d7f5d3SJohn Marino */ 371*86d7f5d3SJohn Marino #define AE_RXD_SUCCESS 0x0001 372*86d7f5d3SJohn Marino #define AE_RXD_BCAST 0x0002 /* Broadcast frame received. */ 373*86d7f5d3SJohn Marino #define AE_RXD_MCAST 0x0004 /* Multicast frame received. */ 374*86d7f5d3SJohn Marino #define AE_RXD_PAUSE 0x0008 /* Pause frame received. */ 375*86d7f5d3SJohn Marino #define AE_RXD_CTRL 0x0010 /* Control frame received. */ 376*86d7f5d3SJohn Marino #define AE_RXD_CRCERR 0x0020 /* Invalid frame CRC. */ 377*86d7f5d3SJohn Marino #define AE_RXD_CODEERR 0x0040 /* Invalid frame opcode. */ 378*86d7f5d3SJohn Marino #define AE_RXD_RUNT 0x0080 /* Runt frame received. */ 379*86d7f5d3SJohn Marino #define AE_RXD_FRAG 0x0100 /* Collision fragment received. */ 380*86d7f5d3SJohn Marino #define AE_RXD_TRUNC 0x0200 /* The frame was truncated due 381*86d7f5d3SJohn Marino to Rx SRAM underrun. */ 382*86d7f5d3SJohn Marino #define AE_RXD_ALIGN 0x0400 /* Frame alignment error. */ 383*86d7f5d3SJohn Marino #define AE_RXD_HAS_VLAN 0x0800 /* VLAN tag present. */ 384*86d7f5d3SJohn Marino #define AE_RXD_UPDATE 0x8000 385