186d7f5d3SJohn Marino /*- 286d7f5d3SJohn Marino * Copyright (c) 2008 Stanislav Sedov <stas@FreeBSD.org>. 386d7f5d3SJohn Marino * All rights reserved. 486d7f5d3SJohn Marino * 586d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 686d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 786d7f5d3SJohn Marino * are met: 886d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 986d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 1086d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 1186d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 1286d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 1386d7f5d3SJohn Marino * 1486d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1586d7f5d3SJohn Marino * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1686d7f5d3SJohn Marino * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1786d7f5d3SJohn Marino * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1886d7f5d3SJohn Marino * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 1986d7f5d3SJohn Marino * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2086d7f5d3SJohn Marino * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2186d7f5d3SJohn Marino * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2286d7f5d3SJohn Marino * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2386d7f5d3SJohn Marino * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2486d7f5d3SJohn Marino * 2586d7f5d3SJohn Marino * $FreeBSD: src/sys/dev/ae/if_aereg.h,v 1.1.2.1.4.1 2009/04/15 03:14:26 kensmith Exp $ 2686d7f5d3SJohn Marino */ 2786d7f5d3SJohn Marino 2886d7f5d3SJohn Marino /* 2986d7f5d3SJohn Marino * Master configuration register 3086d7f5d3SJohn Marino */ 3186d7f5d3SJohn Marino #define AE_MASTER_REG 0x1400 3286d7f5d3SJohn Marino 3386d7f5d3SJohn Marino #define AE_MASTER_SOFT_RESET 0x1 /* Reset adapter. */ 3486d7f5d3SJohn Marino #define AE_MASTER_MTIMER_EN 0x2 /* Unknown. */ 3586d7f5d3SJohn Marino #define AE_MASTER_IMT_EN 0x4 /* Interrupt moderation timer enable. */ 3686d7f5d3SJohn Marino #define AE_MASTER_MANUAL_INT 0x8 /* Software manual interrupt. */ 3786d7f5d3SJohn Marino #define AE_MASTER_REVNUM_SHIFT 16 /* Chip revision number. */ 3886d7f5d3SJohn Marino #define AE_MASTER_REVNUM_MASK 0xff 3986d7f5d3SJohn Marino #define AE_MASTER_DEVID_SHIFT 24 /* PCI device id. */ 4086d7f5d3SJohn Marino #define AE_MASTER_DEVID_MASK 0xff 4186d7f5d3SJohn Marino 4286d7f5d3SJohn Marino /* 4386d7f5d3SJohn Marino * Interrupt status register 4486d7f5d3SJohn Marino */ 4586d7f5d3SJohn Marino #define AE_ISR_REG 0x1600 4686d7f5d3SJohn Marino #define AE_ISR_TIMER 0x00000001 /* Counter expired. */ 4786d7f5d3SJohn Marino #define AE_ISR_MANUAL 0x00000002 /* Manual interrupt occuried. */ 4886d7f5d3SJohn Marino #define AE_ISR_RXF_OVERFLOW 0x00000004 /* RxF overflow occuried. */ 4986d7f5d3SJohn Marino #define AE_ISR_TXF_UNDERRUN 0x00000008 /* TxF underrun occuried. */ 5086d7f5d3SJohn Marino #define AE_ISR_TXS_OVERFLOW 0x00000010 /* TxS overflow occuried. */ 5186d7f5d3SJohn Marino #define AE_ISR_RXS_OVERFLOW 0x00000020 /* Internal RxS ring overflow. */ 5286d7f5d3SJohn Marino #define AE_ISR_LINK_CHG 0x00000040 /* Link state changed. */ 5386d7f5d3SJohn Marino #define AE_ISR_TXD_UNDERRUN 0x00000080 /* TxD underrun occuried. */ 5486d7f5d3SJohn Marino #define AE_ISR_RXD_OVERFLOW 0x00000100 /* RxD overflow occuried. */ 5586d7f5d3SJohn Marino #define AE_ISR_DMAR_TIMEOUT 0x00000200 /* DMA read timeout. */ 5686d7f5d3SJohn Marino #define AE_ISR_DMAW_TIMEOUT 0x00000400 /* DMA write timeout. */ 5786d7f5d3SJohn Marino #define AE_ISR_PHY 0x00000800 /* PHY interrupt. */ 5886d7f5d3SJohn Marino #define AE_ISR_TXS_UPDATED 0x00010000 /* Tx status updated. */ 5986d7f5d3SJohn Marino #define AE_ISR_RXD_UPDATED 0x00020000 /* Rx status updated. */ 6086d7f5d3SJohn Marino #define AE_ISR_TX_EARLY 0x00040000 /* TxMAC started transmit. */ 6186d7f5d3SJohn Marino #define AE_ISR_FIFO_UNDERRUN 0x01000000 /* FIFO underrun. */ 6286d7f5d3SJohn Marino #define AE_ISR_FRAME_ERROR 0x02000000 /* Frame receive error. */ 6386d7f5d3SJohn Marino #define AE_ISR_FRAME_SUCCESS 0x04000000 /* Frame receive success. */ 6486d7f5d3SJohn Marino #define AE_ISR_CRC_ERROR 0x08000000 /* CRC error occuried. */ 6586d7f5d3SJohn Marino #define AE_ISR_PHY_LINKDOWN 0x10000000 /* PHY link down. */ 6686d7f5d3SJohn Marino #define AE_ISR_DISABLE 0x80000000 /* Disable interrupts. */ 6786d7f5d3SJohn Marino 6886d7f5d3SJohn Marino #define AE_ISR_TX_EVENT (AE_ISR_TXF_UNDERRUN | AE_ISR_TXS_OVERFLOW | \ 6986d7f5d3SJohn Marino AE_ISR_TXD_UNDERRUN | AE_ISR_TXS_UPDATED | \ 7086d7f5d3SJohn Marino AE_ISR_TX_EARLY) 7186d7f5d3SJohn Marino #define AE_ISR_RX_EVENT (AE_ISR_RXF_OVERFLOW | AE_ISR_RXS_OVERFLOW | \ 7286d7f5d3SJohn Marino AE_ISR_RXD_OVERFLOW | AE_ISR_RXD_UPDATED) 7386d7f5d3SJohn Marino 7486d7f5d3SJohn Marino /* Interrupt mask register. */ 7586d7f5d3SJohn Marino #define AE_IMR_REG 0x1604 7686d7f5d3SJohn Marino 7786d7f5d3SJohn Marino #define AE_IMR_DEFAULT (AE_ISR_DMAR_TIMEOUT | AE_ISR_DMAW_TIMEOUT | \ 7886d7f5d3SJohn Marino AE_ISR_PHY_LINKDOWN | \ 7986d7f5d3SJohn Marino AE_ISR_TXS_UPDATED | AE_ISR_RXD_UPDATED ) 8086d7f5d3SJohn Marino 8186d7f5d3SJohn Marino /* 8286d7f5d3SJohn Marino * Ethernet address register. 8386d7f5d3SJohn Marino */ 8486d7f5d3SJohn Marino #define AE_EADDR0_REG 0x1488 /* 5 - 2 bytes */ 8586d7f5d3SJohn Marino #define AE_EADDR1_REG 0x148c /* 1 - 0 bytes */ 8686d7f5d3SJohn Marino 8786d7f5d3SJohn Marino /* 8886d7f5d3SJohn Marino * Desriptor rings registers. 8986d7f5d3SJohn Marino * L2 supports 64-bit addressing but all rings base addresses 9086d7f5d3SJohn Marino * should have the same high 32 bits of address. 9186d7f5d3SJohn Marino */ 9286d7f5d3SJohn Marino #define AE_DESC_ADDR_HI_REG 0x1540 /* High 32 bits of ring base address. */ 9386d7f5d3SJohn Marino #define AE_RXD_ADDR_LO_REG 0x1554 /* Low 32 bits of RxD ring address. */ 9486d7f5d3SJohn Marino #define AE_TXD_ADDR_LO_REG 0x1544 /* Low 32 bits of TxD ring address. */ 9586d7f5d3SJohn Marino #define AE_TXS_ADDR_LO_REG 0x154c /* Low 32 bits of TxS ring address. */ 9686d7f5d3SJohn Marino #define AE_RXD_COUNT_REG 0x1558 /* Number of RxD descriptors in ring. 9786d7f5d3SJohn Marino Should be 120-byte aligned (i.e. 9886d7f5d3SJohn Marino the 'data' field of RxD should 9986d7f5d3SJohn Marino have 128-byte alignment). */ 10086d7f5d3SJohn Marino #define AE_TXD_BUFSIZE_REG 0x1548 /* Size of TxD ring in 4-byte units. 10186d7f5d3SJohn Marino Should be 4-byte aligned. */ 10286d7f5d3SJohn Marino #define AE_TXS_COUNT_REG 0x1550 /* Number of TxS descriptors in ring. 10386d7f5d3SJohn Marino 4 byte alignment. */ 10486d7f5d3SJohn Marino #define AE_RXD_COUNT_MIN 16 10586d7f5d3SJohn Marino #define AE_RXD_COUNT_MAX 512 10686d7f5d3SJohn Marino #define AE_RXD_COUNT_DEFAULT 64 10786d7f5d3SJohn Marino 10886d7f5d3SJohn Marino #define AE_TXD_BUFSIZE_MIN 4096 10986d7f5d3SJohn Marino #define AE_TXD_BUFSIZE_MAX 65536 11086d7f5d3SJohn Marino #define AE_TXD_BUFSIZE_DEFAULT 8192 11186d7f5d3SJohn Marino 11286d7f5d3SJohn Marino #define AE_TXS_COUNT_MIN 8 /* Not sure. */ 11386d7f5d3SJohn Marino #define AE_TXS_COUNT_MAX 160 11486d7f5d3SJohn Marino #define AE_TXS_COUNT_DEFAULT 64 /* AE_TXD_BUFSIZE_DEFAULT / 128 */ 11586d7f5d3SJohn Marino 11686d7f5d3SJohn Marino /* 11786d7f5d3SJohn Marino * Inter-frame gap configuration register. 11886d7f5d3SJohn Marino */ 11986d7f5d3SJohn Marino #define AE_IFG_REG 0x1484 12086d7f5d3SJohn Marino 12186d7f5d3SJohn Marino #define AE_IFG_TXIPG_DEFAULT 0x60 /* 96-bit IFG time. */ 12286d7f5d3SJohn Marino #define AE_IFG_TXIPG_SHIFT 0 12386d7f5d3SJohn Marino #define AE_IFG_TXIPG_MASK 0x7f 12486d7f5d3SJohn Marino 12586d7f5d3SJohn Marino #define AE_IFG_RXIPG_DEFAULT 0x50 /* 80-bit IFG time. */ 12686d7f5d3SJohn Marino #define AE_IFG_RXIPG_SHIFT 8 12786d7f5d3SJohn Marino #define AE_IFG_RXIPG_MASK 0xff00 12886d7f5d3SJohn Marino 12986d7f5d3SJohn Marino #define AE_IFG_IPGR1_DEFAULT 0x40 /* Carrier-sense window. */ 13086d7f5d3SJohn Marino #define AE_IFG_IPGR1_SHIFT 16 13186d7f5d3SJohn Marino #define AE_IFG_IPGR1_MASK 0x7f0000 13286d7f5d3SJohn Marino 13386d7f5d3SJohn Marino #define AE_IFG_IPGR2_DEFAULT 0x60 /* IFG window. */ 13486d7f5d3SJohn Marino #define AE_IFG_IPGR2_SHIFT 24 13586d7f5d3SJohn Marino #define AE_IFG_IPGR2_MASK 0x7f000000 13686d7f5d3SJohn Marino 13786d7f5d3SJohn Marino /* 13886d7f5d3SJohn Marino * Half-duplex mode configuration register. 13986d7f5d3SJohn Marino */ 14086d7f5d3SJohn Marino #define AE_HDPX_REG 0x1498 14186d7f5d3SJohn Marino 14286d7f5d3SJohn Marino /* Collision window. */ 14386d7f5d3SJohn Marino #define AE_HDPX_LCOL_SHIFT 0 14486d7f5d3SJohn Marino #define AE_HDPX_LCOL_MASK 0x000003ff 14586d7f5d3SJohn Marino #define AE_HDPX_LCOL_DEFAULT 0x37 14686d7f5d3SJohn Marino 14786d7f5d3SJohn Marino /* Max retransmission time, after that the packet will be discarded. */ 14886d7f5d3SJohn Marino #define AE_HDPX_RETRY_SHIFT 12 14986d7f5d3SJohn Marino #define AE_HDPX_RETRY_MASK 0x0000f000 15086d7f5d3SJohn Marino #define AE_HDPX_RETRY_DEFAULT 0x0f 15186d7f5d3SJohn Marino 15286d7f5d3SJohn Marino /* Alternative binary exponential back-off time. */ 15386d7f5d3SJohn Marino #define AE_HDPX_ABEBT_SHIFT 20 15486d7f5d3SJohn Marino #define AE_HDPX_ABEBT_MASK 0x00f00000 15586d7f5d3SJohn Marino #define AE_HDPX_ABEBT_DEFAULT 0x0a 15686d7f5d3SJohn Marino 15786d7f5d3SJohn Marino /* IFG to start JAM for collision based flow control (8-bit time units).*/ 15886d7f5d3SJohn Marino #define AE_HDPX_JAMIPG_SHIFT 24 15986d7f5d3SJohn Marino #define AE_HDPX_JAMIPG_MASK 0x0f000000 16086d7f5d3SJohn Marino #define AE_HDPX_JAMIPG_DEFAULT 0x07 16186d7f5d3SJohn Marino 16286d7f5d3SJohn Marino /* Allow the transmission of a packet which has been excessively deferred. */ 16386d7f5d3SJohn Marino #define AE_HDPX_EXC_EN 0x00010000 16486d7f5d3SJohn Marino /* No back-off on collision, immediately start the retransmission. */ 16586d7f5d3SJohn Marino #define AE_HDPX_NO_BACK_C 0x00020000 16686d7f5d3SJohn Marino /* No back-off on backpressure, immediately start the transmission. */ 16786d7f5d3SJohn Marino #define AE_HDPX_NO_BACK_P 0x00040000 16886d7f5d3SJohn Marino /* Alternative binary exponential back-off enable. */ 16986d7f5d3SJohn Marino #define AE_HDPX_ABEBE 0x00080000 17086d7f5d3SJohn Marino 17186d7f5d3SJohn Marino /* 17286d7f5d3SJohn Marino * Interrupt moderation timer configuration register. 17386d7f5d3SJohn Marino */ 17486d7f5d3SJohn Marino #define AE_IMT_REG 0x1408 /* Timer value in 2 us units. */ 17586d7f5d3SJohn Marino #define AE_IMT_MAX 65000 17686d7f5d3SJohn Marino #define AE_IMT_MIN 50 17786d7f5d3SJohn Marino #define AE_IMT_DEFAULT 100 /* 200 microseconds. */ 17886d7f5d3SJohn Marino 17986d7f5d3SJohn Marino /* 18086d7f5d3SJohn Marino * Interrupt clearing timer configuration register. 18186d7f5d3SJohn Marino */ 18286d7f5d3SJohn Marino #define AE_ICT_REG 0x140e /* Maximum time allowed to clear 18386d7f5d3SJohn Marino interrupt. In 2 us units. */ 18486d7f5d3SJohn Marino #define AE_ICT_DEFAULT 50000 /* 100ms */ 18586d7f5d3SJohn Marino 18686d7f5d3SJohn Marino /* 18786d7f5d3SJohn Marino * MTU configuration register. 18886d7f5d3SJohn Marino */ 18986d7f5d3SJohn Marino #define AE_MTU_REG 0x149c /* MTU size in bytes. */ 19086d7f5d3SJohn Marino 19186d7f5d3SJohn Marino /* 19286d7f5d3SJohn Marino * Cut-through configuration register. 19386d7f5d3SJohn Marino */ 19486d7f5d3SJohn Marino #define AE_CUT_THRESH_REG 0x1590 /* Cut-through threshold in unknown units. */ 19586d7f5d3SJohn Marino #define AE_CUT_THRESH_DEFAULT 0x177 19686d7f5d3SJohn Marino 19786d7f5d3SJohn Marino /* 19886d7f5d3SJohn Marino * Flow-control configuration registers. 19986d7f5d3SJohn Marino */ 20086d7f5d3SJohn Marino #define AE_FLOW_THRESH_HI_REG 0x15a8 /* High watermark of RxD 20186d7f5d3SJohn Marino overflow threshold. */ 20286d7f5d3SJohn Marino #define AE_FLOW_THRESH_LO_REG 0x15aa /* Lower watermark of RxD 20386d7f5d3SJohn Marino overflow threshold */ 20486d7f5d3SJohn Marino 20586d7f5d3SJohn Marino /* 20686d7f5d3SJohn Marino * Mailbox configuration registers. 20786d7f5d3SJohn Marino */ 20886d7f5d3SJohn Marino #define AE_MB_TXD_IDX_REG 0x15f0 /* TxD read index. */ 20986d7f5d3SJohn Marino #define AE_MB_RXD_IDX_REG 0x15f4 /* RxD write index. */ 21086d7f5d3SJohn Marino 21186d7f5d3SJohn Marino /* 21286d7f5d3SJohn Marino * DMA configuration registers. 21386d7f5d3SJohn Marino */ 21486d7f5d3SJohn Marino #define AE_DMAREAD_REG 0x1580 /* Read DMA configuration register. */ 21586d7f5d3SJohn Marino #define AE_DMAREAD_EN 1 21686d7f5d3SJohn Marino #define AE_DMAWRITE_REG 0x15a0 /* Write DMA configuration register. */ 21786d7f5d3SJohn Marino #define AE_DMAWRITE_EN 1 21886d7f5d3SJohn Marino 21986d7f5d3SJohn Marino /* 22086d7f5d3SJohn Marino * MAC configuration register. 22186d7f5d3SJohn Marino */ 22286d7f5d3SJohn Marino #define AE_MAC_REG 0x1480 22386d7f5d3SJohn Marino 22486d7f5d3SJohn Marino #define AE_MAC_TX_EN 0x00000001 /* Enable transmit. */ 22586d7f5d3SJohn Marino #define AE_MAC_RX_EN 0x00000002 /* Enable receive. */ 22686d7f5d3SJohn Marino #define AE_MAC_TX_FLOW_EN 0x00000004 /* Enable Tx flow control. */ 22786d7f5d3SJohn Marino #define AE_MAC_RX_FLOW_EN 0x00000008 /* Enable Rx flow control. */ 22886d7f5d3SJohn Marino #define AE_MAC_LOOPBACK 0x00000010 /* Loopback at MII. */ 22986d7f5d3SJohn Marino #define AE_MAC_FULL_DUPLEX 0x00000020 /* Enable full-duplex. */ 23086d7f5d3SJohn Marino #define AE_MAC_TX_CRC_EN 0x00000040 /* Enable CRC generation. */ 23186d7f5d3SJohn Marino #define AE_MAC_TX_AUTOPAD 0x00000080 /* Pad short frames. */ 23286d7f5d3SJohn Marino #define AE_MAC_PREAMBLE_MASK 0x00003c00 /* Preamble length. */ 23386d7f5d3SJohn Marino #define AE_MAC_PREAMBLE_SHIFT 10 23486d7f5d3SJohn Marino #define AE_MAC_PREAMBLE_DEFAULT 0x07 /* By standard. */ 23586d7f5d3SJohn Marino #define AE_MAC_RMVLAN_EN 0x00004000 /* Remove VLAN tags in 23686d7f5d3SJohn Marino incoming packets. */ 23786d7f5d3SJohn Marino #define AE_MAC_PROMISC_EN 0x00008000 /* Enable promiscue mode. */ 23886d7f5d3SJohn Marino #define AE_MAC_TX_MAXBACKOFF 0x00100000 /* Unknown. */ 23986d7f5d3SJohn Marino #define AE_MAC_MCAST_EN 0x02000000 /* Pass all multicast frames. */ 24086d7f5d3SJohn Marino #define AE_MAC_BCAST_EN 0x04000000 /* Pass all broadcast frames. */ 24186d7f5d3SJohn Marino #define AE_MAC_CLK_PHY 0x08000000 /* If 1 uses loopback clock 24286d7f5d3SJohn Marino PHY, if 0 - system clock. */ 24386d7f5d3SJohn Marino #define AE_HALFBUF_MASK 0xf0000000 /* Half-duplex retry buffer. */ 24486d7f5d3SJohn Marino #define AE_HALFBUF_SHIFT 28 24586d7f5d3SJohn Marino #define AE_HALFBUF_DEFAULT 2 /* XXX: From Linux. */ 24686d7f5d3SJohn Marino 24786d7f5d3SJohn Marino /* 24886d7f5d3SJohn Marino * MDIO control register. 24986d7f5d3SJohn Marino */ 25086d7f5d3SJohn Marino #define AE_MDIO_REG 0x1414 25186d7f5d3SJohn Marino #define AE_MDIO_DATA_MASK 0xffff 25286d7f5d3SJohn Marino #define AE_MDIO_DATA_SHIFT 0 25386d7f5d3SJohn Marino #define AE_MDIO_REGADDR_MASK 0x1f0000 25486d7f5d3SJohn Marino #define AE_MDIO_REGADDR_SHIFT 16 25586d7f5d3SJohn Marino #define AE_MDIO_READ 0x00200000 /* Read operation. */ 25686d7f5d3SJohn Marino #define AE_MDIO_SUP_PREAMBLE 0x00400000 /* Suppress preamble. */ 25786d7f5d3SJohn Marino #define AE_MDIO_START 0x00800000 /* Initiate MDIO transfer. */ 25886d7f5d3SJohn Marino #define AE_MDIO_CLK_SHIFT 24 /* Clock selection. */ 25986d7f5d3SJohn Marino #define AE_MDIO_CLK_MASK 0x07000000 /* Clock selection. */ 26086d7f5d3SJohn Marino #define AE_MDIO_CLK_25_4 0 /* Dividers? */ 26186d7f5d3SJohn Marino #define AE_MDIO_CLK_25_6 2 26286d7f5d3SJohn Marino #define AE_MDIO_CLK_25_8 3 26386d7f5d3SJohn Marino #define AE_MDIO_CLK_25_10 4 26486d7f5d3SJohn Marino #define AE_MDIO_CLK_25_14 5 26586d7f5d3SJohn Marino #define AE_MDIO_CLK_25_20 6 26686d7f5d3SJohn Marino #define AE_MDIO_CLK_25_28 7 26786d7f5d3SJohn Marino #define AE_MDIO_BUSY 0x08000000 /* MDIO is busy. */ 26886d7f5d3SJohn Marino 26986d7f5d3SJohn Marino /* 27086d7f5d3SJohn Marino * Idle status register. 27186d7f5d3SJohn Marino */ 27286d7f5d3SJohn Marino #define AE_IDLE_REG 0x1410 27386d7f5d3SJohn Marino 27486d7f5d3SJohn Marino /* 27586d7f5d3SJohn Marino * Idle status bits. 27686d7f5d3SJohn Marino * If bit is set then the corresponding module is in non-idle state. 27786d7f5d3SJohn Marino */ 27886d7f5d3SJohn Marino #define AE_IDLE_RXMAC 1 27986d7f5d3SJohn Marino #define AE_IDLE_TXMAC 2 28086d7f5d3SJohn Marino #define AE_IDLE_DMAREAD 8 28186d7f5d3SJohn Marino #define AE_IDLE_DMAWRITE 4 28286d7f5d3SJohn Marino 28386d7f5d3SJohn Marino /* 28486d7f5d3SJohn Marino * Multicast hash tables registers. 28586d7f5d3SJohn Marino */ 28686d7f5d3SJohn Marino #define AE_REG_MHT0 0x1490 28786d7f5d3SJohn Marino #define AE_REG_MHT1 0x1494 28886d7f5d3SJohn Marino 28986d7f5d3SJohn Marino /* 29086d7f5d3SJohn Marino * Wake on lan (WOL). 29186d7f5d3SJohn Marino */ 29286d7f5d3SJohn Marino #define AE_WOL_REG 0x14a0 29386d7f5d3SJohn Marino #define AE_WOL_MAGIC 0x00000004 29486d7f5d3SJohn Marino #define AE_WOL_MAGIC_PME 0x00000008 29586d7f5d3SJohn Marino #define AE_WOL_LNKCHG 0x00000010 29686d7f5d3SJohn Marino #define AE_WOL_LNKCHG_PME 0x00000020 29786d7f5d3SJohn Marino 29886d7f5d3SJohn Marino /* 29986d7f5d3SJohn Marino * PCIE configuration registers. Descriptions unknown. 30086d7f5d3SJohn Marino */ 30186d7f5d3SJohn Marino #define AE_PCIE_LTSSM_TESTMODE_REG 0x12fc 30286d7f5d3SJohn Marino #define AE_PCIE_LTSSM_TESTMODE_DEFAULT 0x6500 30386d7f5d3SJohn Marino #define AE_PCIE_DLL_TX_CTRL_REG 0x1104 30486d7f5d3SJohn Marino #define AE_PCIE_DLL_TX_CTRL_SEL_NOR_CLK 0x0400 30586d7f5d3SJohn Marino #define AE_PCIE_DLL_TX_CTRL_DEFAULT 0x0568 30686d7f5d3SJohn Marino #define AE_PCIE_PHYMISC_REG 0x1000 30786d7f5d3SJohn Marino #define AE_PCIE_PHYMISC_FORCE_RCV_DET 0x4 30886d7f5d3SJohn Marino 30986d7f5d3SJohn Marino /* 31086d7f5d3SJohn Marino * PHY enable register. 31186d7f5d3SJohn Marino */ 31286d7f5d3SJohn Marino #define AE_PHY_ENABLE_REG 0x140c 31386d7f5d3SJohn Marino #define AE_PHY_ENABLE 1 31486d7f5d3SJohn Marino 31586d7f5d3SJohn Marino /* 31686d7f5d3SJohn Marino * VPD registers. 31786d7f5d3SJohn Marino */ 31886d7f5d3SJohn Marino #define AE_VPD_CAP_REG 0x6c /* Command register. */ 31986d7f5d3SJohn Marino #define AE_VPD_CAP_ID_MASK 0xff 32086d7f5d3SJohn Marino #define AE_VPD_CAP_ID_SHIFT 0 32186d7f5d3SJohn Marino #define AE_VPD_CAP_NEXT_MASK 0xff00 32286d7f5d3SJohn Marino #define AE_VPD_CAP_NEXT_SHIFT 8 32386d7f5d3SJohn Marino #define AE_VPD_CAP_ADDR_MASK 0x7fff0000 32486d7f5d3SJohn Marino #define AE_VPD_CAP_ADDR_SHIFT 16 32586d7f5d3SJohn Marino #define AE_VPD_CAP_DONE 0x80000000 32686d7f5d3SJohn Marino #define AE_VPD_DATA_REG 0x70 /* Data register. */ 32786d7f5d3SJohn Marino 32886d7f5d3SJohn Marino #define AE_VPD_NREGS 64 /* Maximum number of VPD regs. */ 32986d7f5d3SJohn Marino #define AE_VPD_SIG_MASK 0xff 33086d7f5d3SJohn Marino #define AE_VPD_SIG 0x5a /* VPD block signature. */ 33186d7f5d3SJohn Marino #define AE_VPD_REG_SHIFT 16 /* Register id offset. */ 33286d7f5d3SJohn Marino 33386d7f5d3SJohn Marino /* 33486d7f5d3SJohn Marino * SPI registers. 33586d7f5d3SJohn Marino */ 33686d7f5d3SJohn Marino #define AE_SPICTL_REG 0x200 33786d7f5d3SJohn Marino #define AE_SPICTL_VPD_EN 0x2000 /* Enable VPD. */ 33886d7f5d3SJohn Marino 33986d7f5d3SJohn Marino /* 34086d7f5d3SJohn Marino * PHY-specific registers constants. 34186d7f5d3SJohn Marino */ 34286d7f5d3SJohn Marino #define AE_PHY_DBG_ADDR 0x1d 34386d7f5d3SJohn Marino #define AE_PHY_DBG_DATA 0x1e 34486d7f5d3SJohn Marino #define AE_PHY_DBG_POWERSAVE 0x1000 34586d7f5d3SJohn Marino 34686d7f5d3SJohn Marino /* 34786d7f5d3SJohn Marino * TxD flags. 34886d7f5d3SJohn Marino */ 34986d7f5d3SJohn Marino #define AE_TXD_INSERT_VTAG 0x8000 /* Insert VLAN tag on transfer. */ 35086d7f5d3SJohn Marino 35186d7f5d3SJohn Marino /* 35286d7f5d3SJohn Marino * TxS flags. 35386d7f5d3SJohn Marino */ 35486d7f5d3SJohn Marino #define AE_TXS_SUCCESS 0x0001 /* Packed transmitted successfully. */ 35586d7f5d3SJohn Marino #define AE_TXS_BCAST 0x0002 /* Transmitted broadcast frame. */ 35686d7f5d3SJohn Marino #define AE_TXS_MCAST 0x0004 /* Transmitted multicast frame. */ 35786d7f5d3SJohn Marino #define AE_TXS_PAUSE 0x0008 /* Transmitted pause frame. */ 35886d7f5d3SJohn Marino #define AE_TXS_CTRL 0x0010 /* Transmitted control frame. */ 35986d7f5d3SJohn Marino #define AE_TXS_DEFER 0x0020 /* Frame transmitted with defer. */ 36086d7f5d3SJohn Marino #define AE_TXS_EXCDEFER 0x0040 /* Excessive collision. */ 36186d7f5d3SJohn Marino #define AE_TXS_SINGLECOL 0x0080 /* Single collision occuried. */ 36286d7f5d3SJohn Marino #define AE_TXS_MULTICOL 0x0100 /* Multiple collisions occuried. */ 36386d7f5d3SJohn Marino #define AE_TXS_LATECOL 0x0200 /* Late collision occuried. */ 36486d7f5d3SJohn Marino #define AE_TXS_ABORTCOL 0x0400 /* Frame abort due to collisions. */ 36586d7f5d3SJohn Marino #define AE_TXS_UNDERRUN 0x0800 /* Tx SRAM underrun occuried. */ 36686d7f5d3SJohn Marino #define AE_TXS_UPDATE 0x8000 36786d7f5d3SJohn Marino 36886d7f5d3SJohn Marino /* 36986d7f5d3SJohn Marino * RxD flags. 37086d7f5d3SJohn Marino */ 37186d7f5d3SJohn Marino #define AE_RXD_SUCCESS 0x0001 37286d7f5d3SJohn Marino #define AE_RXD_BCAST 0x0002 /* Broadcast frame received. */ 37386d7f5d3SJohn Marino #define AE_RXD_MCAST 0x0004 /* Multicast frame received. */ 37486d7f5d3SJohn Marino #define AE_RXD_PAUSE 0x0008 /* Pause frame received. */ 37586d7f5d3SJohn Marino #define AE_RXD_CTRL 0x0010 /* Control frame received. */ 37686d7f5d3SJohn Marino #define AE_RXD_CRCERR 0x0020 /* Invalid frame CRC. */ 37786d7f5d3SJohn Marino #define AE_RXD_CODEERR 0x0040 /* Invalid frame opcode. */ 37886d7f5d3SJohn Marino #define AE_RXD_RUNT 0x0080 /* Runt frame received. */ 37986d7f5d3SJohn Marino #define AE_RXD_FRAG 0x0100 /* Collision fragment received. */ 38086d7f5d3SJohn Marino #define AE_RXD_TRUNC 0x0200 /* The frame was truncated due 38186d7f5d3SJohn Marino to Rx SRAM underrun. */ 38286d7f5d3SJohn Marino #define AE_RXD_ALIGN 0x0400 /* Frame alignment error. */ 38386d7f5d3SJohn Marino #define AE_RXD_HAS_VLAN 0x0800 /* VLAN tag present. */ 38486d7f5d3SJohn Marino #define AE_RXD_UPDATE 0x8000 385