1 1.3 msaitoh /* $NetBSD: if_xgereg.h,v 1.3 2019/08/29 05:55:19 msaitoh Exp $ */ 2 1.1 ragge 3 1.1 ragge /* 4 1.1 ragge * Copyright (c) 2004, SUNET, Swedish University Computer Network. 5 1.1 ragge * All rights reserved. 6 1.1 ragge * 7 1.1 ragge * Written by Anders Magnusson for SUNET, Swedish University Computer Network. 8 1.1 ragge * 9 1.1 ragge * Redistribution and use in source and binary forms, with or without 10 1.1 ragge * modification, are permitted provided that the following conditions 11 1.1 ragge * are met: 12 1.1 ragge * 1. Redistributions of source code must retain the above copyright 13 1.1 ragge * notice, this list of conditions and the following disclaimer. 14 1.1 ragge * 2. Redistributions in binary form must reproduce the above copyright 15 1.1 ragge * notice, this list of conditions and the following disclaimer in the 16 1.1 ragge * documentation and/or other materials provided with the distribution. 17 1.1 ragge * 3. All advertising materials mentioning features or use of this software 18 1.1 ragge * must display the following acknowledgement: 19 1.1 ragge * This product includes software developed for the NetBSD Project by 20 1.1 ragge * SUNET, Swedish University Computer Network. 21 1.1 ragge * 4. The name of SUNET may not be used to endorse or promote products 22 1.1 ragge * derived from this software without specific prior written permission. 23 1.1 ragge * 24 1.1 ragge * THIS SOFTWARE IS PROVIDED BY SUNET ``AS IS'' AND 25 1.1 ragge * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 26 1.1 ragge * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 27 1.1 ragge * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SUNET 28 1.1 ragge * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29 1.1 ragge * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30 1.1 ragge * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 31 1.1 ragge * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 32 1.1 ragge * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33 1.1 ragge * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34 1.1 ragge * POSSIBILITY OF SUCH DAMAGE. 35 1.1 ragge */ 36 1.1 ragge 37 1.1 ragge 38 1.1 ragge /* 39 1.1 ragge * Defines for the S2io Xframe adapter. 40 1.1 ragge */ 41 1.1 ragge 42 1.1 ragge /* PCI address space */ 43 1.1 ragge #define XGE_PIF_BAR 0x10 44 1.1 ragge #define XGE_TXP_BAR 0x18 45 1.1 ragge 46 1.1 ragge /* PIF register address calculation */ 47 1.1 ragge #define DCSRB(x) (0x0000+(x)) /* 10GbE Device Control and Status Registers */ 48 1.1 ragge #define PCIXB(x) (0x0800+(x)) /* PCI-X Interface Functional Registers */ 49 1.1 ragge #define TDMAB(x) (0x1000+(x)) /* Transmit DMA Functional Registers */ 50 1.1 ragge #define RDMAB(x) (0x1800+(x)) /* Receive DMA Functional Registers */ 51 1.1 ragge #define MACRB(x) (0x2000+(x)) /* MAC functional registers */ 52 1.1 ragge #define RLDRB(x) (0x2800+(x)) /* RLDRAM memory controller */ 53 1.1 ragge #define XGXSB(x) (0x3000+(x)) /* XGXS functional Registers */ 54 1.1 ragge 55 1.1 ragge /* 56 1.1 ragge * Control and Status Registers 57 1.1 ragge */ 58 1.1 ragge #define GENERAL_INT_STATUS DCSRB(0x0000) 59 1.1 ragge #define GENERAL_INT_MASK DCSRB(0x0008) 60 1.1 ragge #define SW_RESET DCSRB(0x0100) 61 1.1 ragge #define XGXS_RESET(x) ((uint64_t)(x) << 32) 62 1.1 ragge #define ADAPTER_STATUS DCSRB(0x0108) 63 1.1 ragge #define TDMA_READY (1ULL<<63) 64 1.1 ragge #define RDMA_READY (1ULL<<62) 65 1.1 ragge #define PFC_READY (1ULL<<61) 66 1.1 ragge #define TMAC_BUF_EMPTY (1ULL<<60) 67 1.1 ragge #define PIC_QUIESCENT (1ULL<<58) 68 1.1 ragge #define RMAC_REMOTE_FAULT (1ULL<<57) 69 1.1 ragge #define RMAC_LOCAL_FAULT (1ULL<<56) 70 1.1 ragge #define MC_DRAM_READY (1ULL<<39) 71 1.1 ragge #define MC_QUEUES_READY (1ULL<<38) 72 1.1 ragge #define M_PLL_LOCK (1ULL<<33) 73 1.1 ragge #define P_PLL_LOCK (1ULL<<32) 74 1.1 ragge #define ADAPTER_CONTROL DCSRB(0x0110) 75 1.1 ragge #define ADAPTER_EN (1ULL<<56) 76 1.1 ragge #define EOI_TX_ON (1ULL<<48) 77 1.1 ragge #define LED_ON (1ULL<<40) 78 1.1 ragge #define WAIT_INT_EN (1ULL<<15) 79 1.1 ragge #define ECC_ENABLE_N (1ULL<<8) 80 1.1 ragge 81 1.1 ragge /* for debug of ADAPTER_STATUS */ 82 1.1 ragge #define QUIESCENT (TDMA_READY|RDMA_READY|PFC_READY|TMAC_BUF_EMPTY|\ 83 1.1 ragge PIC_QUIESCENT|MC_DRAM_READY|MC_QUEUES_READY|M_PLL_LOCK|P_PLL_LOCK) 84 1.1 ragge #define QUIESCENT_BMSK \ 85 1.1 ragge "\177\20b\x3fTDMA_READY\0b\x3eRDMA_READY\0b\x3dPFC_READY\0" \ 86 1.1 ragge "b\x3cTMAC_BUF_EMPTY\0b\x3aPIC_QUIESCENT\0\x39RMAC_REMOTE_FAULT\0" \ 87 1.1 ragge "b\x38RMAC_LOCAL_FAULT\0b\x27MC_DRAM_READY\0b\x26MC_QUEUES_READY\0" \ 88 1.3 msaitoh "b\x21M_PLL_LOCK\0b\x20P_PLL_LOCK\0" 89 1.1 ragge 90 1.1 ragge /* 91 1.1 ragge * PCI-X registers 92 1.1 ragge */ 93 1.1 ragge /* Interrupt control registers */ 94 1.1 ragge #define PIC_INT_STATUS PCIXB(0) 95 1.1 ragge #define PIC_INT_MASK PCIXB(0x008) 96 1.1 ragge #define TXPIC_INT_MASK PCIXB(0x018) 97 1.1 ragge #define RXPIC_INT_MASK PCIXB(0x030) 98 1.1 ragge #define FLASH_INT_MASK PCIXB(0x048) 99 1.1 ragge #define MDIO_INT_MASK PCIXB(0x060) 100 1.1 ragge #define IIC_INT_MASK PCIXB(0x078) 101 1.1 ragge #define GPIO_INT_MASK PCIXB(0x098) 102 1.1 ragge #define TX_TRAFFIC_INT PCIXB(0x0e0) 103 1.1 ragge #define TX_TRAFFIC_MASK PCIXB(0x0e8) 104 1.1 ragge #define RX_TRAFFIC_INT PCIXB(0x0f0) 105 1.1 ragge #define RX_TRAFFIC_MASK PCIXB(0x0f8) 106 1.1 ragge #define PIC_CONTROL PCIXB(0x100) 107 1.1 ragge 108 1.1 ragge /* Byte swapping for little-endian */ 109 1.1 ragge #define SWAPPER_CTRL PCIXB(0x108) 110 1.1 ragge #define PIF_R_FE (1ULL<<63) 111 1.1 ragge #define PIF_R_SE (1ULL<<62) 112 1.1 ragge #define PIF_W_FE (1ULL<<55) 113 1.1 ragge #define PIF_W_SE (1ULL<<54) 114 1.1 ragge #define TxP_FE (1ULL<<47) 115 1.1 ragge #define TxP_SE (1ULL<<46) 116 1.1 ragge #define TxD_R_FE (1ULL<<45) 117 1.1 ragge #define TxD_R_SE (1ULL<<44) 118 1.1 ragge #define TxD_W_FE (1ULL<<43) 119 1.1 ragge #define TxD_W_SE (1ULL<<42) 120 1.1 ragge #define TxF_R_FE (1ULL<<41) 121 1.1 ragge #define TxF_R_SE (1ULL<<40) 122 1.1 ragge #define RxD_R_FE (1ULL<<31) 123 1.1 ragge #define RxD_R_SE (1ULL<<30) 124 1.1 ragge #define RxD_W_FE (1ULL<<29) 125 1.1 ragge #define RxD_W_SE (1ULL<<28) 126 1.1 ragge #define RxF_W_FE (1ULL<<27) 127 1.1 ragge #define RxF_W_SE (1ULL<<26) 128 1.1 ragge #define XMSI_FE (1ULL<<23) 129 1.1 ragge #define XMSI_SE (1ULL<<22) 130 1.1 ragge #define STATS_FE (1ULL<<15) 131 1.1 ragge #define STATS_SE (1ULL<<14) 132 1.1 ragge 133 1.1 ragge /* Diagnostic register to check byte-swapping conf */ 134 1.1 ragge #define PIF_RD_SWAPPER_Fb PCIXB(0x110) 135 1.1 ragge #define SWAPPER_MAGIC 0x0123456789abcdefULL 136 1.1 ragge 137 1.1 ragge /* Stats registers */ 138 1.1 ragge #define STAT_CFG PCIXB(0x1d0) 139 1.1 ragge #define STAT_ADDR PCIXB(0x1d8) 140 1.1 ragge 141 1.1 ragge /* DTE-XGXS Interface */ 142 1.1 ragge #define MDIO_CONTROL PCIXB(0x1e0) 143 1.1 ragge #define DTX_CONTROL PCIXB(0x1e8) 144 1.1 ragge #define I2C_CONTROL PCIXB(0x1f0) 145 1.1 ragge #define GPIO_CONTROL PCIXB(0x1f8) 146 1.1 ragge 147 1.1 ragge /* 148 1.1 ragge * Transmit DMA registers. 149 1.1 ragge */ 150 1.1 ragge #define TXDMA_INT_MASK TDMAB(0x008) 151 1.1 ragge #define PFC_ERR_MASK TDMAB(0x018) 152 1.1 ragge #define TDA_ERR_MASK TDMAB(0x030) 153 1.1 ragge #define PCC_ERR_MASK TDMAB(0x048) 154 1.1 ragge #define TTI_ERR_MASK TDMAB(0x060) 155 1.1 ragge #define LSO_ERR_MASK TDMAB(0x078) 156 1.1 ragge #define TPA_ERR_MASK TDMAB(0x090) 157 1.1 ragge #define SM_ERR_MASK TDMAB(0x0a8) 158 1.1 ragge 159 1.1 ragge /* Transmit FIFO config */ 160 1.1 ragge #define TX_FIFO_P0 TDMAB(0x0108) 161 1.1 ragge #define TX_FIFO_P1 TDMAB(0x0110) 162 1.1 ragge #define TX_FIFO_P2 TDMAB(0x0118) 163 1.1 ragge #define TX_FIFO_P3 TDMAB(0x0120) 164 1.1 ragge #define TX_FIFO_ENABLE (1ULL<<63) 165 1.1 ragge #define TX_FIFO_NUM0(x) ((uint64_t)(x) << 56) 166 1.1 ragge #define TX_FIFO_LEN0(x) ((uint64_t)((x)-1) << 32) 167 1.1 ragge #define TX_FIFO_NUM1(x) ((uint64_t)(x) << 24) 168 1.1 ragge #define TX_FIFO_LEN1(x) ((uint64_t)((x)-1) << 0) 169 1.1 ragge 170 1.1 ragge /* Transmit interrupts */ 171 1.1 ragge #define TTI_COMMAND_MEM TDMAB(0x150) 172 1.1 ragge #define TTI_CMD_MEM_WE (1ULL<<56) 173 1.1 ragge #define TTI_CMD_MEM_STROBE (1ULL<<48) 174 1.1 ragge #define TTI_DATA1_MEM TDMAB(0x158) 175 1.1 ragge #define TX_TIMER_VAL(x) ((uint64_t)(x) << 32) 176 1.1 ragge #define TX_TIMER_AC (1ULL<<25) 177 1.1 ragge #define TX_TIMER_CI (1ULL<<24) 178 1.1 ragge #define TX_URNG_A(x) ((uint64_t)(x) << 16) 179 1.1 ragge #define TX_URNG_B(x) ((uint64_t)(x) << 8) 180 1.1 ragge #define TX_URNG_C(x) ((uint64_t)(x) << 0) 181 1.1 ragge #define TTI_DATA2_MEM TDMAB(0x160) 182 1.1 ragge #define TX_UFC_A(x) ((uint64_t)(x) << 48) 183 1.1 ragge #define TX_UFC_B(x) ((uint64_t)(x) << 32) 184 1.1 ragge #define TX_UFC_C(x) ((uint64_t)(x) << 16) 185 1.1 ragge #define TX_UFC_D(x) ((uint64_t)(x) << 0) 186 1.1 ragge 187 1.1 ragge 188 1.1 ragge /* Transmit protocol assist */ 189 1.1 ragge #define TX_PA_CFG TDMAB(0x0168) 190 1.1 ragge #define TX_PA_CFG_IFR (1ULL<<62) /* Ignore frame error */ 191 1.1 ragge #define TX_PA_CFG_ISO (1ULL<<61) /* Ignore snap OUI */ 192 1.1 ragge #define TX_PA_CFG_ILC (1ULL<<60) /* Ignore LLC ctrl */ 193 1.1 ragge #define TX_PA_CFG_ILE (1ULL<<57) /* Ignore L2 error */ 194 1.1 ragge 195 1.1 ragge /* 196 1.1 ragge * Transmit descriptor list (TxDL) pointer and control. 197 1.1 ragge * There may be up to 8192 TxDL's per FIFO, but with a NIC total 198 1.1 ragge * of 8192. The TxDL's are located in the NIC memory. 199 1.1 ragge * Each TxDL can have up to 256 Transmit descriptors (TxD) 200 1.1 ragge * that are located in host memory. 201 1.1 ragge * 202 1.1 ragge * The txdl struct fields must be written in order. 203 1.1 ragge */ 204 1.1 ragge #ifdef notdef /* Use bus_space stuff instead */ 205 1.1 ragge struct txdl { 206 1.1 ragge uint64_t txdl_pointer; /* address of TxD's */ 207 1.1 ragge uint64_t txdl_control; 208 1.1 ragge }; 209 1.1 ragge #endif 210 1.1 ragge #define TXDLOFF1(x) (16*(x)) /* byte offset in txdl for list */ 211 1.1 ragge #define TXDLOFF2(x) (16*(x)+8) /* byte offset in txdl for list */ 212 1.1 ragge #define TXDL_NUMTXD(x) ((uint64_t)(x) << 56) /* # of TxD's in the list */ 213 1.1 ragge #define TXDL_LGC_FIRST (1ULL << 49) /* First special list */ 214 1.1 ragge #define TXDL_LGC_LAST (1ULL << 48) /* Last special list */ 215 1.1 ragge #define TXDL_SFF (1ULL << 40) /* List is a special function list */ 216 1.1 ragge #define TXDL_PAR 0 /* Pointer address register */ 217 1.1 ragge #define TXDL_LCR 8 /* List control register */ 218 1.1 ragge 219 1.1 ragge struct txd { 220 1.1 ragge uint64_t txd_control1; 221 1.1 ragge uint64_t txd_control2; 222 1.1 ragge uint64_t txd_bufaddr; 223 1.1 ragge uint64_t txd_hostctrl; 224 1.1 ragge }; 225 1.1 ragge #define TXD_CTL1_OWN (1ULL << 56) /* Owner, 0 == host, 1 == NIC */ 226 1.1 ragge #define TXD_CTL1_GCF (1ULL << 41) /* First frame or LSO */ 227 1.1 ragge #define TXD_CTL1_GCL (1ULL << 40) /* Last frame or LSO */ 228 1.1 ragge #define TXD_CTL1_LSO (1ULL << 33) /* LSO should be performed */ 229 1.1 ragge #define TXD_CTL1_COF (1ULL << 32) /* UDP Checksum over fragments */ 230 1.1 ragge #define TXD_CTL1_MSS(x) ((uint64_t)(x) << 16) 231 1.1 ragge 232 1.1 ragge #define TXD_CTL2_INTLST (1ULL << 16) /* Per-list interrupt */ 233 1.1 ragge #define TXD_CTL2_UTIL (1ULL << 17) /* Utilization interrupt */ 234 1.1 ragge #define TXD_CTL2_CIPv4 (1ULL << 58) /* Calculate IPv4 header checksum */ 235 1.1 ragge #define TXD_CTL2_CTCP (1ULL << 57) /* Calculate TCP checksum */ 236 1.1 ragge #define TXD_CTL2_CUDP (1ULL << 56) /* Calculate UDP checksum */ 237 1.1 ragge /* 238 1.1 ragge * Receive DMA registers 239 1.1 ragge */ 240 1.1 ragge /* Receive interrupt registers */ 241 1.1 ragge #define RXDMA_INT_MASK RDMAB(0x008) 242 1.1 ragge #define RDA_ERR_MASK RDMAB(0x018) 243 1.1 ragge #define RC_ERR_MASK RDMAB(0x030) 244 1.1 ragge #define PRC_PCIX_ERR_MASK RDMAB(0x048) 245 1.1 ragge #define RPA_ERR_MASK RDMAB(0x060) 246 1.1 ragge #define RTI_ERR_MASK RDMAB(0x078) 247 1.1 ragge 248 1.1 ragge #define RX_QUEUE_PRIORITY RDMAB(0x100) 249 1.1 ragge #define RX_W_ROUND_ROBIN_0 RDMAB(0x108) 250 1.1 ragge #define RX_W_ROUND_ROBIN_1 RDMAB(0x110) 251 1.1 ragge #define RX_W_ROUND_ROBIN_2 RDMAB(0x118) 252 1.1 ragge #define RX_W_ROUND_ROBIN_3 RDMAB(0x120) 253 1.1 ragge #define RX_W_ROUND_ROBIN_4 RDMAB(0x128) 254 1.1 ragge #define PRC_RXD0_0 RDMAB(0x130) 255 1.1 ragge #define PRC_CTRL_0 RDMAB(0x170) 256 1.1 ragge #define RC_IN_SVC (1ULL << 56) 257 1.1 ragge #define RING_MODE_1 (0ULL << 48) 258 1.1 ragge #define RING_MODE_3 (1ULL << 48) 259 1.1 ragge #define RING_MODE_5 (2ULL << 48) 260 1.1 ragge #define RC_NO_SNOOP_D (1ULL << 41) 261 1.1 ragge #define RC_NO_SNOOP_B (1ULL << 40) 262 1.1 ragge #define PRC_ALARM_ACTION RDMAB(0x1b0) 263 1.1 ragge #define RTI_COMMAND_MEM RDMAB(0x1b8) 264 1.1 ragge #define RTI_CMD_MEM_WE (1ULL << 56) 265 1.1 ragge #define RTI_CMD_MEM_STROBE (1ULL << 48) 266 1.1 ragge #define RTI_DATA1_MEM RDMAB(0x1c0) 267 1.1 ragge #define RX_TIMER_VAL(x) ((uint64_t)(x) << 32) 268 1.1 ragge #define RX_TIMER_AC (1ULL << 25) 269 1.1 ragge #define RX_URNG_A(x) ((uint64_t)(x) << 16) 270 1.1 ragge #define RX_URNG_B(x) ((uint64_t)(x) << 8) 271 1.1 ragge #define RX_URNG_C(x) ((uint64_t)(x) << 0) 272 1.1 ragge #define RTI_DATA2_MEM RDMAB(0x1c8) 273 1.1 ragge #define RX_UFC_A(x) ((uint64_t)(x) << 48) 274 1.1 ragge #define RX_UFC_B(x) ((uint64_t)(x) << 32) 275 1.1 ragge #define RX_UFC_C(x) ((uint64_t)(x) << 16) 276 1.1 ragge #define RX_UFC_D(x) ((uint64_t)(x) << 0) 277 1.1 ragge #define RX_PA_CFG RDMAB(0x1d0) 278 1.1 ragge /* 279 1.1 ragge * Receive descriptor (RxD) format. 280 1.1 ragge * There are three formats of receive descriptors, 1, 3 and 5 buffer format. 281 1.1 ragge */ 282 1.1 ragge #define RX_MODE_1 1 283 1.1 ragge #define RX_MODE_3 3 284 1.1 ragge #define RX_MODE_5 5 285 1.1 ragge 286 1.1 ragge struct rxd1 { 287 1.1 ragge uint64_t rxd_hcontrol; 288 1.1 ragge uint64_t rxd_control1; 289 1.1 ragge uint64_t rxd_control2; 290 1.1 ragge uint64_t rxd_buf0; 291 1.1 ragge }; 292 1.1 ragge 293 1.1 ragge /* 4k struct for 5 buffer mode */ 294 1.1 ragge #define NDESC_1BUFMODE 127 /* # desc/page for 5-buffer mode */ 295 1.1 ragge struct rxd1_4k { 296 1.1 ragge struct rxd1 r4_rxd[NDESC_1BUFMODE]; 297 1.1 ragge uint64_t pad[3]; 298 1.1 ragge uint64_t r4_next; /* phys address of next 4k buffer */ 299 1.1 ragge }; 300 1.1 ragge 301 1.1 ragge struct rxd3 { 302 1.1 ragge uint64_t rxd_hcontrol; 303 1.1 ragge uint64_t rxd_control1; 304 1.1 ragge uint64_t rxd_control2; 305 1.1 ragge uint64_t rxd_buf0; 306 1.1 ragge uint64_t rxd_buf1; 307 1.1 ragge uint64_t rxd_buf2; 308 1.1 ragge }; 309 1.1 ragge 310 1.1 ragge struct rxd5 { 311 1.1 ragge uint64_t rxd_control3; 312 1.1 ragge uint64_t rxd_control1; 313 1.1 ragge uint64_t rxd_control2; 314 1.1 ragge uint64_t rxd_buf0; 315 1.1 ragge uint64_t rxd_buf1; 316 1.1 ragge uint64_t rxd_buf2; 317 1.1 ragge uint64_t rxd_buf3; 318 1.1 ragge uint64_t rxd_buf4; 319 1.1 ragge }; 320 1.1 ragge 321 1.1 ragge /* 4k struct for 5 buffer mode */ 322 1.1 ragge #define NDESC_5BUFMODE 63 /* # desc/page for 5-buffer mode */ 323 1.1 ragge #define XGE_PAGE 4096 /* page size used for receive */ 324 1.1 ragge struct rxd5_4k { 325 1.1 ragge struct rxd5 r4_rxd[NDESC_5BUFMODE]; 326 1.1 ragge uint64_t pad[7]; 327 1.1 ragge uint64_t r4_next; /* phys address of next 4k buffer */ 328 1.1 ragge }; 329 1.1 ragge 330 1.1 ragge #define RXD_MKCTL3(h,bs3,bs4) \ 331 1.1 ragge (((uint64_t)(h) << 32) | ((uint64_t)(bs3) << 16) | (uint64_t)(bs4)) 332 1.1 ragge #define RXD_MKCTL2(bs0,bs1,bs2) \ 333 1.1 ragge (((uint64_t)(bs0) << 48) | ((uint64_t)(bs1) << 32) | \ 334 1.1 ragge ((uint64_t)(bs2) << 16)) 335 1.1 ragge 336 1.1 ragge #define RXD_CTL2_BUF0SIZ(x) (((x) >> 48) & 0xffff) 337 1.1 ragge #define RXD_CTL2_BUF1SIZ(x) (((x) >> 32) & 0xffff) 338 1.1 ragge #define RXD_CTL2_BUF2SIZ(x) (((x) >> 16) & 0xffff) 339 1.1 ragge #define RXD_CTL3_BUF3SIZ(x) (((x) >> 16) & 0xffff) 340 1.1 ragge #define RXD_CTL3_BUF4SIZ(x) ((x) & 0xffff) 341 1.1 ragge #define RXD_CTL1_OWN (1ULL << 56) 342 1.1 ragge #define RXD_CTL1_XCODE(x) (((x) >> 48) & 0xf) /* Status bits */ 343 1.1 ragge #define RXD_CTL1_X_OK 0 344 1.1 ragge #define RXD_CTL1_X_PERR 1 /* Parity error */ 345 1.1 ragge #define RXD_CTL1_X_ABORT 2 /* Abort during xfer */ 346 1.1 ragge #define RXD_CTL1_X_PA 3 /* Parity error and abort */ 347 1.1 ragge #define RXD_CTL1_X_RDA 4 /* RDA failure */ 348 1.1 ragge #define RXD_CTL1_X_UP 5 /* Unknown protocol */ 349 1.1 ragge #define RXD_CTL1_X_FI 6 /* Frame integrity (FCS) error */ 350 1.1 ragge #define RXD_CTL1_X_BSZ 7 /* Buffer size error */ 351 1.1 ragge #define RXD_CTL1_X_ECC 8 /* Internal ECC */ 352 1.1 ragge #define RXD_CTL1_X_UNK 15 /* Unknown error */ 353 1.1 ragge #define RXD_CTL1_PROTOS(x) (((x) >> 32) & 0xff) 354 1.1 ragge #define RXD_CTL1_P_VLAN 0x80 /* VLAN tagged */ 355 1.1 ragge #define RXD_CTL1_P_MSK 0x60 /* Mask for frame type */ 356 1.1 ragge #define RXD_CTL1_P_DIX 0x00 357 1.1 ragge #define RXD_CTL1_P_LLC 0x20 358 1.1 ragge #define RXD_CTL1_P_SNAP 0x40 359 1.1 ragge #define RXD_CTL1_P_IPX 0x60 360 1.1 ragge #define RXD_CTL1_P_IPv4 0x10 361 1.1 ragge #define RXD_CTL1_P_IPv6 0x08 362 1.1 ragge #define RXD_CTL1_P_IPFRAG 0x04 363 1.1 ragge #define RXD_CTL1_P_TCP 0x02 364 1.1 ragge #define RXD_CTL1_P_UDP 0x01 365 1.1 ragge #define RXD_CTL1_L3CSUM(x) (((x) >> 16) & 0xffff) 366 1.1 ragge #define RXD_CTL1_L4CSUM(x) ((x) & 0xffff) 367 1.1 ragge #define RXD_CTL2_VLANTAG(x) ((x) & 0xffff) 368 1.1 ragge 369 1.1 ragge /* 370 1.1 ragge * MAC Configuration/Status 371 1.1 ragge */ 372 1.1 ragge #define MAC_INT_STATUS MACRB(0x000) 373 1.1 ragge #define MAC_TMAC_INT (1ULL<<63) 374 1.1 ragge #define MAC_RMAC_INT (1ULL<<62) 375 1.1 ragge #define MAC_INT_MASK MACRB(0x008) 376 1.1 ragge #define MAC_TMAC_ERR_MASK MACRB(0x018) 377 1.1 ragge #define MAC_RMAC_ERR_REG MACRB(0x028) 378 1.1 ragge #define RMAC_LINK_STATE_CHANGE_INT (1ULL<<32) 379 1.1 ragge #define MAC_RMAC_ERR_MASK MACRB(0x030) 380 1.1 ragge 381 1.1 ragge #define MAC_CFG MACRB(0x0100) 382 1.1 ragge #define TMAC_EN (1ULL<<63) 383 1.1 ragge #define RMAC_EN (1ULL<<62) 384 1.1 ragge #define UTILZATION_CALC_SEL (1ULL<<61) 385 1.1 ragge #define TMAC_LOOPBACK (1ULL<<60) 386 1.1 ragge #define TMAC_APPEND_PAD (1ULL<<59) 387 1.1 ragge #define RMAC_STRIP_FCS (1ULL<<58) 388 1.1 ragge #define RMAC_STRIP_PAD (1ULL<<57) 389 1.1 ragge #define RMAC_PROM_EN (1ULL<<56) 390 1.1 ragge #define RMAC_DISCARD_PFRM (1ULL<<55) 391 1.1 ragge #define RMAC_BCAST_EN (1ULL<<54) 392 1.1 ragge #define RMAC_ALL_ADDR_EN (1ULL<<53) 393 1.1 ragge #define RMAC_MAX_PYLD_LEN MACRB(0x0110) 394 1.1 ragge #define RMAC_PYLD_LEN(x) ((uint64_t)(x) << 48) 395 1.1 ragge #define RMAC_CFG_KEY MACRB(0x0120) 396 1.1 ragge #define RMAC_KEY_VALUE (0x4c0dULL<<48) 397 1.1 ragge #define RMAC_ADDR_CMD_MEM MACRB(0x0128) 398 1.1 ragge #define RMAC_ADDR_CMD_MEM_WE (1ULL<<56) 399 1.1 ragge #define RMAC_ADDR_CMD_MEM_STR (1ULL<<48) 400 1.1 ragge #define RMAC_ADDR_CMD_MEM_OFF(x) ((uint64_t)(x) << 32) 401 1.1 ragge #define MAX_MCAST_ADDR 64 /* slots in mcast table */ 402 1.1 ragge #define RMAC_ADDR_DATA0_MEM MACRB(0x0130) 403 1.1 ragge #define RMAC_ADDR_DATA1_MEM MACRB(0x0138) 404 1.1 ragge #define RMAC_PAUSE_CFG MACRB(0x150) 405 1.1 ragge #define RMAC_PAUSE_GEN_EN (1ULL<<63) 406 1.1 ragge #define RMAC_PAUSE_RCV_EN (1ULL<<62) 407 1.1 ragge 408 1.1 ragge /* 409 1.1 ragge * RLDRAM registers. 410 1.1 ragge */ 411 1.1 ragge #define MC_INT_MASK RLDRB(0x008) 412 1.1 ragge #define MC_ERR_MASK RLDRB(0x018) 413 1.1 ragge 414 1.1 ragge #define RX_QUEUE_CFG RLDRB(0x100) 415 1.1 ragge #define MC_QUEUE(q,s) ((uint64_t)(s)<<(56-(q*8))) 416 1.1 ragge #define MC_RLDRAM_MRS RLDRB(0x108) 417 1.1 ragge #define MC_QUEUE_SIZE_ENABLE (1ULL<<24) 418 1.1 ragge #define MC_RLDRAM_MRS_ENABLE (1ULL<<16) 419 1.1 ragge 420 1.1 ragge /* 421 1.1 ragge * XGXS registers. 422 1.1 ragge */ 423 1.1 ragge /* XGXS control/statue */ 424 1.1 ragge #define XGXS_INT_MASK XGXSB(0x008) 425 1.1 ragge #define XGXS_TXGXS_ERR_MASK XGXSB(0x018) 426 1.1 ragge #define XGXS_RXGXS_ERR_MASK XGXSB(0x030) 427 1.1 ragge #define XGXS_CFG XGXSB(0x0100) 428