16349Sqs148142 /* 26349Sqs148142 * CDDL HEADER START 36349Sqs148142 * 46349Sqs148142 * The contents of this file are subject to the terms of the 56349Sqs148142 * Common Development and Distribution License (the "License"). 66349Sqs148142 * You may not use this file except in compliance with the License. 76349Sqs148142 * 86349Sqs148142 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 96349Sqs148142 * or http://www.opensolaris.org/os/licensing. 106349Sqs148142 * See the License for the specific language governing permissions 116349Sqs148142 * and limitations under the License. 126349Sqs148142 * 136349Sqs148142 * When distributing Covered Code, include this CDDL HEADER in each 146349Sqs148142 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 156349Sqs148142 * If applicable, add the following below this CDDL HEADER, with the 166349Sqs148142 * fields enclosed by brackets "[]" replaced with your own identifying 176349Sqs148142 * information: Portions Copyright [yyyy] [name of copyright owner] 186349Sqs148142 * 196349Sqs148142 * CDDL HEADER END 206349Sqs148142 */ 216349Sqs148142 /* 226349Sqs148142 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 236349Sqs148142 * Use is subject to license terms. 246349Sqs148142 */ 256349Sqs148142 266349Sqs148142 #ifndef _HXGE_RDC_HW_H 276349Sqs148142 #define _HXGE_RDC_HW_H 286349Sqs148142 296349Sqs148142 #pragma ident "%Z%%M% %I% %E% SMI" 306349Sqs148142 316349Sqs148142 #ifdef __cplusplus 326349Sqs148142 extern "C" { 336349Sqs148142 #endif 346349Sqs148142 356349Sqs148142 #define RDC_BASE_ADDR 0X00300000 366349Sqs148142 376349Sqs148142 #define RDC_PAGE_HANDLE (RDC_BASE_ADDR + 0x8) 386349Sqs148142 #define RDC_RX_CFG1 (RDC_BASE_ADDR + 0x20) 396349Sqs148142 #define RDC_RX_CFG2 (RDC_BASE_ADDR + 0x28) 406349Sqs148142 #define RDC_RBR_CFG_A (RDC_BASE_ADDR + 0x40) 416349Sqs148142 #define RDC_RBR_CFG_B (RDC_BASE_ADDR + 0x48) 426349Sqs148142 #define RDC_RBR_KICK (RDC_BASE_ADDR + 0x50) 436349Sqs148142 #define RDC_RBR_QLEN (RDC_BASE_ADDR + 0x58) 446349Sqs148142 #define RDC_RBR_HEAD (RDC_BASE_ADDR + 0x68) 456349Sqs148142 #define RDC_RCR_CFG_A (RDC_BASE_ADDR + 0x80) 466349Sqs148142 #define RDC_RCR_CFG_B (RDC_BASE_ADDR + 0x88) 476349Sqs148142 #define RDC_RCR_QLEN (RDC_BASE_ADDR + 0x90) 486349Sqs148142 #define RDC_RCR_TAIL (RDC_BASE_ADDR + 0xA0) 496349Sqs148142 #define RDC_RCR_FLUSH (RDC_BASE_ADDR + 0xA8) 506349Sqs148142 #define RDC_CLOCK_DIV (RDC_BASE_ADDR + 0xB0) 516349Sqs148142 #define RDC_INT_MASK (RDC_BASE_ADDR + 0xB8) 526349Sqs148142 #define RDC_STAT (RDC_BASE_ADDR + 0xC0) 536349Sqs148142 #define RDC_PKT_COUNT (RDC_BASE_ADDR + 0xD0) 546349Sqs148142 #define RDC_DROP_COUNT (RDC_BASE_ADDR + 0xD8) 556349Sqs148142 #define RDC_BYTE_COUNT (RDC_BASE_ADDR + 0xE0) 566349Sqs148142 #define RDC_PREF_CMD (RDC_BASE_ADDR + 0x100) 576349Sqs148142 #define RDC_PREF_DATA (RDC_BASE_ADDR + 0x108) 586349Sqs148142 #define RDC_SHADOW_CMD (RDC_BASE_ADDR + 0x110) 596349Sqs148142 #define RDC_SHADOW_DATA (RDC_BASE_ADDR + 0x118) 606349Sqs148142 #define RDC_SHADOW_PAR_DATA (RDC_BASE_ADDR + 0x120) 616349Sqs148142 #define RDC_CTRL_FIFO_CMD (RDC_BASE_ADDR + 0x128) 626349Sqs148142 #define RDC_CTRL_FIFO_DATA_LO (RDC_BASE_ADDR + 0x130) 636349Sqs148142 #define RDC_CTRL_FIFO_DATA_HI (RDC_BASE_ADDR + 0x138) 646349Sqs148142 #define RDC_CTRL_FIFO_DATA_ECC (RDC_BASE_ADDR + 0x140) 656349Sqs148142 #define RDC_DATA_FIFO_CMD (RDC_BASE_ADDR + 0x148) 666349Sqs148142 #define RDC_DATA_FIFO_DATA_LO (RDC_BASE_ADDR + 0x150) 676349Sqs148142 #define RDC_DATA_FIFO_DATA_HI (RDC_BASE_ADDR + 0x158) 686349Sqs148142 #define RDC_DATA_FIFO_DATA_ECC (RDC_BASE_ADDR + 0x160) 696349Sqs148142 #define RDC_STAT_INT_DBG (RDC_BASE_ADDR + 0x200) 706349Sqs148142 #define RDC_PREF_PAR_LOG (RDC_BASE_ADDR + 0x210) 716349Sqs148142 #define RDC_SHADOW_PAR_LOG (RDC_BASE_ADDR + 0x218) 726349Sqs148142 #define RDC_CTRL_FIFO_ECC_LOG (RDC_BASE_ADDR + 0x220) 736349Sqs148142 #define RDC_DATA_FIFO_ECC_LOG (RDC_BASE_ADDR + 0x228) 746349Sqs148142 #define RDC_FIFO_ERR_INT_MASK (RDC_BASE_ADDR + 0x230) 756349Sqs148142 #define RDC_FIFO_ERR_STAT (RDC_BASE_ADDR + 0x238) 766349Sqs148142 #define RDC_FIFO_ERR_INT_DBG (RDC_BASE_ADDR + 0x240) 776349Sqs148142 #define RDC_PEU_TXN_LOG (RDC_BASE_ADDR + 0x250) 786349Sqs148142 #define RDC_DBG_TRAINING_VEC (RDC_BASE_ADDR + 0x300) 796349Sqs148142 #define RDC_DBG_GRP_SEL (RDC_BASE_ADDR + 0x308) 806349Sqs148142 816349Sqs148142 826349Sqs148142 /* 836349Sqs148142 * Register: RdcPageHandle 846349Sqs148142 * Logical Page Handle 856349Sqs148142 * Description: Logical page handle specifying upper bits of 64-bit 866349Sqs148142 * PCIE addresses. Fields in this register are part of the dma 876349Sqs148142 * configuration and cannot be changed once the dma is enabled. 886349Sqs148142 * Fields: 896349Sqs148142 * Bits [63:44] of a 64-bit address, used to concatenate to a 906349Sqs148142 * 44-bit address when generating 64-bit addresses on the PCIE 916349Sqs148142 * bus. 926349Sqs148142 */ 936349Sqs148142 typedef union { 946349Sqs148142 uint64_t value; 956349Sqs148142 struct { 966349Sqs148142 #if defined(_BIG_ENDIAN) 97*6864Sqs148142 uint32_t rsrvd:32; 98*6864Sqs148142 uint32_t rsrvd_l:12; 99*6864Sqs148142 uint32_t handle:20; 1006349Sqs148142 #else 101*6864Sqs148142 uint32_t handle:20; 102*6864Sqs148142 uint32_t rsrvd_l:12; 103*6864Sqs148142 uint32_t rsrvd:32; 1046349Sqs148142 #endif 1056349Sqs148142 } bits; 1066349Sqs148142 } rdc_page_handle_t; 1076349Sqs148142 1086349Sqs148142 1096349Sqs148142 /* 1106349Sqs148142 * Register: RdcRxCfg1 1116349Sqs148142 * DMA Configuration 1 1126349Sqs148142 * Description: Configuration parameters for receive DMA block. 1136349Sqs148142 * Fields in this register are part of the dma configuration and 1146349Sqs148142 * cannot be changed once the dma is enabled. 1156349Sqs148142 * The usage of enable, reset, and qst is as follows. Software 1166349Sqs148142 * should use the following sequence to reset a DMA channel. First, 1176349Sqs148142 * set DMA.enable to 0, wait for DMA.qst=1 and then, set DMA.reset to 1186349Sqs148142 * 1. After DMA.reset is cleared by hardware and the DMA.qst is set 1196349Sqs148142 * to 1, software may then start configuring the DMA channel. The 1206349Sqs148142 * DMA.enable can be set or cleared while the DMA is in operation. 1216349Sqs148142 * The state machines of the DMA may not have returned to its initial 1226349Sqs148142 * states yet after the DMA.enable bit is cleared. This condition is 1236349Sqs148142 * indicated by the value of the DMA.qst. An example of DMA.enable 1246349Sqs148142 * being cleared during operation is when a fatal error occurs. 1256349Sqs148142 * Fields: 1266349Sqs148142 * Set to 1 to enable the Receive DMA. If set to 0, packets 1276349Sqs148142 * selecting this DMA will be discarded. On fatal errors, this 1286349Sqs148142 * bit will be cleared by hardware. This bit cannot be set if sw 1296349Sqs148142 * has not resolved any pending fatal error condition: i.e. any 1306349Sqs148142 * RdcStat ldf1 error bits remain set. 1316349Sqs148142 * Set to 1 to reset the DMA. Hardware will clear this bit after 1326349Sqs148142 * reset is completed. A reset will bring the sepecific DMA back 1336349Sqs148142 * to the power on state (including the DMA.en in this register). 1346349Sqs148142 * When set to 1, it indicates all state associated with the DMA 1356349Sqs148142 * are in its initial state following either dma reset or 1366349Sqs148142 * disable. Thus, once this is set to 1, sw could start to 1376349Sqs148142 * configure the DMA if needed. 1386349Sqs148142 * Bits [43:32] of the Mailbox address. 1396349Sqs148142 */ 1406349Sqs148142 typedef union { 1416349Sqs148142 uint64_t value; 1426349Sqs148142 struct { 1436349Sqs148142 #if defined(_BIG_ENDIAN) 144*6864Sqs148142 uint32_t rsrvd:32; 145*6864Sqs148142 uint32_t enable:1; 146*6864Sqs148142 uint32_t reset:1; 147*6864Sqs148142 uint32_t qst:1; 148*6864Sqs148142 uint32_t rsrvd1:17; 149*6864Sqs148142 uint32_t mbaddr_h:12; 1506349Sqs148142 #else 151*6864Sqs148142 uint32_t mbaddr_h:12; 152*6864Sqs148142 uint32_t rsrvd1:17; 153*6864Sqs148142 uint32_t qst:1; 154*6864Sqs148142 uint32_t reset:1; 155*6864Sqs148142 uint32_t enable:1; 156*6864Sqs148142 uint32_t rsrvd:32; 1576349Sqs148142 #endif 1586349Sqs148142 } bits; 1596349Sqs148142 } rdc_rx_cfg1_t; 1606349Sqs148142 1616349Sqs148142 1626349Sqs148142 /* 1636349Sqs148142 * Register: RdcRxCfg2 1646349Sqs148142 * DMA Configuration 2 1656349Sqs148142 * Description: Configuration parameters for receive DMA block. 1666349Sqs148142 * Fields in this register are part of the dma configuration and 1676349Sqs148142 * cannot be changed once the dma is enabled. 1686349Sqs148142 * Fields: 1696349Sqs148142 * Bits [31:6] of the Mailbox address. Bits [5:0] are assumed to 1706349Sqs148142 * be zero, or 64B aligned. 1716349Sqs148142 * Multiple of 64Bs, 0 means no offset, b01 means 64B, b10 means 1726349Sqs148142 * 128B. b11 is invalid, hardware behavior not specified. 1736349Sqs148142 * Set to 1 to select the entire header of 6B. 1746349Sqs148142 */ 1756349Sqs148142 typedef union { 1766349Sqs148142 uint64_t value; 1776349Sqs148142 struct { 1786349Sqs148142 #if defined(_BIG_ENDIAN) 179*6864Sqs148142 uint32_t rsrvd:32; 180*6864Sqs148142 uint32_t mbaddr_l:26; 181*6864Sqs148142 uint32_t rsrvd1:3; 182*6864Sqs148142 uint32_t offset:2; 183*6864Sqs148142 uint32_t full_hdr:1; 1846349Sqs148142 #else 185*6864Sqs148142 uint32_t full_hdr:1; 186*6864Sqs148142 uint32_t offset:2; 187*6864Sqs148142 uint32_t rsrvd1:3; 188*6864Sqs148142 uint32_t mbaddr_l:26; 189*6864Sqs148142 uint32_t rsrvd:32; 1906349Sqs148142 #endif 1916349Sqs148142 } bits; 1926349Sqs148142 } rdc_rx_cfg2_t; 1936349Sqs148142 1946349Sqs148142 1956349Sqs148142 /* 1966349Sqs148142 * Register: RdcRbrCfgA 1976349Sqs148142 * RBR Configuration A 1986349Sqs148142 * Description: The following registers are used to configure and 1996349Sqs148142 * manage the RBR. Note that the entire RBR must stay within the 2006349Sqs148142 * 'page' defined by staddrBase. The behavior of the hardware is 2016349Sqs148142 * undefined if the last entry is outside of the page (if bits 43:18 2026349Sqs148142 * of the address of the last entry are different from bits 43:18 of 2036349Sqs148142 * the base address). Hardware will support wrapping around at the 2046349Sqs148142 * end of the ring buffer defined by LEN. LEN must be a multiple of 2056349Sqs148142 * 64. Fields in this register are part of the dma configuration and 2066349Sqs148142 * cannot be changed once the dma is enabled. 2076349Sqs148142 * HW does not check for all configuration errors across different 2086349Sqs148142 * fields. 2096349Sqs148142 * 2106349Sqs148142 * Fields: 2116349Sqs148142 * Bits 15:6 of the maximum number of RBBs in the buffer ring. 2126349Sqs148142 * Bits 5:0 are hardcoded to zero. The maximum is (2^16 - 64) and 2136349Sqs148142 * is limited by the staddr value. (len + staddr) should not 2146349Sqs148142 * exceed (2^16 - 64). 2156349Sqs148142 * Bits [43:18] of the address for the RBR. This value remains 2166349Sqs148142 * fixed, and is used as the base address of the ring. All 2176349Sqs148142 * entries in the ring have this as their upper address bits. 2186349Sqs148142 * Bits [17:6] of the address of the RBR. staddrBase concatinated 2196349Sqs148142 * with staddr is the starting address of the RBR. (len + staddr) 2206349Sqs148142 * should not exceed (2^16 - 64). 2216349Sqs148142 */ 2226349Sqs148142 typedef union { 2236349Sqs148142 uint64_t value; 2246349Sqs148142 struct { 2256349Sqs148142 #if defined(_BIG_ENDIAN) 226*6864Sqs148142 uint32_t len:10; 227*6864Sqs148142 uint32_t len_lo:6; 228*6864Sqs148142 uint32_t rsrvd:4; 229*6864Sqs148142 uint32_t staddr_base:12; 230*6864Sqs148142 uint32_t staddr_base_l:14; 231*6864Sqs148142 uint32_t staddr:12; 232*6864Sqs148142 uint32_t rsrvd1:6; 2336349Sqs148142 #else 234*6864Sqs148142 uint32_t rsrvd1:6; 235*6864Sqs148142 uint32_t staddr:12; 236*6864Sqs148142 uint32_t staddr_base_l:14; 237*6864Sqs148142 uint32_t staddr_base:12; 238*6864Sqs148142 uint32_t rsrvd:4; 239*6864Sqs148142 uint32_t len_lo:6; 240*6864Sqs148142 uint32_t len:10; 2416349Sqs148142 #endif 2426349Sqs148142 } bits; 2436349Sqs148142 } rdc_rbr_cfg_a_t; 2446349Sqs148142 2456349Sqs148142 2466349Sqs148142 /* 2476349Sqs148142 * Register: RdcRbrCfgB 2486349Sqs148142 * RBR Configuration B 2496349Sqs148142 * Description: This register configures the block size, and the 2506349Sqs148142 * individual packet buffer sizes. The VLD bits of the three block 2516349Sqs148142 * sizes have to be set to 1 in normal operations. These bits may be 2526349Sqs148142 * turned off for debug purpose only. Fields in this register are 2536349Sqs148142 * part of the dma configuration and cannot be changed once the dma 2546349Sqs148142 * is enabled. 2556349Sqs148142 * Fields: 2566349Sqs148142 * Buffer Block Size. b0 - 4K; b1 - 8K. 2576349Sqs148142 * Set to 1 to indicate SIZE2 is valid, and enable hardware to 2586349Sqs148142 * allocate buffers of size 2. Always set to 1 in normal 2596349Sqs148142 * operation. 2606349Sqs148142 * Size 2 of packet buffer. b0 - 2K; b1 - 4K. 2616349Sqs148142 * Set to 1 to indicate SIZE1 is valid, and enable hardware to 2626349Sqs148142 * allocate buffers of size 1. Always set to 1 in normal 2636349Sqs148142 * operation. 2646349Sqs148142 * Size 1 of packet buffer. b0 - 1K; b1 - 2K. 2656349Sqs148142 * Set to 1 to indicate SIZE0 is valid, and enable hardware to 2666349Sqs148142 * allocate buffers of size 0. Always set to 1 in normal 2676349Sqs148142 * operation. 2686349Sqs148142 * Size 0 of packet buffer. b00 - 256; b01 - 512; b10 - 1K; b11 - 2696349Sqs148142 * reserved. 2706349Sqs148142 */ 2716349Sqs148142 typedef union { 2726349Sqs148142 uint64_t value; 2736349Sqs148142 struct { 2746349Sqs148142 #if defined(_BIG_ENDIAN) 275*6864Sqs148142 uint32_t rsrvd:32; 276*6864Sqs148142 uint32_t rsrvd_l:7; 277*6864Sqs148142 uint32_t bksize:1; 278*6864Sqs148142 uint32_t vld2:1; 279*6864Sqs148142 uint32_t rsrvd1:6; 280*6864Sqs148142 uint32_t bufsz2:1; 281*6864Sqs148142 uint32_t vld1:1; 282*6864Sqs148142 uint32_t rsrvd2:6; 283*6864Sqs148142 uint32_t bufsz1:1; 284*6864Sqs148142 uint32_t vld0:1; 285*6864Sqs148142 uint32_t rsrvd3:5; 286*6864Sqs148142 uint32_t bufsz0:2; 2876349Sqs148142 #else 288*6864Sqs148142 uint32_t bufsz0:2; 289*6864Sqs148142 uint32_t rsrvd3:5; 290*6864Sqs148142 uint32_t vld0:1; 291*6864Sqs148142 uint32_t bufsz1:1; 292*6864Sqs148142 uint32_t rsrvd2:6; 293*6864Sqs148142 uint32_t vld1:1; 294*6864Sqs148142 uint32_t bufsz2:1; 295*6864Sqs148142 uint32_t rsrvd1:6; 296*6864Sqs148142 uint32_t vld2:1; 297*6864Sqs148142 uint32_t bksize:1; 298*6864Sqs148142 uint32_t rsrvd_l:7; 299*6864Sqs148142 uint32_t rsrvd:32; 3006349Sqs148142 #endif 3016349Sqs148142 } bits; 3026349Sqs148142 } rdc_rbr_cfg_b_t; 3036349Sqs148142 3046349Sqs148142 3056349Sqs148142 /* 3066349Sqs148142 * Register: RdcRbrKick 3076349Sqs148142 * RBR Kick 3086349Sqs148142 * Description: Block buffer addresses are added to the ring buffer 3096349Sqs148142 * by software. When software writes to the Kick register, indicating 3106349Sqs148142 * the number of descriptors added, hardware will update the internal 3116349Sqs148142 * state of the corresponding buffer pool. 3126349Sqs148142 * HW does not check for all configuration errors across different 3136349Sqs148142 * fields. 3146349Sqs148142 * 3156349Sqs148142 * Fields: 3166349Sqs148142 * Number of Block Buffers added by software. Hardware effect 3176349Sqs148142 * will be triggered when the register is written to. 3186349Sqs148142 */ 3196349Sqs148142 typedef union { 3206349Sqs148142 uint64_t value; 3216349Sqs148142 struct { 3226349Sqs148142 #if defined(_BIG_ENDIAN) 323*6864Sqs148142 uint32_t rsrvd:32; 324*6864Sqs148142 uint32_t rsrvd_l:16; 325*6864Sqs148142 uint32_t bkadd:16; 3266349Sqs148142 #else 327*6864Sqs148142 uint32_t bkadd:16; 328*6864Sqs148142 uint32_t rsrvd_l:16; 329*6864Sqs148142 uint32_t rsrvd:32; 3306349Sqs148142 #endif 3316349Sqs148142 } bits; 3326349Sqs148142 } rdc_rbr_kick_t; 3336349Sqs148142 3346349Sqs148142 3356349Sqs148142 /* 3366349Sqs148142 * Register: RdcRbrQlen 3376349Sqs148142 * RBR Queue Length 3386349Sqs148142 * Description: The current number of entries in the RBR. 3396349Sqs148142 * Fields: 3406349Sqs148142 * Number of block addresses in the ring buffer. 3416349Sqs148142 */ 3426349Sqs148142 typedef union { 3436349Sqs148142 uint64_t value; 3446349Sqs148142 struct { 3456349Sqs148142 #if defined(_BIG_ENDIAN) 346*6864Sqs148142 uint32_t rsrvd:32; 347*6864Sqs148142 uint32_t rsrvd_l:16; 348*6864Sqs148142 uint32_t qlen:16; 3496349Sqs148142 #else 350*6864Sqs148142 uint32_t qlen:16; 351*6864Sqs148142 uint32_t rsrvd_l:16; 352*6864Sqs148142 uint32_t rsrvd:32; 3536349Sqs148142 #endif 3546349Sqs148142 } bits; 3556349Sqs148142 } rdc_rbr_qlen_t; 3566349Sqs148142 3576349Sqs148142 3586349Sqs148142 /* 3596349Sqs148142 * Register: RdcRbrHead 3606349Sqs148142 * RBR Head 3616349Sqs148142 * Description: Lower bits of the RBR head pointer. Software programs 3626349Sqs148142 * the upper bits, specified in rdcRbrConfigA.staddrBase. 3636349Sqs148142 * Fields: 3646349Sqs148142 * Bits [17:2] of the software posted address, 4B aligned. This 3656349Sqs148142 * pointer is updated by hardware after each block buffer is 3666349Sqs148142 * consumed. 3676349Sqs148142 */ 3686349Sqs148142 typedef union { 3696349Sqs148142 uint64_t value; 3706349Sqs148142 struct { 3716349Sqs148142 #if defined(_BIG_ENDIAN) 372*6864Sqs148142 uint32_t rsrvd:32; 373*6864Sqs148142 uint32_t rsrvd_l:14; 374*6864Sqs148142 uint32_t head:16; 375*6864Sqs148142 uint32_t rsrvd1:2; 3766349Sqs148142 #else 377*6864Sqs148142 uint32_t rsrvd1:2; 378*6864Sqs148142 uint32_t head:16; 379*6864Sqs148142 uint32_t rsrvd_l:14; 380*6864Sqs148142 uint32_t rsrvd:32; 3816349Sqs148142 #endif 3826349Sqs148142 } bits; 3836349Sqs148142 } rdc_rbr_head_t; 3846349Sqs148142 3856349Sqs148142 3866349Sqs148142 /* 3876349Sqs148142 * Register: RdcRcrCfgA 3886349Sqs148142 * RCR Configuration A 3896349Sqs148142 * Description: The RCR should be within the 'page' defined by the 3906349Sqs148142 * staddrBase, i.e. staddrBase concatenate with STADDR plus 8 x LEN 3916349Sqs148142 * should be within the last address of the 'page' defined by 3926349Sqs148142 * staddrBase. The length must be a multiple of 32. Fields in this 3936349Sqs148142 * register are part of the dma configuration and cannot be changed 3946349Sqs148142 * once the dma is enabled. 3956349Sqs148142 * HW does not check for all configuration errors across different 3966349Sqs148142 * fields. 3976349Sqs148142 * 3986349Sqs148142 * Fields: 3996349Sqs148142 * Bits 15:5 of the maximum number of 8B entries in RCR. Bits 4:0 4006349Sqs148142 * are hard-coded to zero. The maximum size is (2^16 - 32) and is 4016349Sqs148142 * limited by staddr value. (len + staddr) should not exceed 4026349Sqs148142 * (2^16 - 32). 4036349Sqs148142 * Bits [43:19] of the Start address for the RCR. 4046349Sqs148142 * Bits [18:6] of start address for the RCR. (len + staddr) 4056349Sqs148142 * should not exceed (2^16 - 32). 4066349Sqs148142 */ 4076349Sqs148142 typedef union { 4086349Sqs148142 uint64_t value; 4096349Sqs148142 struct { 4106349Sqs148142 #if defined(_BIG_ENDIAN) 411*6864Sqs148142 uint32_t len:11; 412*6864Sqs148142 uint32_t len_lo:5; 413*6864Sqs148142 uint32_t rsrvd:4; 414*6864Sqs148142 uint32_t staddr_base:12; 415*6864Sqs148142 uint32_t staddr_base_l:13; 416*6864Sqs148142 uint32_t staddr:13; 417*6864Sqs148142 uint32_t rsrvd1:6; 4186349Sqs148142 #else 419*6864Sqs148142 uint32_t rsrvd1:6; 420*6864Sqs148142 uint32_t staddr:13; 421*6864Sqs148142 uint32_t staddr_base_l:13; 422*6864Sqs148142 uint32_t staddr_base:12; 423*6864Sqs148142 uint32_t rsrvd:4; 424*6864Sqs148142 uint32_t len_lo:5; 425*6864Sqs148142 uint32_t len:11; 4266349Sqs148142 #endif 4276349Sqs148142 } bits; 4286349Sqs148142 } rdc_rcr_cfg_a_t; 4296349Sqs148142 4306349Sqs148142 4316349Sqs148142 /* 4326349Sqs148142 * Register: RdcRcrCfgB 4336349Sqs148142 * RCR Configuration B 4346349Sqs148142 * Description: RCR configuration settings. 4356349Sqs148142 * Fields: 4366349Sqs148142 * Packet Threshold; when the number of packets enqueued in RCR 4376349Sqs148142 * is strictly larger than PTHRES, the DMA MAY issue an interrupt 4386349Sqs148142 * if enabled. 4396349Sqs148142 * Enable timeout. If set to one, enable the timeout. A timeout 4406349Sqs148142 * will initiate an update of the software visible states. If 4416349Sqs148142 * interrupt is armed, in addition to the update, an interrupt to 4426349Sqs148142 * CPU will be generated, and the interrupt disarmed. 4436349Sqs148142 * Time out value. The system clock is divided down by the value 4446349Sqs148142 * programmed in the Receive DMA Clock Divider register. 4456349Sqs148142 */ 4466349Sqs148142 typedef union { 4476349Sqs148142 uint64_t value; 4486349Sqs148142 struct { 4496349Sqs148142 #if defined(_BIG_ENDIAN) 450*6864Sqs148142 uint32_t rsrvd:32; 451*6864Sqs148142 uint32_t pthres:16; 452*6864Sqs148142 uint32_t entout:1; 453*6864Sqs148142 uint32_t rsrvd1:9; 454*6864Sqs148142 uint32_t timeout:6; 4556349Sqs148142 #else 456*6864Sqs148142 uint32_t timeout:6; 457*6864Sqs148142 uint32_t rsrvd1:9; 458*6864Sqs148142 uint32_t entout:1; 459*6864Sqs148142 uint32_t pthres:16; 460*6864Sqs148142 uint32_t rsrvd:32; 4616349Sqs148142 #endif 4626349Sqs148142 } bits; 4636349Sqs148142 } rdc_rcr_cfg_b_t; 4646349Sqs148142 4656349Sqs148142 4666349Sqs148142 /* 4676349Sqs148142 * Register: RdcRcrQlen 4686349Sqs148142 * RCR Queue Length 4696349Sqs148142 * Description: The number of entries in the RCR. 4706349Sqs148142 * Fields: 4716349Sqs148142 * Number of packets queued. Initialize to zero after the RCR 4726349Sqs148142 * Configuration A register is written to. 4736349Sqs148142 */ 4746349Sqs148142 typedef union { 4756349Sqs148142 uint64_t value; 4766349Sqs148142 struct { 4776349Sqs148142 #if defined(_BIG_ENDIAN) 478*6864Sqs148142 uint32_t rsrvd:32; 479*6864Sqs148142 uint32_t rsrvd_l:16; 480*6864Sqs148142 uint32_t qlen:16; 4816349Sqs148142 #else 482*6864Sqs148142 uint32_t qlen:16; 483*6864Sqs148142 uint32_t rsrvd_l:16; 484*6864Sqs148142 uint32_t rsrvd:32; 4856349Sqs148142 #endif 4866349Sqs148142 } bits; 4876349Sqs148142 } rdc_rcr_qlen_t; 4886349Sqs148142 4896349Sqs148142 4906349Sqs148142 /* 4916349Sqs148142 * Register: RdcRcrTail 4926349Sqs148142 * RCR Tail 4936349Sqs148142 * Description: Lower bits of the RCR tail pointer. Software programs 4946349Sqs148142 * the upper bits, specified in rdcRcrConfigA.staddrBase. 4956349Sqs148142 * Fields: 4966349Sqs148142 * Address of the RCR Tail Pointer [18:3] (points to the next 4976349Sqs148142 * available location.) Initialized after the RCR Configuration A 4986349Sqs148142 * register is written to. 4996349Sqs148142 */ 5006349Sqs148142 typedef union { 5016349Sqs148142 uint64_t value; 5026349Sqs148142 struct { 5036349Sqs148142 #if defined(_BIG_ENDIAN) 504*6864Sqs148142 uint32_t rsrvd:32; 505*6864Sqs148142 uint32_t rsrvd_l:13; 506*6864Sqs148142 uint32_t tail:16; 507*6864Sqs148142 uint32_t rsrvd1:3; 5086349Sqs148142 #else 509*6864Sqs148142 uint32_t rsrvd1:3; 510*6864Sqs148142 uint32_t tail:16; 511*6864Sqs148142 uint32_t rsrvd_l:13; 512*6864Sqs148142 uint32_t rsrvd:32; 5136349Sqs148142 #endif 5146349Sqs148142 } bits; 5156349Sqs148142 } rdc_rcr_tail_t; 5166349Sqs148142 5176349Sqs148142 5186349Sqs148142 /* 5196349Sqs148142 * Register: RdcRcrFlush 5206349Sqs148142 * RCR Flush 5216349Sqs148142 * Description: This register will force an update to the RCR in 5226349Sqs148142 * system memory. 5236349Sqs148142 * Fields: 5246349Sqs148142 * Set to 1 to force the hardware to store the shadow tail block 5256349Sqs148142 * to DRAM if the hardware state (queue length and pointers) is 5266349Sqs148142 * different from the software visible state. Reset to 0 by 5276349Sqs148142 * hardware when done. 5286349Sqs148142 */ 5296349Sqs148142 typedef union { 5306349Sqs148142 uint64_t value; 5316349Sqs148142 struct { 5326349Sqs148142 #if defined(_BIG_ENDIAN) 533*6864Sqs148142 uint32_t rsrvd:32; 534*6864Sqs148142 uint32_t rsrvd_l:31; 535*6864Sqs148142 uint32_t flush:1; 5366349Sqs148142 #else 537*6864Sqs148142 uint32_t flush:1; 538*6864Sqs148142 uint32_t rsrvd_l:31; 539*6864Sqs148142 uint32_t rsrvd:32; 5406349Sqs148142 #endif 5416349Sqs148142 } bits; 5426349Sqs148142 } rdc_rcr_flush_t; 5436349Sqs148142 5446349Sqs148142 5456349Sqs148142 /* 5466349Sqs148142 * Register: RdcClockDiv 5476349Sqs148142 * Receive DMA Clock Divider 5486349Sqs148142 * Description: The granularity of the DMA timers is determined by 5496349Sqs148142 * the following counter. This is used to drive the DMA timeout 5506349Sqs148142 * counters. For a 250MHz system clock, a value of 25000 (decimal) 5516349Sqs148142 * will yield a granularity of 100 usec. 5526349Sqs148142 * Fields: 5536349Sqs148142 * System clock divider, determines the granularity of the DMA 5546349Sqs148142 * timeout count-down. The hardware count down is count+1. 5556349Sqs148142 */ 5566349Sqs148142 typedef union { 5576349Sqs148142 uint64_t value; 5586349Sqs148142 struct { 5596349Sqs148142 #if defined(_BIG_ENDIAN) 560*6864Sqs148142 uint32_t rsrvd:32; 561*6864Sqs148142 uint32_t rsrvd_l:16; 562*6864Sqs148142 uint32_t count:16; 5636349Sqs148142 #else 564*6864Sqs148142 uint32_t count:16; 565*6864Sqs148142 uint32_t rsrvd_l:16; 566*6864Sqs148142 uint32_t rsrvd:32; 5676349Sqs148142 #endif 5686349Sqs148142 } bits; 5696349Sqs148142 } rdc_clock_div_t; 5706349Sqs148142 5716349Sqs148142 5726349Sqs148142 /* 5736349Sqs148142 * Register: RdcIntMask 5746349Sqs148142 * RDC Interrupt Mask 5756349Sqs148142 * Description: RDC interrupt status register. RCRTHRES and RCRTO 5766349Sqs148142 * bits are used to keep track of normal DMA operations, while the 5776349Sqs148142 * remaining bits are primarily used to detect error conditions. 5786349Sqs148142 * Fields: 5796349Sqs148142 * Set to 0 to enable flagging when rdc receives a response 5806349Sqs148142 * completion timeout from peu. Part of LDF 1. 5816349Sqs148142 * Set to 1 to enable flagging when rdc receives a poisoned 5826349Sqs148142 * completion or non-zero (unsuccessful) completion status 5836349Sqs148142 * received from PEU. Part of LDF 1. 5846349Sqs148142 * Set to 0 to enable flagging when RCR threshold crossed. Part 5856349Sqs148142 * of LDF 0. 5866349Sqs148142 * Set to 0 to enable flagging when RCR timeout. Part of LDF 0. 5876349Sqs148142 * Set to 0 to enable flagging when read from rcr shadow ram 5886349Sqs148142 * generates a parity error Part of LDF 1. 5896349Sqs148142 * Set to 0 to enable flagging when read from rbr prefetch ram 5906349Sqs148142 * generates a parity error Part of LDF 1. 5916349Sqs148142 * Set to 0 to enable flagging when Receive Block Ring prefetch 5926349Sqs148142 * is empty (not enough buffer blocks available depending on 5936349Sqs148142 * incoming pkt size) when hardware tries to queue a packet. 5946349Sqs148142 * Incoming packets will be discarded. Non-fatal error. Part of 5956349Sqs148142 * LDF 1. 5966349Sqs148142 * Set to 0 to enable flagging when packet discard because of RCR 5976349Sqs148142 * shadow full. 5986349Sqs148142 * Set to 0 to enable flagging when Receive Completion Ring full 5996349Sqs148142 * when hardware tries to enqueue the completion status of a 6006349Sqs148142 * packet. Part of LDF 1. 6016349Sqs148142 * Set to 0 to enable flagging when RBR empty when hardware 6026349Sqs148142 * attempts to prefetch. Part of LDF 1. 6036349Sqs148142 * Set to 0 to enable flagging when Receive Block Ring full when 6046349Sqs148142 * software tries to post more blocks. Part of LDF 1. 6056349Sqs148142 */ 6066349Sqs148142 typedef union { 6076349Sqs148142 uint64_t value; 6086349Sqs148142 struct { 6096349Sqs148142 #if defined(_BIG_ENDIAN) 610*6864Sqs148142 uint32_t rsrvd:10; 611*6864Sqs148142 uint32_t rbr_cpl_to:1; 612*6864Sqs148142 uint32_t peu_resp_err:1; 613*6864Sqs148142 uint32_t rsrvd1:5; 614*6864Sqs148142 uint32_t rcr_thres:1; 615*6864Sqs148142 uint32_t rcr_to:1; 616*6864Sqs148142 uint32_t rcr_shadow_par_err:1; 617*6864Sqs148142 uint32_t rbr_prefetch_par_err:1; 618*6864Sqs148142 uint32_t rsrvd2:2; 619*6864Sqs148142 uint32_t rbr_pre_empty:1; 620*6864Sqs148142 uint32_t rcr_shadow_full:1; 621*6864Sqs148142 uint32_t rsrvd3:2; 622*6864Sqs148142 uint32_t rcr_full:1; 623*6864Sqs148142 uint32_t rbr_empty:1; 624*6864Sqs148142 uint32_t rbr_full:1; 625*6864Sqs148142 uint32_t rsrvd4:2; 626*6864Sqs148142 uint32_t rsrvd5:32; 6276349Sqs148142 #else 628*6864Sqs148142 uint32_t rsrvd5:32; 629*6864Sqs148142 uint32_t rsrvd4:2; 630*6864Sqs148142 uint32_t rbr_full:1; 631*6864Sqs148142 uint32_t rbr_empty:1; 632*6864Sqs148142 uint32_t rcr_full:1; 633*6864Sqs148142 uint32_t rsrvd3:2; 634*6864Sqs148142 uint32_t rcr_shadow_full:1; 635*6864Sqs148142 uint32_t rbr_pre_empty:1; 636*6864Sqs148142 uint32_t rsrvd2:2; 637*6864Sqs148142 uint32_t rbr_prefetch_par_err:1; 638*6864Sqs148142 uint32_t rcr_shadow_par_err:1; 639*6864Sqs148142 uint32_t rcr_to:1; 640*6864Sqs148142 uint32_t rcr_thres:1; 641*6864Sqs148142 uint32_t rsrvd1:5; 642*6864Sqs148142 uint32_t peu_resp_err:1; 643*6864Sqs148142 uint32_t rbr_cpl_to:1; 644*6864Sqs148142 uint32_t rsrvd:10; 6456349Sqs148142 #endif 6466349Sqs148142 } bits; 6476349Sqs148142 } rdc_int_mask_t; 6486349Sqs148142 6496349Sqs148142 6506349Sqs148142 /* 6516349Sqs148142 * Register: RdcStat 6526349Sqs148142 * RDC Control And Status 6536349Sqs148142 * Description: The DMA channels are controlled using this register. 6546349Sqs148142 * Fields: 6556349Sqs148142 * Set to 1 to indicate rdc received a response completion 6566349Sqs148142 * timeout from peu. Fatal error. Part of LDF 1. 6576349Sqs148142 * Set to 1 to indicate poisoned completion or non-zero 6586349Sqs148142 * (unsuccessful) completion status received from PEU. Part of 6596349Sqs148142 * LDF 1. 6606349Sqs148142 * Set to 1 to enable mailbox update. Hardware will reset to 0 6616349Sqs148142 * after one update. Software needs to set to 1 for each update. 6626349Sqs148142 * Write 0 has no effect. Note that once set by software, only 6636349Sqs148142 * hardware can reset the value. This bit is also used to keep 6646349Sqs148142 * track of the exclusivity between threshold triggered or 6656349Sqs148142 * timeout triggered interrupt. If this bit is not set, there 6666349Sqs148142 * will be no timer based interrupt, and threshold based 6676349Sqs148142 * interrupt will not issue a mailbox update. It is recommended 6686349Sqs148142 * that software should set this bit to one when arming the 6696349Sqs148142 * device for interrupt. 6706349Sqs148142 * Set to 1 to indicate RCR threshold crossed. This is a level 6716349Sqs148142 * event. Part of LDF 0. 6726349Sqs148142 * Set to 1 to indicate RCR time-outed if MEX bit is set and the 6736349Sqs148142 * queue length is non-zero when timeout occurs. When software 6746349Sqs148142 * writes 1 to this bit, RCRTO will be reset to 0. Part of LDF 0. 6756349Sqs148142 * Set to 1 to indicate read from rcr shadow ram generates a 6766349Sqs148142 * parity error Writing a 1 to this register also clears the 6776349Sqs148142 * rdcshadowParLog register Fatal error. Part of LDF 1. 6786349Sqs148142 * Set to 1 to indicate read from rbr prefetch ram generates 6796349Sqs148142 * parity error Writing a 1 to this register also clears the 6806349Sqs148142 * rdcPrefParLog register Fatal error. Part of LDF 1. 6816349Sqs148142 * Set to 1 to indicate Receive Block Ring prefetch is empty (not 6826349Sqs148142 * enough buffer blocks available depending on incoming pkt size) 6836349Sqs148142 * when hardware tries to queue a packet. Incoming packets will 6846349Sqs148142 * be discarded. Non-fatal error. Part of LDF 1. 6856349Sqs148142 * Set to 1 to indicate packet discard because of RCR shadow 6866349Sqs148142 * full. RCR Shadow full cannot be set to 1 in a normal 6876349Sqs148142 * operation. When set to 1, it indicates a fatal error. Part of 6886349Sqs148142 * LDF 1. 6896349Sqs148142 * Set to 1 to indicate Receive Completion Ring full when 6906349Sqs148142 * hardware tries to enqueue the completion status of a packet. 6916349Sqs148142 * Incoming packets will be discarded. No buffer consumed. Fatal 6926349Sqs148142 * error. Part of LDF 1. 6936349Sqs148142 * Set to 1 to indicate RBR empty when hardware attempts to 6946349Sqs148142 * prefetch. Part of LDF 1. 6956349Sqs148142 * Set to 1 to indicate Receive Buffer Ring full when software 6966349Sqs148142 * writes the kick register with a value greater than the length 6976349Sqs148142 * of the RBR length. Incoming packets will be discarded. Fatal 6986349Sqs148142 * error. Part of LDF 1. 6996349Sqs148142 * Number of buffer pointers read. Used to advance the RCR head 7006349Sqs148142 * pointer. 7016349Sqs148142 * Number of packets read; when written to, decrement the QLEN 7026349Sqs148142 * counter by PKTREAD. QLEN is lower bounded to zero. 7036349Sqs148142 */ 7046349Sqs148142 typedef union { 7056349Sqs148142 uint64_t value; 7066349Sqs148142 struct { 7076349Sqs148142 #if defined(_BIG_ENDIAN) 708*6864Sqs148142 uint32_t rsrvd:10; 709*6864Sqs148142 uint32_t rbr_cpl_to:1; 710*6864Sqs148142 uint32_t peu_resp_err:1; 711*6864Sqs148142 uint32_t rsrvd1:4; 712*6864Sqs148142 uint32_t mex:1; 713*6864Sqs148142 uint32_t rcr_thres:1; 714*6864Sqs148142 uint32_t rcr_to:1; 715*6864Sqs148142 uint32_t rcr_shadow_par_err:1; 716*6864Sqs148142 uint32_t rbr_prefetch_par_err:1; 717*6864Sqs148142 uint32_t rsrvd2:2; 718*6864Sqs148142 uint32_t rbr_pre_empty:1; 719*6864Sqs148142 uint32_t rcr_shadow_full:1; 720*6864Sqs148142 uint32_t rsrvd3:2; 721*6864Sqs148142 uint32_t rcr_full:1; 722*6864Sqs148142 uint32_t rbr_empty:1; 723*6864Sqs148142 uint32_t rbr_full:1; 724*6864Sqs148142 uint32_t rsrvd4:2; 725*6864Sqs148142 uint32_t ptrread:16; 726*6864Sqs148142 uint32_t pktread:16; 7276349Sqs148142 #else 728*6864Sqs148142 uint32_t pktread:16; 729*6864Sqs148142 uint32_t ptrread:16; 730*6864Sqs148142 uint32_t rsrvd4:2; 731*6864Sqs148142 uint32_t rbr_full:1; 732*6864Sqs148142 uint32_t rbr_empty:1; 733*6864Sqs148142 uint32_t rcr_full:1; 734*6864Sqs148142 uint32_t rsrvd3:2; 735*6864Sqs148142 uint32_t rcr_shadow_full:1; 736*6864Sqs148142 uint32_t rbr_pre_empty:1; 737*6864Sqs148142 uint32_t rsrvd2:2; 738*6864Sqs148142 uint32_t rbr_prefetch_par_err:1; 739*6864Sqs148142 uint32_t rcr_shadow_par_err:1; 740*6864Sqs148142 uint32_t rcr_to:1; 741*6864Sqs148142 uint32_t rcr_thres:1; 742*6864Sqs148142 uint32_t mex:1; 743*6864Sqs148142 uint32_t rsrvd1:4; 744*6864Sqs148142 uint32_t peu_resp_err:1; 745*6864Sqs148142 uint32_t rbr_cpl_to:1; 746*6864Sqs148142 uint32_t rsrvd:10; 7476349Sqs148142 #endif 7486349Sqs148142 } bits; 7496349Sqs148142 } rdc_stat_t; 7506349Sqs148142 7516349Sqs148142 7526349Sqs148142 /* 7536349Sqs148142 * Register: RdcPktCount 7546349Sqs148142 * Rx DMA Packet Counter 7556349Sqs148142 * Description: Counts the number of packets received from the Rx 7566349Sqs148142 * Virtual MAC for this DMA channel. 7576349Sqs148142 * Fields: 7586349Sqs148142 * Count of SYN packets received from RVM. This counter 7596349Sqs148142 * saturates. 7606349Sqs148142 * Count of packets received from RVM. This counter saturates. 7616349Sqs148142 */ 7626349Sqs148142 typedef union { 7636349Sqs148142 uint64_t value; 7646349Sqs148142 struct { 7656349Sqs148142 #if defined(_BIG_ENDIAN) 766*6864Sqs148142 uint32_t syn_pkt_count:32; 767*6864Sqs148142 uint32_t pkt_count:32; 7686349Sqs148142 #else 769*6864Sqs148142 uint32_t pkt_count:32; 770*6864Sqs148142 uint32_t syn_pkt_count:32; 7716349Sqs148142 #endif 7726349Sqs148142 } bits; 7736349Sqs148142 } rdc_pkt_count_t; 7746349Sqs148142 7756349Sqs148142 7766349Sqs148142 /* 7776349Sqs148142 * Register: RdcDropCount 7786349Sqs148142 * Rx DMA Dropped Packet Counters 7796349Sqs148142 * Description: Counts the number of packets dropped due to different 7806349Sqs148142 * types of errors. 7816349Sqs148142 * Fields: 7826349Sqs148142 * Count of packets dropped because they were longer than the 7836349Sqs148142 * maximum length. This counter saturates. 7846349Sqs148142 * Count of packets dropped because there was no block available 7856349Sqs148142 * in the RBR Prefetch Buffer. This counter saturates. 7866349Sqs148142 * Count of packets dropped because the RVM marked the packet as 7876349Sqs148142 * errored. This counter saturates. 7886349Sqs148142 * Count of packets dropped because there was a framing error 7896349Sqs148142 * from the RVM. This counter saturates. 7906349Sqs148142 * Count of packets dropped because the packet did not fit in the 7916349Sqs148142 * rx ram. This counter saturates. 7926349Sqs148142 */ 7936349Sqs148142 typedef union { 7946349Sqs148142 uint64_t value; 7956349Sqs148142 struct { 7966349Sqs148142 #if defined(_BIG_ENDIAN) 797*6864Sqs148142 uint32_t rsrvd:16; 798*6864Sqs148142 uint32_t too_long:8; 799*6864Sqs148142 uint32_t no_rbr_avail:8; 800*6864Sqs148142 uint32_t rvm_error:8; 801*6864Sqs148142 uint32_t frame_error:8; 802*6864Sqs148142 uint32_t rxram_error:8; 803*6864Sqs148142 uint32_t rsrvd1:8; 8046349Sqs148142 #else 805*6864Sqs148142 uint32_t rsrvd1:8; 806*6864Sqs148142 uint32_t rxram_error:8; 807*6864Sqs148142 uint32_t frame_error:8; 808*6864Sqs148142 uint32_t rvm_error:8; 809*6864Sqs148142 uint32_t no_rbr_avail:8; 810*6864Sqs148142 uint32_t too_long:8; 811*6864Sqs148142 uint32_t rsrvd:16; 8126349Sqs148142 #endif 8136349Sqs148142 } bits; 8146349Sqs148142 } rdc_drop_count_t; 8156349Sqs148142 8166349Sqs148142 8176349Sqs148142 /* 8186349Sqs148142 * Register: RdcByteCount 8196349Sqs148142 * Rx DMA Byte Counter 8206349Sqs148142 * Description: Counts the number of bytes transferred by dma for all 8216349Sqs148142 * channels. 8226349Sqs148142 * Fields: 8236349Sqs148142 * Count of bytes transferred by dma. This counter saturates. 8246349Sqs148142 */ 8256349Sqs148142 typedef union { 8266349Sqs148142 uint64_t value; 8276349Sqs148142 struct { 8286349Sqs148142 #if defined(_BIG_ENDIAN) 829*6864Sqs148142 uint32_t rsrvd:32; 830*6864Sqs148142 uint32_t count:32; 8316349Sqs148142 #else 832*6864Sqs148142 uint32_t count:32; 833*6864Sqs148142 uint32_t rsrvd:32; 8346349Sqs148142 #endif 8356349Sqs148142 } bits; 8366349Sqs148142 } rdc_byte_count_t; 8376349Sqs148142 8386349Sqs148142 8396349Sqs148142 /* 8406349Sqs148142 * Register: RdcPrefCmd 8416349Sqs148142 * Rx DMA Prefetch Buffer Command 8426349Sqs148142 * Description: Allows debug access to the entire prefetch buffer, 8436349Sqs148142 * along with the rdcPrefData register. Writing the rdcPrefCmd 8446349Sqs148142 * triggers the access. For writes, software writes the 32 bits of 8456349Sqs148142 * data to the rdcPrefData register before writing the write command 8466349Sqs148142 * to this register. For reads, software first writes the the read 8476349Sqs148142 * command to this register, then reads the 32-bit value from the 8486349Sqs148142 * rdcPrefData register. The status field should be polled by 8496349Sqs148142 * software until it goes low, indicating the read or write has 8506349Sqs148142 * completed. 8516349Sqs148142 * Fields: 8526349Sqs148142 * status of indirect access 0=busy 1=done 8536349Sqs148142 * Command type. 1 indicates a read command, 0 a write command. 8546349Sqs148142 * enable writing of parity bits 1=enabled, 0=disabled 8556349Sqs148142 * DMA channel of entry to read or write 8566349Sqs148142 * Entry in the prefetch buffer to read or write 8576349Sqs148142 */ 8586349Sqs148142 typedef union { 8596349Sqs148142 uint64_t value; 8606349Sqs148142 struct { 8616349Sqs148142 #if defined(_BIG_ENDIAN) 862*6864Sqs148142 uint32_t rsrvd:32; 863*6864Sqs148142 uint32_t status:1; 864*6864Sqs148142 uint32_t cmd:1; 865*6864Sqs148142 uint32_t par_en:1; 866*6864Sqs148142 uint32_t rsrvd1:22; 867*6864Sqs148142 uint32_t dmc:2; 868*6864Sqs148142 uint32_t entry:5; 8696349Sqs148142 #else 870*6864Sqs148142 uint32_t entry:5; 871*6864Sqs148142 uint32_t dmc:2; 872*6864Sqs148142 uint32_t rsrvd1:22; 873*6864Sqs148142 uint32_t par_en:1; 874*6864Sqs148142 uint32_t cmd:1; 875*6864Sqs148142 uint32_t status:1; 876*6864Sqs148142 uint32_t rsrvd:32; 8776349Sqs148142 #endif 8786349Sqs148142 } bits; 8796349Sqs148142 } rdc_pref_cmd_t; 8806349Sqs148142 8816349Sqs148142 8826349Sqs148142 /* 8836349Sqs148142 * Register: RdcPrefData 8846349Sqs148142 * Rx DMA Prefetch Buffer Data 8856349Sqs148142 * Description: See rdcPrefCmd register. 8866349Sqs148142 * Fields: 8876349Sqs148142 * For writes, parity bits is written into prefetch buffer. For 8886349Sqs148142 * reads, parity bits read from the prefetch buffer. 8896349Sqs148142 * For writes, data which is written into prefetch buffer. For 8906349Sqs148142 * reads, data read from the prefetch buffer. 8916349Sqs148142 */ 8926349Sqs148142 typedef union { 8936349Sqs148142 uint64_t value; 8946349Sqs148142 struct { 8956349Sqs148142 #if defined(_BIG_ENDIAN) 896*6864Sqs148142 uint32_t rsrvd:28; 897*6864Sqs148142 uint32_t par:4; 898*6864Sqs148142 uint32_t data:32; 8996349Sqs148142 #else 900*6864Sqs148142 uint32_t data:32; 901*6864Sqs148142 uint32_t par:4; 902*6864Sqs148142 uint32_t rsrvd:28; 9036349Sqs148142 #endif 9046349Sqs148142 } bits; 9056349Sqs148142 } rdc_pref_data_t; 9066349Sqs148142 9076349Sqs148142 9086349Sqs148142 /* 9096349Sqs148142 * Register: RdcShadowCmd 9106349Sqs148142 * Rx DMA Shadow Tail Command 9116349Sqs148142 * Description: Allows debug access to the entire shadow tail, along 9126349Sqs148142 * with the rdcShadowData register. Writing the rdcShadowCmd triggers 9136349Sqs148142 * the access. For writes, software writes the 64 bits of data to the 9146349Sqs148142 * rdcShadowData register before writing the write command to this 9156349Sqs148142 * register. For reads, software first writes the the read command to 9166349Sqs148142 * this register, then reads the 64-bit value from the rdcShadowData 9176349Sqs148142 * register. The valid field should be polled by software until it 9186349Sqs148142 * goes low, indicating the read or write has completed. 9196349Sqs148142 * Fields: 9206349Sqs148142 * status of indirect access 0=busy 1=done 9216349Sqs148142 * Command type. 1 indicates a read command, 0 a write command. 9226349Sqs148142 * enable writing of parity bits 1=enabled, 0=disabled 9236349Sqs148142 * DMA channel of entry to read or write 9246349Sqs148142 * Entry in the shadow tail to read or write 9256349Sqs148142 */ 9266349Sqs148142 typedef union { 9276349Sqs148142 uint64_t value; 9286349Sqs148142 struct { 9296349Sqs148142 #if defined(_BIG_ENDIAN) 930*6864Sqs148142 uint32_t rsrvd:32; 931*6864Sqs148142 uint32_t status:1; 932*6864Sqs148142 uint32_t cmd:1; 933*6864Sqs148142 uint32_t par_en:1; 934*6864Sqs148142 uint32_t rsrvd1:23; 935*6864Sqs148142 uint32_t dmc:2; 936*6864Sqs148142 uint32_t entry:4; 9376349Sqs148142 #else 938*6864Sqs148142 uint32_t entry:4; 939*6864Sqs148142 uint32_t dmc:2; 940*6864Sqs148142 uint32_t rsrvd1:23; 941*6864Sqs148142 uint32_t par_en:1; 942*6864Sqs148142 uint32_t cmd:1; 943*6864Sqs148142 uint32_t status:1; 944*6864Sqs148142 uint32_t rsrvd:32; 9456349Sqs148142 #endif 9466349Sqs148142 } bits; 9476349Sqs148142 } rdc_shadow_cmd_t; 9486349Sqs148142 9496349Sqs148142 9506349Sqs148142 /* 9516349Sqs148142 * Register: RdcShadowData 9526349Sqs148142 * Rx DMA Shadow Tail Data 9536349Sqs148142 * Description: See rdcShadowCmd register. 9546349Sqs148142 * Fields: 9556349Sqs148142 * For writes, data which is written into shadow tail. For reads, 9566349Sqs148142 * data read from the shadow tail. 9576349Sqs148142 */ 9586349Sqs148142 typedef union { 9596349Sqs148142 uint64_t value; 9606349Sqs148142 struct { 9616349Sqs148142 #if defined(_BIG_ENDIAN) 962*6864Sqs148142 uint32_t data:32; 963*6864Sqs148142 uint32_t data_l:32; 9646349Sqs148142 #else 965*6864Sqs148142 uint32_t data_l:32; 966*6864Sqs148142 uint32_t data:32; 9676349Sqs148142 #endif 9686349Sqs148142 } bits; 9696349Sqs148142 } rdc_shadow_data_t; 9706349Sqs148142 9716349Sqs148142 9726349Sqs148142 /* 9736349Sqs148142 * Register: RdcShadowParData 9746349Sqs148142 * Rx DMA Shadow Tail Parity Data 9756349Sqs148142 * Description: See rdcShadowCmd register. 9766349Sqs148142 * Fields: 9776349Sqs148142 * For writes, parity data is written into shadow tail. For 9786349Sqs148142 * reads, parity data read from the shadow tail. 9796349Sqs148142 */ 9806349Sqs148142 typedef union { 9816349Sqs148142 uint64_t value; 9826349Sqs148142 struct { 9836349Sqs148142 #if defined(_BIG_ENDIAN) 984*6864Sqs148142 uint32_t rsrvd:32; 985*6864Sqs148142 uint32_t rsrvd1:24; 986*6864Sqs148142 uint32_t parity_data:8; 9876349Sqs148142 #else 988*6864Sqs148142 uint32_t parity_data:8; 989*6864Sqs148142 uint32_t rsrvd1:24; 990*6864Sqs148142 uint32_t rsrvd:32; 9916349Sqs148142 #endif 9926349Sqs148142 } bits; 9936349Sqs148142 } rdc_shadow_par_data_t; 9946349Sqs148142 9956349Sqs148142 9966349Sqs148142 /* 9976349Sqs148142 * Register: RdcCtrlFifoCmd 9986349Sqs148142 * Rx DMA Control Fifo Command 9996349Sqs148142 * Description: Allows debug access to the entire Rx Ctl FIFO, along 10006349Sqs148142 * with the rdcCtrlFifoData register. Writing the rdcCtrlFifoCmd 10016349Sqs148142 * triggers the access. For writes, software writes the 128 bits of 10026349Sqs148142 * data to the rdcCtrlFifoData registers before writing the write 10036349Sqs148142 * command to this register. For reads, software first writes the the 10046349Sqs148142 * read command to this register, then reads the 128-bit value from 10056349Sqs148142 * the rdcCtrlFifoData registers. The valid field should be polled by 10066349Sqs148142 * software until it goes low, indicating the read or write has 10076349Sqs148142 * completed. 10086349Sqs148142 * Fields: 10096349Sqs148142 * status of indirect access 0=busy 1=done 10106349Sqs148142 * Command type. 1 indicates a read command, 0 a write command. 10116349Sqs148142 * enable writing of ECC bits 1=enabled, 0=disabled 10126349Sqs148142 * Entry in the rx control ram to read or write 10136349Sqs148142 */ 10146349Sqs148142 typedef union { 10156349Sqs148142 uint64_t value; 10166349Sqs148142 struct { 10176349Sqs148142 #if defined(_BIG_ENDIAN) 1018*6864Sqs148142 uint32_t rsrvd:32; 1019*6864Sqs148142 uint32_t status:1; 1020*6864Sqs148142 uint32_t cmd:1; 1021*6864Sqs148142 uint32_t ecc_en:1; 1022*6864Sqs148142 uint32_t rsrvd1:20; 1023*6864Sqs148142 uint32_t entry:9; 10246349Sqs148142 #else 1025*6864Sqs148142 uint32_t entry:9; 1026*6864Sqs148142 uint32_t rsrvd1:20; 1027*6864Sqs148142 uint32_t ecc_en:1; 1028*6864Sqs148142 uint32_t cmd:1; 1029*6864Sqs148142 uint32_t status:1; 1030*6864Sqs148142 uint32_t rsrvd:32; 10316349Sqs148142 #endif 10326349Sqs148142 } bits; 10336349Sqs148142 } rdc_ctrl_fifo_cmd_t; 10346349Sqs148142 10356349Sqs148142 10366349Sqs148142 /* 10376349Sqs148142 * Register: RdcCtrlFifoDataLo 10386349Sqs148142 * Rx DMA Control Fifo Data Lo 10396349Sqs148142 * Description: Lower 64 bits read or written to the Rx Ctl FIFO. See 10406349Sqs148142 * rdcCtrlFifoCmd register. 10416349Sqs148142 * Fields: 10426349Sqs148142 * For writes, data which is written into rx control ram. For 10436349Sqs148142 * reads, data read from the rx control ram. 10446349Sqs148142 */ 10456349Sqs148142 typedef union { 10466349Sqs148142 uint64_t value; 10476349Sqs148142 struct { 10486349Sqs148142 #if defined(_BIG_ENDIAN) 1049*6864Sqs148142 uint32_t data:32; 1050*6864Sqs148142 uint32_t data_l:32; 10516349Sqs148142 #else 1052*6864Sqs148142 uint32_t data_l:32; 1053*6864Sqs148142 uint32_t data:32; 10546349Sqs148142 #endif 10556349Sqs148142 } bits; 10566349Sqs148142 } rdc_ctrl_fifo_data_lo_t; 10576349Sqs148142 10586349Sqs148142 10596349Sqs148142 /* 10606349Sqs148142 * Register: RdcCtrlFifoDataHi 10616349Sqs148142 * Rx DMA Control Fifo Data Hi 10626349Sqs148142 * Description: Upper 64 bits read or written to the Rx Ctl FIFO. See 10636349Sqs148142 * rdcCtrlFifoCmd register. 10646349Sqs148142 * Fields: 10656349Sqs148142 * For writes, data which is written into rx control ram. For 10666349Sqs148142 * reads, data read from the rx control ram. 10676349Sqs148142 */ 10686349Sqs148142 typedef union { 10696349Sqs148142 uint64_t value; 10706349Sqs148142 struct { 10716349Sqs148142 #if defined(_BIG_ENDIAN) 1072*6864Sqs148142 uint32_t data:32; 1073*6864Sqs148142 uint32_t data_l:32; 10746349Sqs148142 #else 1075*6864Sqs148142 uint32_t data_l:32; 1076*6864Sqs148142 uint32_t data:32; 10776349Sqs148142 #endif 10786349Sqs148142 } bits; 10796349Sqs148142 } rdc_ctrl_fifo_data_hi_t; 10806349Sqs148142 10816349Sqs148142 10826349Sqs148142 /* 10836349Sqs148142 * Register: RdcCtrlFifoDataEcc 10846349Sqs148142 * Rx DMA Control Fifo Data ECC 10856349Sqs148142 * Description: 16 bits ECC data read or written to the Rx Ctl FIFO. 10866349Sqs148142 * See rdcCtrlFifoCmd register. 10876349Sqs148142 * Fields: 10886349Sqs148142 * For writes, data which is written into rx control ram. For 10896349Sqs148142 * reads, data read from the rx control ram. 10906349Sqs148142 * For writes, data which is written into rx control ram. For 10916349Sqs148142 * reads, data read from the rx control ram. 10926349Sqs148142 */ 10936349Sqs148142 typedef union { 10946349Sqs148142 uint64_t value; 10956349Sqs148142 struct { 10966349Sqs148142 #if defined(_BIG_ENDIAN) 1097*6864Sqs148142 uint32_t rsrvd:32; 1098*6864Sqs148142 uint32_t rsrvd1:16; 1099*6864Sqs148142 uint32_t ecc_data_hi:8; 1100*6864Sqs148142 uint32_t ecc_data_lo:8; 11016349Sqs148142 #else 1102*6864Sqs148142 uint32_t ecc_data_lo:8; 1103*6864Sqs148142 uint32_t ecc_data_hi:8; 1104*6864Sqs148142 uint32_t rsrvd1:16; 1105*6864Sqs148142 uint32_t rsrvd:32; 11066349Sqs148142 #endif 11076349Sqs148142 } bits; 11086349Sqs148142 } rdc_ctrl_fifo_data_ecc_t; 11096349Sqs148142 11106349Sqs148142 11116349Sqs148142 /* 11126349Sqs148142 * Register: RdcDataFifoCmd 11136349Sqs148142 * Rx DMA Data Fifo Command 11146349Sqs148142 * Description: Allows debug access to the entire Rx Data FIFO, along 11156349Sqs148142 * with the rdcDataFifoData register. Writing the rdcCtrlFifoCmd 11166349Sqs148142 * triggers the access. For writes, software writes the 128 bits of 11176349Sqs148142 * data to the rdcDataFifoData registers before writing the write 11186349Sqs148142 * command to this register. For reads, software first writes the the 11196349Sqs148142 * read command to this register, then reads the 128-bit value from 11206349Sqs148142 * the rdcDataFifoData registers. The valid field should be polled by 11216349Sqs148142 * software until it goes low, indicating the read or write has 11226349Sqs148142 * completed. 11236349Sqs148142 * Fields: 11246349Sqs148142 * status of indirect access 0=busy 1=done 11256349Sqs148142 * Command type. 1 indicates a read command, 0 a write command. 11266349Sqs148142 * enable writing of ECC bits 1=enabled, 0=disabled 11276349Sqs148142 * Entry in the rx data ram to read or write 11286349Sqs148142 */ 11296349Sqs148142 typedef union { 11306349Sqs148142 uint64_t value; 11316349Sqs148142 struct { 11326349Sqs148142 #if defined(_BIG_ENDIAN) 1133*6864Sqs148142 uint32_t rsrvd:32; 1134*6864Sqs148142 uint32_t status:1; 1135*6864Sqs148142 uint32_t cmd:1; 1136*6864Sqs148142 uint32_t ecc_en:1; 1137*6864Sqs148142 uint32_t rsrvd1:18; 1138*6864Sqs148142 uint32_t entry:11; 11396349Sqs148142 #else 1140*6864Sqs148142 uint32_t entry:11; 1141*6864Sqs148142 uint32_t rsrvd1:18; 1142*6864Sqs148142 uint32_t ecc_en:1; 1143*6864Sqs148142 uint32_t cmd:1; 1144*6864Sqs148142 uint32_t status:1; 1145*6864Sqs148142 uint32_t rsrvd:32; 11466349Sqs148142 #endif 11476349Sqs148142 } bits; 11486349Sqs148142 } rdc_data_fifo_cmd_t; 11496349Sqs148142 11506349Sqs148142 11516349Sqs148142 /* 11526349Sqs148142 * Register: RdcDataFifoDataLo 11536349Sqs148142 * Rx DMA Data Fifo Data Lo 11546349Sqs148142 * Description: Lower 64 bits read or written to the Rx Data FIFO. 11556349Sqs148142 * See rdcDataFifoCmd register. 11566349Sqs148142 * Fields: 11576349Sqs148142 * For writes, data which is written into rx data ram. For reads, 11586349Sqs148142 * data read from the rx data ram. 11596349Sqs148142 */ 11606349Sqs148142 typedef union { 11616349Sqs148142 uint64_t value; 11626349Sqs148142 struct { 11636349Sqs148142 #if defined(_BIG_ENDIAN) 1164*6864Sqs148142 uint32_t data:32; 1165*6864Sqs148142 uint32_t data_l:32; 11666349Sqs148142 #else 1167*6864Sqs148142 uint32_t data_l:32; 1168*6864Sqs148142 uint32_t data:32; 11696349Sqs148142 #endif 11706349Sqs148142 } bits; 11716349Sqs148142 } rdc_data_fifo_data_lo_t; 11726349Sqs148142 11736349Sqs148142 11746349Sqs148142 /* 11756349Sqs148142 * Register: RdcDataFifoDataHi 11766349Sqs148142 * Rx DMA Data Fifo Data Hi 11776349Sqs148142 * Description: Upper 64 bits read or written to the Rx Data FIFO. 11786349Sqs148142 * See rdcDataFifoCmd register. 11796349Sqs148142 * Fields: 11806349Sqs148142 * For writes, data which is written into rx data ram. For reads, 11816349Sqs148142 * data read from the rx data ram. 11826349Sqs148142 */ 11836349Sqs148142 typedef union { 11846349Sqs148142 uint64_t value; 11856349Sqs148142 struct { 11866349Sqs148142 #if defined(_BIG_ENDIAN) 1187*6864Sqs148142 uint32_t data:32; 1188*6864Sqs148142 uint32_t data_l:32; 11896349Sqs148142 #else 1190*6864Sqs148142 uint32_t data_l:32; 1191*6864Sqs148142 uint32_t data:32; 11926349Sqs148142 #endif 11936349Sqs148142 } bits; 11946349Sqs148142 } rdc_data_fifo_data_hi_t; 11956349Sqs148142 11966349Sqs148142 11976349Sqs148142 /* 11986349Sqs148142 * Register: RdcDataFifoDataEcc 11996349Sqs148142 * Rx DMA Data Fifo ECC Data 12006349Sqs148142 * Description: 16 bits ECC data read or written to the Rx Data FIFO. 12016349Sqs148142 * See rdcDataFifoCmd register. 12026349Sqs148142 * Fields: 12036349Sqs148142 * For writes, data which is written into rx data ram. For reads, 12046349Sqs148142 * data read from the rx data ram. 12056349Sqs148142 * For writes, data which is written into rx data ram. For reads, 12066349Sqs148142 * data read from the rx data ram. 12076349Sqs148142 */ 12086349Sqs148142 typedef union { 12096349Sqs148142 uint64_t value; 12106349Sqs148142 struct { 12116349Sqs148142 #if defined(_BIG_ENDIAN) 1212*6864Sqs148142 uint32_t rsrvd:32; 1213*6864Sqs148142 uint32_t rsrvd1:16; 1214*6864Sqs148142 uint32_t ecc_data_hi:8; 1215*6864Sqs148142 uint32_t ecc_data_lo:8; 12166349Sqs148142 #else 1217*6864Sqs148142 uint32_t ecc_data_lo:8; 1218*6864Sqs148142 uint32_t ecc_data_hi:8; 1219*6864Sqs148142 uint32_t rsrvd1:16; 1220*6864Sqs148142 uint32_t rsrvd:32; 12216349Sqs148142 #endif 12226349Sqs148142 } bits; 12236349Sqs148142 } rdc_data_fifo_data_ecc_t; 12246349Sqs148142 12256349Sqs148142 12266349Sqs148142 /* 12276349Sqs148142 * Register: RdcStatIntDbg 12286349Sqs148142 * RDC Debug Control and Status Interrupt 12296349Sqs148142 * Description: RDC debug control and status interrupt register. 12306349Sqs148142 * Debug RDC control and status register bits to check if interrupt 12316349Sqs148142 * is asserted used to detect error conditions. 12326349Sqs148142 * Fields: 12336349Sqs148142 * Set to 1 to enable interrupt Part of LDF 1. 12346349Sqs148142 * Set to 1 to enable interrupt Part of LDF 1. 12356349Sqs148142 * Set to 1 to enable interrupt Part of LDF 0. 12366349Sqs148142 * Set to 1 to enable interrupt Part of LDF 0. 12376349Sqs148142 * Set to 1 to enable interrupt Part of LDF 1. 12386349Sqs148142 * Set to 1 to enable interrupt Part of LDF 1. 12396349Sqs148142 * Set to 1 to enable interrupt Part of LDF 1. 12406349Sqs148142 * Set to 1 to enable interrupt 12416349Sqs148142 * Set to 1 to enable interrupt Part of LDF 1. 12426349Sqs148142 * Set to 1 to enable interrupt Part of LDF 1. 12436349Sqs148142 * Set to 1 to enable interrupt Part of LDF 1. 12446349Sqs148142 */ 12456349Sqs148142 typedef union { 12466349Sqs148142 uint64_t value; 12476349Sqs148142 struct { 12486349Sqs148142 #if defined(_BIG_ENDIAN) 1249*6864Sqs148142 uint32_t rsrvd:10; 1250*6864Sqs148142 uint32_t rbr_cpl_to:1; 1251*6864Sqs148142 uint32_t peu_resp_err:1; 1252*6864Sqs148142 uint32_t rsrvd1:5; 1253*6864Sqs148142 uint32_t rcr_thres:1; 1254*6864Sqs148142 uint32_t rcr_to:1; 1255*6864Sqs148142 uint32_t rcr_shadow_par_err:1; 1256*6864Sqs148142 uint32_t rbr_prefetch_par_err:1; 1257*6864Sqs148142 uint32_t rsrvd2:2; 1258*6864Sqs148142 uint32_t rbr_pre_empty:1; 1259*6864Sqs148142 uint32_t rcr_shadow_full:1; 1260*6864Sqs148142 uint32_t rsrvd3:2; 1261*6864Sqs148142 uint32_t rcr_full:1; 1262*6864Sqs148142 uint32_t rbr_empty:1; 1263*6864Sqs148142 uint32_t rbr_full:1; 1264*6864Sqs148142 uint32_t rsrvd4:2; 1265*6864Sqs148142 uint32_t rsrvd5:32; 12666349Sqs148142 #else 1267*6864Sqs148142 uint32_t rsrvd5:32; 1268*6864Sqs148142 uint32_t rsrvd4:2; 1269*6864Sqs148142 uint32_t rbr_full:1; 1270*6864Sqs148142 uint32_t rbr_empty:1; 1271*6864Sqs148142 uint32_t rcr_full:1; 1272*6864Sqs148142 uint32_t rsrvd3:2; 1273*6864Sqs148142 uint32_t rcr_shadow_full:1; 1274*6864Sqs148142 uint32_t rbr_pre_empty:1; 1275*6864Sqs148142 uint32_t rsrvd2:2; 1276*6864Sqs148142 uint32_t rbr_prefetch_par_err:1; 1277*6864Sqs148142 uint32_t rcr_shadow_par_err:1; 1278*6864Sqs148142 uint32_t rcr_to:1; 1279*6864Sqs148142 uint32_t rcr_thres:1; 1280*6864Sqs148142 uint32_t rsrvd1:5; 1281*6864Sqs148142 uint32_t peu_resp_err:1; 1282*6864Sqs148142 uint32_t rbr_cpl_to:1; 1283*6864Sqs148142 uint32_t rsrvd:10; 12846349Sqs148142 #endif 12856349Sqs148142 } bits; 12866349Sqs148142 } rdc_stat_int_dbg_t; 12876349Sqs148142 12886349Sqs148142 12896349Sqs148142 /* 12906349Sqs148142 * Register: RdcPrefParLog 12916349Sqs148142 * Rx DMA Prefetch Buffer Parity Log 12926349Sqs148142 * Description: RDC DMA Prefetch Buffer parity log register This 12936349Sqs148142 * register logs the first parity error that is encountered. Writing 12946349Sqs148142 * a 1 to RdcStat::rbrPrefetchParErr clears this register 12956349Sqs148142 * Fields: 12966349Sqs148142 * Address of parity error 12976349Sqs148142 */ 12986349Sqs148142 typedef union { 12996349Sqs148142 uint64_t value; 13006349Sqs148142 struct { 13016349Sqs148142 #if defined(_BIG_ENDIAN) 1302*6864Sqs148142 uint32_t rsrvd:32; 1303*6864Sqs148142 uint32_t rsrvd_l:25; 1304*6864Sqs148142 uint32_t address:7; 13056349Sqs148142 #else 1306*6864Sqs148142 uint32_t address:7; 1307*6864Sqs148142 uint32_t rsrvd_l:25; 1308*6864Sqs148142 uint32_t rsrvd:32; 13096349Sqs148142 #endif 13106349Sqs148142 } bits; 13116349Sqs148142 } rdc_pref_par_log_t; 13126349Sqs148142 13136349Sqs148142 13146349Sqs148142 /* 13156349Sqs148142 * Register: RdcShadowParLog 13166349Sqs148142 * Rx DMA Shadow Tail Parity Log 13176349Sqs148142 * Description: RDC DMA Shadow Tail parity log register This register 13186349Sqs148142 * logs the first parity error that is encountered. Writing a 1 to 13196349Sqs148142 * RdcStat::rcrShadowParErr clears this register 13206349Sqs148142 * Fields: 13216349Sqs148142 * Address of parity error 13226349Sqs148142 */ 13236349Sqs148142 typedef union { 13246349Sqs148142 uint64_t value; 13256349Sqs148142 struct { 13266349Sqs148142 #if defined(_BIG_ENDIAN) 1327*6864Sqs148142 uint32_t rsrvd:32; 1328*6864Sqs148142 uint32_t rsrvd1:26; 1329*6864Sqs148142 uint32_t address:6; 13306349Sqs148142 #else 1331*6864Sqs148142 uint32_t address:6; 1332*6864Sqs148142 uint32_t rsrvd1:26; 1333*6864Sqs148142 uint32_t rsrvd:32; 13346349Sqs148142 #endif 13356349Sqs148142 } bits; 13366349Sqs148142 } rdc_shadow_par_log_t; 13376349Sqs148142 13386349Sqs148142 13396349Sqs148142 /* 13406349Sqs148142 * Register: RdcCtrlFifoEccLog 13416349Sqs148142 * Rx DMA Control Fifo ECC Log 13426349Sqs148142 * Description: RDC DMA Control FIFO ECC log register This register 13436349Sqs148142 * logs the first ECC error that is encountered. A double-bit ecc 13446349Sqs148142 * error over writes any single-bit ecc error previously logged 13456349Sqs148142 * Fields: 13466349Sqs148142 * Address of ECC error for upper 64 bits Writing a 1 to 13476349Sqs148142 * RdcFifoErrStat::rxCtrlFifoDed[1] or 13486349Sqs148142 * RdcFifoErrStat::rxCtrlFifoSec[1] clears this register 13496349Sqs148142 * Address of ECC error for lower 64 bits Writing a 1 to 13506349Sqs148142 * RdcFifoErrStat::rxCtrlFifoDed[0] or 13516349Sqs148142 * RdcFifoErrStat::rxCtrlFifoSec[0] clears this register 13526349Sqs148142 * ECC syndrome for upper 64 bits Writing a 1 to 13536349Sqs148142 * RdcFifoErrStat::rxCtrlFifoDed[1] or 13546349Sqs148142 * RdcFifoErrStat::rxCtrlFifoSec[1] clears this register 13556349Sqs148142 * ECC syndrome for lower 64 bits Writing a 1 to 13566349Sqs148142 * RdcFifoErrStat::rxCtrlFifoDed[0] or 13576349Sqs148142 * RdcFifoErrStat::rxCtrlFifoSec[0] clears this register 13586349Sqs148142 */ 13596349Sqs148142 typedef union { 13606349Sqs148142 uint64_t value; 13616349Sqs148142 struct { 13626349Sqs148142 #if defined(_BIG_ENDIAN) 1363*6864Sqs148142 uint32_t rsrvd:7; 1364*6864Sqs148142 uint32_t address_hi:9; 1365*6864Sqs148142 uint32_t rsrvd1:7; 1366*6864Sqs148142 uint32_t address_lo:9; 1367*6864Sqs148142 uint32_t rsrvd2:8; 1368*6864Sqs148142 uint32_t syndrome_hi:8; 1369*6864Sqs148142 uint32_t rsrvd3:8; 1370*6864Sqs148142 uint32_t syndrome_lo:8; 13716349Sqs148142 #else 1372*6864Sqs148142 uint32_t syndrome_lo:8; 1373*6864Sqs148142 uint32_t rsrvd3:8; 1374*6864Sqs148142 uint32_t syndrome_hi:8; 1375*6864Sqs148142 uint32_t rsrvd2:8; 1376*6864Sqs148142 uint32_t address_lo:9; 1377*6864Sqs148142 uint32_t rsrvd1:7; 1378*6864Sqs148142 uint32_t address_hi:9; 1379*6864Sqs148142 uint32_t rsrvd:7; 13806349Sqs148142 #endif 13816349Sqs148142 } bits; 13826349Sqs148142 } rdc_ctrl_fifo_ecc_log_t; 13836349Sqs148142 13846349Sqs148142 13856349Sqs148142 /* 13866349Sqs148142 * Register: RdcDataFifoEccLog 13876349Sqs148142 * Rx DMA Data Fifo ECC Log 13886349Sqs148142 * Description: RDC DMA data FIFO ECC log register This register logs 13896349Sqs148142 * the first ECC error that is encountered. A double-bit ecc error 13906349Sqs148142 * over writes any single-bit ecc error previously logged 13916349Sqs148142 * Fields: 13926349Sqs148142 * Address of ECC error for upper 64 bits Writing a 1 to 13936349Sqs148142 * RdcFifoErrStat::rxDataFifoDed[1] or 13946349Sqs148142 * RdcFifoErrStat::rxDataFifoSec[1] clears this register 13956349Sqs148142 * Address of ECC error for lower 64 bits Writing a 1 to 13966349Sqs148142 * RdcFifoErrStat::rxDataFifoDed[0] or 13976349Sqs148142 * RdcFifoErrStat::rxDataFifoSec[0] clears this register 13986349Sqs148142 * ECC syndrome for upper 64 bits Writing a 1 to 13996349Sqs148142 * RdcFifoErrStat::rxDataFifoDed[1] or 14006349Sqs148142 * RdcFifoErrStat::rxDataFifoSec[1] clears this register 14016349Sqs148142 * ECC syndrome for lower 64 bits Writing a 1 to 14026349Sqs148142 * RdcFifoErrStat::rxDataFifoDed[0] or 14036349Sqs148142 * RdcFifoErrStat::rxDataFifoSec[0] clears this register 14046349Sqs148142 */ 14056349Sqs148142 typedef union { 14066349Sqs148142 uint64_t value; 14076349Sqs148142 struct { 14086349Sqs148142 #if defined(_BIG_ENDIAN) 1409*6864Sqs148142 uint32_t rsrvd:5; 1410*6864Sqs148142 uint32_t address_hi:11; 1411*6864Sqs148142 uint32_t rsrvd1:5; 1412*6864Sqs148142 uint32_t address_lo:11; 1413*6864Sqs148142 uint32_t rsrvd2:8; 1414*6864Sqs148142 uint32_t syndrome_hi:8; 1415*6864Sqs148142 uint32_t rsrvd3:8; 1416*6864Sqs148142 uint32_t syndrome_lo:8; 14176349Sqs148142 #else 1418*6864Sqs148142 uint32_t syndrome_lo:8; 1419*6864Sqs148142 uint32_t rsrvd3:8; 1420*6864Sqs148142 uint32_t syndrome_hi:8; 1421*6864Sqs148142 uint32_t rsrvd2:8; 1422*6864Sqs148142 uint32_t address_lo:11; 1423*6864Sqs148142 uint32_t rsrvd1:5; 1424*6864Sqs148142 uint32_t address_hi:11; 1425*6864Sqs148142 uint32_t rsrvd:5; 14266349Sqs148142 #endif 14276349Sqs148142 } bits; 14286349Sqs148142 } rdc_data_fifo_ecc_log_t; 14296349Sqs148142 14306349Sqs148142 14316349Sqs148142 /* 14326349Sqs148142 * Register: RdcFifoErrIntMask 14336349Sqs148142 * FIFO Error Interrupt Mask 14346349Sqs148142 * Description: FIFO Error interrupt mask register. Control the 14356349Sqs148142 * interrupt assertion of FIFO Errors. see FIFO Error Status register 14366349Sqs148142 * for more description 14376349Sqs148142 * Fields: 14386349Sqs148142 * Set to 0 to enable flagging when rx ctrl ram logs ecc single 14396349Sqs148142 * bit error Part of Device Error 0. 14406349Sqs148142 * Set to 0 to enable flagging when rx ctrl ram logs ecc double 14416349Sqs148142 * bit error Part of Device Error 1. 14426349Sqs148142 * Set to 0 to enable flagging when rx data ram logs ecc single 14436349Sqs148142 * bit error Part of Device Error 0. 14446349Sqs148142 * Set to 0 to enable flagging when rx data ram logs ecc double 14456349Sqs148142 * bit error Part of Device Error 1. 14466349Sqs148142 */ 14476349Sqs148142 typedef union { 14486349Sqs148142 uint64_t value; 14496349Sqs148142 struct { 14506349Sqs148142 #if defined(_BIG_ENDIAN) 1451*6864Sqs148142 uint32_t rsrvd:32; 1452*6864Sqs148142 uint32_t rsrvd1:24; 1453*6864Sqs148142 uint32_t rx_ctrl_fifo_sec:2; 1454*6864Sqs148142 uint32_t rx_ctrl_fifo_ded:2; 1455*6864Sqs148142 uint32_t rx_data_fifo_sec:2; 1456*6864Sqs148142 uint32_t rx_data_fifo_ded:2; 14576349Sqs148142 #else 1458*6864Sqs148142 uint32_t rx_data_fifo_ded:2; 1459*6864Sqs148142 uint32_t rx_data_fifo_sec:2; 1460*6864Sqs148142 uint32_t rx_ctrl_fifo_ded:2; 1461*6864Sqs148142 uint32_t rx_ctrl_fifo_sec:2; 1462*6864Sqs148142 uint32_t rsrvd1:24; 1463*6864Sqs148142 uint32_t rsrvd:32; 14646349Sqs148142 #endif 14656349Sqs148142 } bits; 14666349Sqs148142 } rdc_fifo_err_int_mask_t; 14676349Sqs148142 14686349Sqs148142 14696349Sqs148142 /* 14706349Sqs148142 * Register: RdcFifoErrStat 14716349Sqs148142 * FIFO Error Status 14726349Sqs148142 * Description: FIFO Error Status register. Log status of FIFO 14736349Sqs148142 * Errors. Rx Data buffer is physically two seperate memory, each of 14746349Sqs148142 * the two error bits point to one of the memory. Each entry in the 14756349Sqs148142 * rx ctrl point to 2 buffer locations and they are read seperatly. 14766349Sqs148142 * The two error bits point to each half of the entry. 14776349Sqs148142 * Fields: 14786349Sqs148142 * Set to 1 by HW to indicate rx control ram received a ecc 14796349Sqs148142 * single bit error Writing a 1 to either bit clears the 14806349Sqs148142 * RdcCtrlFifoEccLog register Non-Fatal error. Part of Device 14816349Sqs148142 * Error 0 14826349Sqs148142 * Set to 1 by HW to indicate rx control ram received a ecc 14836349Sqs148142 * double bit error Writing a 1 to either bit clears the 14846349Sqs148142 * RdcCtrlFifoEccLog register Fatal error. Part of Device Error 1 14856349Sqs148142 * Set to 1 by HW to indicate rx data ram received a ecc single 14866349Sqs148142 * bit error Writing a 1 to either bit clears the 14876349Sqs148142 * RdcDataFifoEccLog register Non-Fatal error. Part of Device 14886349Sqs148142 * Error 0 14896349Sqs148142 * Set to 1 by HW to indicate rx data ram received a ecc double 14906349Sqs148142 * bit error Writing a 1 to either bit clears the 14916349Sqs148142 * RdcDataFifoEccLog register Fatal error. Part of Device Error 1 14926349Sqs148142 */ 14936349Sqs148142 typedef union { 14946349Sqs148142 uint64_t value; 14956349Sqs148142 struct { 14966349Sqs148142 #if defined(_BIG_ENDIAN) 1497*6864Sqs148142 uint32_t rsrvd:32; 1498*6864Sqs148142 uint32_t rsrvd_l:24; 1499*6864Sqs148142 uint32_t rx_ctrl_fifo_sec:2; 1500*6864Sqs148142 uint32_t rx_ctrl_fifo_ded:2; 1501*6864Sqs148142 uint32_t rx_data_fifo_sec:2; 1502*6864Sqs148142 uint32_t rx_data_fifo_ded:2; 15036349Sqs148142 #else 1504*6864Sqs148142 uint32_t rx_data_fifo_ded:2; 1505*6864Sqs148142 uint32_t rx_data_fifo_sec:2; 1506*6864Sqs148142 uint32_t rx_ctrl_fifo_ded:2; 1507*6864Sqs148142 uint32_t rx_ctrl_fifo_sec:2; 1508*6864Sqs148142 uint32_t rsrvd_l:24; 1509*6864Sqs148142 uint32_t rsrvd:32; 15106349Sqs148142 #endif 15116349Sqs148142 } bits; 15126349Sqs148142 } rdc_fifo_err_stat_t; 15136349Sqs148142 15146349Sqs148142 15156349Sqs148142 /* 15166349Sqs148142 * Register: RdcFifoErrIntDbg 15176349Sqs148142 * FIFO Error Interrupt Debug 15186349Sqs148142 * Description: FIFO Error interrupt Debug register. Debug Control 15196349Sqs148142 * the interrupt assertion of FIFO Errors. 15206349Sqs148142 * Fields: 15216349Sqs148142 * Set to 1 to enable interrupt Part of Device Error 0. 15226349Sqs148142 * Set to 1 to enable interrupt Part of Device Error 1. 15236349Sqs148142 * Set to 1 to enable interrupt Part of Device Error 0. 15246349Sqs148142 * Set to 1 to enable interrupt Part of Device Error 1. 15256349Sqs148142 */ 15266349Sqs148142 typedef union { 15276349Sqs148142 uint64_t value; 15286349Sqs148142 struct { 15296349Sqs148142 #if defined(_BIG_ENDIAN) 1530*6864Sqs148142 uint32_t rsrvd:32; 1531*6864Sqs148142 uint32_t rsrvd1:24; 1532*6864Sqs148142 uint32_t rx_ctrl_fifo_sec:2; 1533*6864Sqs148142 uint32_t rx_ctrl_fifo_ded:2; 1534*6864Sqs148142 uint32_t rx_data_fifo_sec:2; 1535*6864Sqs148142 uint32_t rx_data_fifo_ded:2; 15366349Sqs148142 #else 1537*6864Sqs148142 uint32_t rx_data_fifo_ded:2; 1538*6864Sqs148142 uint32_t rx_data_fifo_sec:2; 1539*6864Sqs148142 uint32_t rx_ctrl_fifo_ded:2; 1540*6864Sqs148142 uint32_t rx_ctrl_fifo_sec:2; 1541*6864Sqs148142 uint32_t rsrvd1:24; 1542*6864Sqs148142 uint32_t rsrvd:32; 15436349Sqs148142 #endif 15446349Sqs148142 } bits; 15456349Sqs148142 } rdc_fifo_err_int_dbg_t; 15466349Sqs148142 15476349Sqs148142 15486349Sqs148142 /* 15496349Sqs148142 * Register: RdcPeuTxnLog 15506349Sqs148142 * PEU Transaction Log 15516349Sqs148142 * Description: PEU Transaction Log register. Counts the memory read 15526349Sqs148142 * and write requests sent to peu block. For debug only. 15536349Sqs148142 * Fields: 15546349Sqs148142 * Counts the memory write transactions sent to peu block. This 15556349Sqs148142 * counter saturates. This counter increments when vnmDbg is on 15566349Sqs148142 * Counts the memory read transactions sent to peu block. This 15576349Sqs148142 * counter saturates. This counter increments when vnmDbg is on 15586349Sqs148142 */ 15596349Sqs148142 typedef union { 15606349Sqs148142 uint64_t value; 15616349Sqs148142 struct { 15626349Sqs148142 #if defined(_BIG_ENDIAN) 1563*6864Sqs148142 uint32_t rsrvd:32; 1564*6864Sqs148142 uint32_t rsrvd1:16; 1565*6864Sqs148142 uint32_t peu_mem_wr_count:8; 1566*6864Sqs148142 uint32_t peu_mem_rd_count:8; 15676349Sqs148142 #else 1568*6864Sqs148142 uint32_t peu_mem_rd_count:8; 1569*6864Sqs148142 uint32_t peu_mem_wr_count:8; 1570*6864Sqs148142 uint32_t rsrvd1:16; 1571*6864Sqs148142 uint32_t rsrvd:32; 15726349Sqs148142 #endif 15736349Sqs148142 } bits; 15746349Sqs148142 } rdc_peu_txn_log_t; 15756349Sqs148142 15766349Sqs148142 15776349Sqs148142 /* 15786349Sqs148142 * Register: RdcDbgTrainingVec 15796349Sqs148142 * Debug Training Vector 15806349Sqs148142 * Description: Debug Training Vector register Debug Training Vector 15816349Sqs148142 * for the coreClk domain. For the pcieClk domain, the dbgxMsb and 15826349Sqs148142 * dbgyMsb values are flipped on the debug bus. 15836349Sqs148142 * Fields: 15846349Sqs148142 * Blade Number, the value read depends on the blade this block 15856349Sqs148142 * resides 15866349Sqs148142 * debug training vector the sub-group select value of 0 selects 15876349Sqs148142 * this vector 15886349Sqs148142 * Blade Number, the value read depends on the blade this block 15896349Sqs148142 * resides 15906349Sqs148142 * debug training vector the sub-group select value of 0 selects 15916349Sqs148142 * this vector 15926349Sqs148142 */ 15936349Sqs148142 typedef union { 15946349Sqs148142 uint64_t value; 15956349Sqs148142 struct { 15966349Sqs148142 #if defined(_BIG_ENDIAN) 1597*6864Sqs148142 uint32_t rsrvd:32; 1598*6864Sqs148142 uint32_t dbgx_msb:1; 1599*6864Sqs148142 uint32_t dbgx_bld_num:3; 1600*6864Sqs148142 uint32_t dbgx_training_vec:12; 1601*6864Sqs148142 uint32_t dbgy_msb:1; 1602*6864Sqs148142 uint32_t dbgy_bld_num:3; 1603*6864Sqs148142 uint32_t dbgy_training_vec:12; 16046349Sqs148142 #else 1605*6864Sqs148142 uint32_t dbgy_training_vec:12; 1606*6864Sqs148142 uint32_t dbgy_bld_num:3; 1607*6864Sqs148142 uint32_t dbgy_msb:1; 1608*6864Sqs148142 uint32_t dbgx_training_vec:12; 1609*6864Sqs148142 uint32_t dbgx_bld_num:3; 1610*6864Sqs148142 uint32_t dbgx_msb:1; 1611*6864Sqs148142 uint32_t rsrvd:32; 16126349Sqs148142 #endif 16136349Sqs148142 } bits; 16146349Sqs148142 } rdc_dbg_training_vec_t; 16156349Sqs148142 16166349Sqs148142 16176349Sqs148142 /* 16186349Sqs148142 * Register: RdcDbgGrpSel 16196349Sqs148142 * Debug Group Select 16206349Sqs148142 * Description: Debug Group Select register. Debug Group Select 16216349Sqs148142 * register selects the group of signals brought out on the debug 16226349Sqs148142 * port 16236349Sqs148142 * Fields: 16246349Sqs148142 * high 32b sub-group select 16256349Sqs148142 * low 32b sub-group select 16266349Sqs148142 */ 16276349Sqs148142 typedef union { 16286349Sqs148142 uint64_t value; 16296349Sqs148142 struct { 16306349Sqs148142 #if defined(_BIG_ENDIAN) 1631*6864Sqs148142 uint32_t rsrvd:32; 1632*6864Sqs148142 uint32_t rsrvd_l:16; 1633*6864Sqs148142 uint32_t dbg_h32_sub_sel:8; 1634*6864Sqs148142 uint32_t dbg_l32_sub_sel:8; 16356349Sqs148142 #else 1636*6864Sqs148142 uint32_t dbg_l32_sub_sel:8; 1637*6864Sqs148142 uint32_t dbg_h32_sub_sel:8; 1638*6864Sqs148142 uint32_t rsrvd_l:16; 1639*6864Sqs148142 uint32_t rsrvd:32; 16406349Sqs148142 #endif 16416349Sqs148142 } bits; 16426349Sqs148142 } rdc_dbg_grp_sel_t; 16436349Sqs148142 16446349Sqs148142 16456349Sqs148142 #ifdef __cplusplus 16466349Sqs148142 } 16476349Sqs148142 #endif 16486349Sqs148142 16496349Sqs148142 #endif /* _HXGE_RDC_HW_H */ 1650