15578Smx205022 /* 25578Smx205022 * CDDL HEADER START 35578Smx205022 * 45578Smx205022 * The contents of this file are subject to the terms of the 55578Smx205022 * Common Development and Distribution License (the "License"). 65578Smx205022 * You may not use this file except in compliance with the License. 75578Smx205022 * 85578Smx205022 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 95578Smx205022 * or http://www.opensolaris.org/os/licensing. 105578Smx205022 * See the License for the specific language governing permissions 115578Smx205022 * and limitations under the License. 125578Smx205022 * 135578Smx205022 * When distributing Covered Code, include this CDDL HEADER in each 145578Smx205022 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 155578Smx205022 * If applicable, add the following below this CDDL HEADER, with the 165578Smx205022 * fields enclosed by brackets "[]" replaced with your own identifying 175578Smx205022 * information: Portions Copyright [yyyy] [name of copyright owner] 185578Smx205022 * 195578Smx205022 * CDDL HEADER END 205578Smx205022 */ 215578Smx205022 225574Smx205022 /* 239604SZhen.W@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 245574Smx205022 * Use is subject to license terms. 255574Smx205022 */ 265574Smx205022 275574Smx205022 #ifndef _SYS_NGE_CHIP_H 285574Smx205022 #define _SYS_NGE_CHIP_H 295574Smx205022 305574Smx205022 #ifdef __cplusplus 315574Smx205022 extern "C" { 325574Smx205022 #endif 335574Smx205022 345574Smx205022 #include "nge.h" 355574Smx205022 365574Smx205022 #define VENDOR_ID_NVIDIA 0x10de 375574Smx205022 385574Smx205022 #define DEVICE_ID_MCP04_37 0x37 395574Smx205022 #define DEVICE_ID_MCP04_38 0x38 405574Smx205022 #define DEVICE_ID_CK804_56 0x56 415574Smx205022 #define DEVICE_ID_CK804_57 0x57 425574Smx205022 #define DEVICE_ID_MCP51_269 0x269 435574Smx205022 #define DEVICE_ID_MCP51_268 0x268 445574Smx205022 #define DEVICE_ID_MCP55_373 0x373 455574Smx205022 #define DEVICE_ID_MCP55_372 0x372 465574Smx205022 #define DEVICE_ID_MCP61_3EE 0x3ee 475574Smx205022 #define DEVICE_ID_MCP61_3EF 0x3ef 489708SZhen.W@Sun.COM #define DEVICE_ID_MCP77_760 0x760 49*9906SZhen.W@Sun.COM #define DEVICE_ID_MCP79_AB0 0xab0 505574Smx205022 #define DEVICE_ID_NF3_E6 0xe6 515574Smx205022 #define DEVICE_ID_NF3_DF 0xdf 525574Smx205022 535574Smx205022 /* Private PCI configuration register for bus config of ck804/mcp55 */ 545574Smx205022 #define PCI_CONF_HT_INTERNAL 0x4c 555574Smx205022 565574Smx205022 typedef union _nge_interbus_conf { 575574Smx205022 uint32_t conf_val; 585574Smx205022 struct { 595574Smx205022 uint32_t unit_id:5; 605574Smx205022 uint32_t resv5_23:19; 615574Smx205022 uint32_t aux_val:3; 625574Smx205022 uint32_t resv27:1; 635574Smx205022 uint32_t msi_off:1; 645574Smx205022 uint32_t msix_off:1; /* mcp55 only */ 655574Smx205022 uint32_t resv30_31:2; 665574Smx205022 } conf_bits; 675574Smx205022 } nge_interbus_conf; 685574Smx205022 695574Smx205022 /* Private PCI configuration register for MSI mask of mcp55 */ 705574Smx205022 #define PCI_CONF_HT_MSI_MASK 0x60 715574Smx205022 725574Smx205022 typedef union _nge_msi_mask_conf { 735574Smx205022 uint32_t msi_mask_conf_val; 745574Smx205022 struct { 755574Smx205022 uint32_t vec0_off:1; 765574Smx205022 uint32_t vec1_off:1; 775574Smx205022 uint32_t vec2_off:1; 785574Smx205022 uint32_t vec3_off:1; 795574Smx205022 uint32_t vec4_off:1; 805574Smx205022 uint32_t vec5_off:1; 815574Smx205022 uint32_t vec6_off:1; 825574Smx205022 uint32_t vec7_off:1; 835574Smx205022 uint32_t resv8_31:24; 845574Smx205022 } msi_mask_bits; 855574Smx205022 } nge_msi_mask_conf; 865574Smx205022 875574Smx205022 /* Private PCI configuration register for MSI map capability of mcp55 */ 885574Smx205022 #define PCI_CONF_HT_MSI_MAP_CAP 0x6c 895574Smx205022 905574Smx205022 typedef union _nge_msi_map_cap_conf { 915574Smx205022 uint32_t msi_map_cap_conf_val; 925574Smx205022 struct { 935574Smx205022 uint32_t cap_id:8; 945574Smx205022 uint32_t next_ptr:8; 955574Smx205022 uint32_t map_en:1; 965574Smx205022 uint32_t map_fixed:1; 975574Smx205022 uint32_t resv18_26:9; 985574Smx205022 uint32_t cap_type:5; 995574Smx205022 } map_cap_conf_bits; 1005574Smx205022 } nge_msi_map_cap_conf; 1015574Smx205022 1025574Smx205022 /* 1035574Smx205022 * Master interrupt 1045574Smx205022 */ 1055574Smx205022 #define NGE_INTR_SRC 0x000 1065574Smx205022 #define INTR_SRC_ALL 0x00007fff 1075574Smx205022 typedef union _nge_intr_src { 1085574Smx205022 uint32_t intr_val; 1095574Smx205022 struct { 1105574Smx205022 uint32_t reint:1; 1115574Smx205022 uint32_t rcint:1; 1125574Smx205022 uint32_t miss:1; 1135574Smx205022 uint32_t teint:1; 1145574Smx205022 uint32_t tcint:1; 1155574Smx205022 uint32_t stint:1; 1165574Smx205022 uint32_t mint:1; 1175574Smx205022 uint32_t rfint:1; 1185574Smx205022 uint32_t tfint:1; 1195574Smx205022 uint32_t feint:1; 1205574Smx205022 uint32_t resv10:1; 1215574Smx205022 uint32_t resv11:1; 1225574Smx205022 uint32_t resv12:1; 1235574Smx205022 uint32_t resv13:1; 1245574Smx205022 uint32_t phyint:1; 1255574Smx205022 uint32_t resv15_31:17; 1265574Smx205022 } int_bits; 1275574Smx205022 } nge_intr_src; 1285574Smx205022 1295574Smx205022 /* 1305574Smx205022 * Master interrupt Mask 1315574Smx205022 */ 1325574Smx205022 #define NGE_INTR_MASK 0x004 1335574Smx205022 #define NGE_INTR_ALL_EN 0x00007fff 1345574Smx205022 typedef union _nge_intr_mask { 1355574Smx205022 uint32_t mask_val; 1365574Smx205022 struct { 1375574Smx205022 uint32_t reint:1; 1385574Smx205022 uint32_t rcint:1; 1395574Smx205022 uint32_t miss:1; 1405574Smx205022 uint32_t teint:1; 1415574Smx205022 uint32_t tcint:1; 1425574Smx205022 uint32_t stint:1; 1435574Smx205022 uint32_t mint:1; 1445574Smx205022 uint32_t rfint:1; 1455574Smx205022 uint32_t tfint:1; 1465574Smx205022 uint32_t feint:1; 1475574Smx205022 uint32_t resv10:1; 1485574Smx205022 uint32_t resv11:1; 1495574Smx205022 uint32_t resv12:1; 1505574Smx205022 uint32_t resv13:1; 1515574Smx205022 uint32_t phyint:1; 1525574Smx205022 uint32_t resv15_31:17; 1535574Smx205022 } mask_bits; 1545574Smx205022 } nge_intr_mask; 1555574Smx205022 1565574Smx205022 /* 1575574Smx205022 * Software timer control register 1585574Smx205022 */ 1595574Smx205022 #define NGE_SWTR_CNTL 0x008 1605574Smx205022 typedef union _nge_swtr_cntl { 1615574Smx205022 uint8_t ctrl_val; 1625574Smx205022 struct { 1635574Smx205022 uint8_t stren:1; 1645574Smx205022 uint8_t sten:1; 1655574Smx205022 uint8_t resv2_7:6; 1665574Smx205022 } cntl_bits; 1675574Smx205022 } nge_swtr_cntl; 1685574Smx205022 1695574Smx205022 /* 1705574Smx205022 * Software Timer Interval 1715574Smx205022 */ 1725574Smx205022 #define NGE_SWTR_ITC 0x00c 1735659Sjj146644 1745659Sjj146644 /* Default timer interval, 97 would mean 1 ms */ 1755659Sjj146644 #define SWTR_ITC 0x8 1765574Smx205022 typedef union _nge_itc { 1775574Smx205022 uint32_t itc_val; 1785574Smx205022 struct { 1795574Smx205022 uint32_t sw_intv:16; 1805574Smx205022 uint32_t sw_cur_val:16; 1815574Smx205022 } itc_bits; 1825574Smx205022 } nge_itc; 1835574Smx205022 1845574Smx205022 /* 1855574Smx205022 * Fatal error register 1865574Smx205022 */ 1875574Smx205022 #define NGE_REG010 0x010 1885574Smx205022 typedef union _nge_reg010 { 1895574Smx205022 uint32_t reg010_val; 1905574Smx205022 struct { 1915574Smx205022 uint32_t resv0:1; 1925574Smx205022 uint32_t resv1:1; 1935574Smx205022 uint32_t resv2:1; 1945574Smx205022 uint32_t resv3:1; 1955574Smx205022 uint32_t resv4:1; 1965574Smx205022 uint32_t resv5:1; 1975574Smx205022 uint32_t resv6:1; 1985574Smx205022 uint32_t resv7:1; 1995574Smx205022 uint32_t resv8:1; 2005574Smx205022 uint32_t resv9:1; 2015574Smx205022 uint32_t resv10:1; 2025574Smx205022 uint32_t resv11_31:21; 2035574Smx205022 } reg010_bits; 2045574Smx205022 } nge_reg010; 2055574Smx205022 2065574Smx205022 /* 2075574Smx205022 * MSI vector map register 0 2085574Smx205022 */ 2095574Smx205022 #define NGE_MSI_MAP0 0x020 2105574Smx205022 typedef union _nge_msi_map0_vec { 2115574Smx205022 uint32_t msi_map0_val; 2125574Smx205022 struct { 2135574Smx205022 uint32_t reint_vec:4; 2145574Smx205022 uint32_t rcint_vec:4; 2155574Smx205022 uint32_t miss_vec:4; 2165574Smx205022 uint32_t teint_vec:4; 2175574Smx205022 uint32_t tcint_vec:4; 2185574Smx205022 uint32_t stint_vec:4; 2195574Smx205022 uint32_t mint_vec:4; 2205574Smx205022 uint32_t rfint_vec:4; 2215574Smx205022 } vecs_bits; 2225574Smx205022 } nge_msi_map0_vec; 2235574Smx205022 2245574Smx205022 /* 2255574Smx205022 * MSI vector map register 1 2265574Smx205022 */ 2275574Smx205022 #define NGE_MSI_MAP1 0x024 2285574Smx205022 typedef union _nge_msi_map1_vec { 2295574Smx205022 uint32_t msi_map1_val; 2305574Smx205022 struct { 2315574Smx205022 uint32_t tfint_vec:4; 2325574Smx205022 uint32_t feint_vec:4; 2335574Smx205022 uint32_t resv8_11:4; 2345574Smx205022 uint32_t resv12_15:4; 2355574Smx205022 uint32_t resv16_19:4; 2365574Smx205022 uint32_t resv20_23:4; 2375574Smx205022 uint32_t resv24_31:8; 2385574Smx205022 } vecs_bits; 2395574Smx205022 } nge_msi_map1_vec; 2405574Smx205022 2415574Smx205022 2425574Smx205022 /* 2435574Smx205022 * MSI vector map register 2 2445574Smx205022 */ 2455574Smx205022 #define NGE_MSI_MAP2 0x028 2465574Smx205022 2475574Smx205022 /* 2485574Smx205022 * MSI vector map register 2 2495574Smx205022 */ 2505574Smx205022 #define NGE_MSI_MAP3 0x02c 2515574Smx205022 2525574Smx205022 /* 2535574Smx205022 * MSI mask register for mcp55 2545574Smx205022 */ 2555574Smx205022 #define NGE_MSI_MASK 0x30 2565574Smx205022 typedef union _nge_msi_mask { 2575574Smx205022 uint32_t msi_mask_val; 2585574Smx205022 struct { 2595574Smx205022 uint32_t vec0:1; 2605574Smx205022 uint32_t vec1:1; 2615574Smx205022 uint32_t vec2:1; 2625574Smx205022 uint32_t vec3:1; 2635574Smx205022 uint32_t vec4:1; 2645574Smx205022 uint32_t vec5:1; 2655574Smx205022 uint32_t vec6:1; 2665574Smx205022 uint32_t vec7:1; 2675574Smx205022 uint32_t resv8_31:24; 2685574Smx205022 }msi_msk_bits; 2695574Smx205022 }nge_msi_mask; 2705574Smx205022 2715574Smx205022 /* 2725574Smx205022 * Software misc register for mcp51 2735574Smx205022 */ 2745574Smx205022 #define NGE_SOFT_MISC 0x034 2755574Smx205022 typedef union _nge_soft_misc { 2765574Smx205022 uint32_t misc_val; 2775574Smx205022 struct { 2785574Smx205022 uint32_t rx_clk_vx_rst:1; 2795574Smx205022 uint32_t tx_clk_vx_rst:1; 2805574Smx205022 uint32_t clk12m_vx_rst:1; 2815574Smx205022 uint32_t fpci_clk_vx_rst:1; 2825574Smx205022 uint32_t rx_clk_vc_rst:1; 2835574Smx205022 uint32_t tx_clk_vc_rst:1; 2845574Smx205022 uint32_t fs_clk_vc_rst:1; 2855574Smx205022 uint32_t rst_ex_m2pintf:1; 2865574Smx205022 uint32_t resv8_31:24; 2875574Smx205022 } misc_bits; 2885574Smx205022 } nge_soft_misc; 2895574Smx205022 2905574Smx205022 /* 2915574Smx205022 * DMA configuration 2925574Smx205022 */ 2935574Smx205022 #define NGE_DMA_CFG 0x040 2945574Smx205022 typedef union _nge_dma_cfg { 2955574Smx205022 uint32_t cfg_val; 2965574Smx205022 struct { 2975574Smx205022 uint32_t tx_start_pri:3; 2985574Smx205022 uint32_t tx_start_pri_flag:1; 2995574Smx205022 uint32_t tx_prd_rpri:3; 3005574Smx205022 uint32_t tx_prd_rpri_flag:1; 3015574Smx205022 uint32_t tx_prd_wpri:3; 3025574Smx205022 uint32_t tx_prd_wpri_flag:1; 3035574Smx205022 uint32_t rx_start_pri:3; 3045574Smx205022 uint32_t rx_start_pri_flag:1; 3055574Smx205022 uint32_t rx_prd_rpri:3; 3065574Smx205022 uint32_t rx_prd_rpri_flag:1; 3075574Smx205022 uint32_t rx_prd_wpri:3; 3085574Smx205022 uint32_t rx_prd_wpri_flag:1; 3095574Smx205022 uint32_t dma_max_pri:3; 3105574Smx205022 uint32_t dma_wrr_disable:1; 3115574Smx205022 uint32_t dma_pri_disable:1; 3125574Smx205022 } cfg_bits; 3135574Smx205022 } nge_dma_cfg; 3145574Smx205022 3155574Smx205022 /* 3165574Smx205022 * Request DMA configuration 3175574Smx205022 */ 3185574Smx205022 #define NGE_DMA_RCFG 0x044 3195574Smx205022 typedef union _nge_dma_rcfg { 3205574Smx205022 uint32_t dma_rcfg_val; 3215574Smx205022 struct { 3225574Smx205022 uint32_t tx_prd_coh_state:2; 3235574Smx205022 uint32_t tx_data_coh_state:2; 3245574Smx205022 uint32_t rx_prd_coh_state:2; 3255574Smx205022 uint32_t rx_data_coh_state:2; 3265574Smx205022 uint32_t max_roffset:5; 3275574Smx205022 uint32_t resv13_31:19; 3285574Smx205022 } rcfg_bis; 3295574Smx205022 } nge_dma_rcfg; 3305574Smx205022 3315574Smx205022 /* 3325574Smx205022 * Hot DMA configuration 3335574Smx205022 */ 3345574Smx205022 #define NGE_DMA_HOT_CFG 0x048 3355574Smx205022 typedef union _nge_dma_hcfg { 3365574Smx205022 uint32_t dma_hcfg_val; 3375574Smx205022 struct { 3385574Smx205022 uint32_t resv0_3:4; 3395574Smx205022 uint32_t noti_wstart_pri:3; 3405574Smx205022 uint32_t noti_wstart_pri_flag:1; 3415574Smx205022 uint32_t cmd_rstart_pri:3; 3425574Smx205022 uint32_t cmd_rstart_pri_flag:1; 3435574Smx205022 uint32_t cmd_wstart_pri:3; 3445574Smx205022 uint32_t cmd_wstart_pri_flag:1; 3455574Smx205022 uint32_t resv16_31:16; 3465574Smx205022 } hcfg_bits; 3475574Smx205022 } nge_dma_hcfg; 3485574Smx205022 3495574Smx205022 /* 3505574Smx205022 * PMU control register 0 for mcp51 3515574Smx205022 */ 3525574Smx205022 #define NGE_PMU_CNTL0 0x060 3535574Smx205022 #define NGE_PMU_CORE_SPD10_BUSY 0x8 3545574Smx205022 #define NGE_PMU_CORE_SPD10_IDLE 0xB 3555574Smx205022 #define NGE_PMU_CORE_SPD100_BUSY 0x4 3565574Smx205022 #define NGE_PMU_CORE_SPD100_IDLE 0x7 3575574Smx205022 #define NGE_PMU_CORE_SPD1000_BUSY 0x0 3585574Smx205022 #define NGE_PMU_CORE_SPD1000_IDLE 0x3 3595574Smx205022 3605574Smx205022 typedef union _nge_pmu_cntl0 { 3615574Smx205022 uint32_t cntl0_val; 3625574Smx205022 struct { 3635574Smx205022 uint32_t core_spd10_fp:4; 3645574Smx205022 uint32_t core_spd10_idle:4; 3655574Smx205022 uint32_t core_spd100_fp:4; 3665574Smx205022 uint32_t core_spd100_idle:4; 3675574Smx205022 uint32_t core_spd1000_fp:4; 3685574Smx205022 uint32_t core_spd1000_idle:4; 3695574Smx205022 uint32_t core_sts_cur:8; 3705574Smx205022 } cntl0_bits; 3715574Smx205022 } nge_pmu_cntl0; 3725574Smx205022 3735574Smx205022 /* 3745574Smx205022 * PMU control register 1 for mcp51 3755574Smx205022 */ 3765574Smx205022 #define NGE_PMU_CNTL1 0x064 3775574Smx205022 typedef union _nge_pmu_cntl1 { 3785574Smx205022 uint32_t cntl1_val; 3795574Smx205022 struct { 3805574Smx205022 uint32_t dev_fp:4; 3815574Smx205022 uint32_t dev_idle:4; 3825574Smx205022 uint32_t resv8_27:20; 3835574Smx205022 uint32_t dev_sts_cur:4; 3845574Smx205022 } cntl1_bits; 3855574Smx205022 } nge_pmu_cntl1; 3865574Smx205022 3875574Smx205022 /* 3885574Smx205022 * PMU control register 2 for mcp51 3895574Smx205022 */ 3905574Smx205022 #define NGE_PMU_CNTL2 0x068 3915574Smx205022 typedef union _nge_pmu_cntl2 { 3925574Smx205022 uint32_t cntl2_val; 3935574Smx205022 struct { 3945574Smx205022 uint32_t core_override:4; 3955574Smx205022 uint32_t resv4_7:4; 3965574Smx205022 uint32_t dev_override:4; 3975574Smx205022 uint32_t resv12_15:4; 3985574Smx205022 uint32_t core_override_en:1; 3995574Smx205022 uint32_t dev_override_en:1; 4005574Smx205022 uint32_t core_enable:1; 4015574Smx205022 uint32_t dev_enable:1; 4025574Smx205022 uint32_t rx_wake_dis:1; 4035574Smx205022 uint32_t cidle_timer:1; 4045574Smx205022 uint32_t didle_timer:1; 4055574Smx205022 uint32_t resv23_31:9; 4065574Smx205022 } cntl2_bits; 4075574Smx205022 } nge_pmu_cntl2; 4085574Smx205022 4095574Smx205022 /* 4105574Smx205022 * PMU core idle limit register for mcp51 4115574Smx205022 */ 4125574Smx205022 #define NGE_PMU_CIDLE_LIMIT 0x06c 4135574Smx205022 #define NGE_PMU_CIDLE_LIMIT_DEF 0xffff 4145574Smx205022 4155574Smx205022 /* 4165574Smx205022 * PMU device idle limit register for mcp51 4175574Smx205022 */ 4185574Smx205022 #define NGE_PMU_DIDLE_LIMIT 0x070 4195574Smx205022 #define NGE_PMU_DIDLE_LIMIT_DEF 0xffff 4205574Smx205022 4215574Smx205022 /* 4225574Smx205022 * PMU core idle count value register for mcp51 4235574Smx205022 */ 4245574Smx205022 #define NGE_PMU_CIDLE_COUNT 0x074 4255574Smx205022 #define NGE_PMU_CIDEL_COUNT_DEF 0xffff 4265574Smx205022 4275574Smx205022 /* 4285574Smx205022 * PMU device idle count value register for mcp51 4295574Smx205022 */ 4305574Smx205022 #define NGE_PMU_DIDLE_COUNT 0x078 4315574Smx205022 #define NGE_PMU_DIDEL_COUNT_DEF 0xffff 4325574Smx205022 4335574Smx205022 /* 4345574Smx205022 * Transmit control 4355574Smx205022 */ 4365574Smx205022 #define NGE_TX_CNTL 0x080 4375574Smx205022 typedef union _nge_tx_cntl { 4385574Smx205022 uint32_t cntl_val; 4395574Smx205022 struct { 4405574Smx205022 uint32_t paen:1; /* only for mcp55, otherwise reserve */ 4415574Smx205022 uint32_t resv1:1; 4425574Smx205022 uint32_t retry_en:1; 4435574Smx205022 uint32_t pad_en:1; 4445574Smx205022 uint32_t fappend_en:1; 4455574Smx205022 uint32_t two_def_en:1; 4465574Smx205022 uint32_t resv6_7:2; 4475574Smx205022 uint32_t max_retry:4; 4485574Smx205022 uint32_t burst_en:1; 4495574Smx205022 uint32_t resv13_15:3; 4505574Smx205022 uint32_t retry_emask:1; 4515574Smx205022 uint32_t exdef_mask:1; 4525574Smx205022 uint32_t def_mask:1; 4535574Smx205022 uint32_t lcar_mask:1; 4545574Smx205022 uint32_t tlcol_mask:1; 4555574Smx205022 uint32_t uflo_err_mask:1; 4565574Smx205022 uint32_t resv22_23:2; 4575574Smx205022 uint32_t jam_seq_en:1; 4585574Smx205022 uint32_t resv25_31:7; 4595574Smx205022 } cntl_bits; 4605574Smx205022 } nge_tx_cntl; 4615574Smx205022 4625574Smx205022 /* 4635574Smx205022 * Transmit enable 4645574Smx205022 * Note: for ck804 or mcp51, this is 8-bit register; 4655574Smx205022 * for mcp55, it is a 32-bit register. 4665574Smx205022 */ 4675574Smx205022 #define NGE_TX_EN 0x084 4689604SZhen.W@Sun.COM #define NGE_SMU_FREE 0x0 4699604SZhen.W@Sun.COM #define NGE_SMU_GET 0xf 4705574Smx205022 typedef union _nge_tx_en { 4719604SZhen.W@Sun.COM uint32_t val; 4725574Smx205022 struct { 4739604SZhen.W@Sun.COM uint32_t tx_en:1; 4749604SZhen.W@Sun.COM uint32_t resv1_7:7; 4759604SZhen.W@Sun.COM uint32_t smu2mac:4; 4769604SZhen.W@Sun.COM uint32_t mac2smu:4; 4779604SZhen.W@Sun.COM uint32_t resv16_31:16; 4785574Smx205022 } bits; 4795574Smx205022 } nge_tx_en; 4805574Smx205022 4815574Smx205022 /* 4825574Smx205022 * Transmit status 4835574Smx205022 */ 4845574Smx205022 #define NGE_TX_STA 0x088 4855574Smx205022 typedef union _nge_tx_sta { 4865574Smx205022 uint32_t sta_val; 4875574Smx205022 struct { 4885574Smx205022 uint32_t tx_chan_sta:1; 4895574Smx205022 uint32_t resv1_15:15; 4905574Smx205022 uint32_t retry_err:1; 4915574Smx205022 uint32_t exdef:1; 4925574Smx205022 uint32_t def:1; 4935574Smx205022 uint32_t lcar:1; 4945574Smx205022 uint32_t tlcol:1; 4955574Smx205022 uint32_t uflo:1; 4965574Smx205022 uint32_t resv22_31:10; 4975574Smx205022 } sta_bits; 4985574Smx205022 } nge_tx_sta; 4995574Smx205022 5005574Smx205022 /* 5015574Smx205022 * Receive control 5025574Smx205022 */ 5035574Smx205022 #define NGE_RX_CNTL0 0x08c 5045574Smx205022 typedef union _nge_rx_cntrl0 { 5055574Smx205022 uint32_t cntl_val; 5065574Smx205022 struct { 5075574Smx205022 uint32_t resv0:1; 5085574Smx205022 uint32_t padsen:1; 5095574Smx205022 uint32_t fcsren:1; 5105574Smx205022 uint32_t paen:1; 5115574Smx205022 uint32_t lben:1; 5125574Smx205022 uint32_t afen:1; 5135574Smx205022 uint32_t runten:1; 5145574Smx205022 uint32_t brdis:1; 5155574Smx205022 uint32_t rdfen:1; 5165574Smx205022 uint32_t slfb:1; 5175574Smx205022 uint32_t resv10_15:6; 5185574Smx205022 uint32_t runtm:1; 5195574Smx205022 uint32_t rlcolm:1; 5205574Smx205022 uint32_t maxerm:1; 5215574Smx205022 uint32_t lferm:1; 5225574Smx205022 uint32_t crcm:1; 5235574Smx205022 uint32_t ofolm:1; 5245574Smx205022 uint32_t framerm:1; 5255574Smx205022 uint32_t resv23_31:9; 5265574Smx205022 } cntl_bits; 5275574Smx205022 } nge_rx_cntrl0; 5285574Smx205022 5295574Smx205022 /* 5305574Smx205022 * Maximum receive Frame size 5315574Smx205022 */ 5325574Smx205022 #define NGE_RX_CNTL1 0x090 5335574Smx205022 typedef union _nge_rx_cntl1 { 5345574Smx205022 uint32_t cntl_val; 5355574Smx205022 struct { 5365574Smx205022 uint32_t length:14; 5375574Smx205022 uint32_t resv14_31:18; 5385574Smx205022 } cntl_bits; 5395574Smx205022 } nge_rx_cntl1; 5405574Smx205022 5415574Smx205022 /* 5425574Smx205022 * Receive enable register 5435574Smx205022 * Note: for ck804 and mcp51, this is a 8-bit register; 5445574Smx205022 * for mcp55, it is a 32-bit register. 5455574Smx205022 */ 5465574Smx205022 #define NGE_RX_EN 0x094 5475574Smx205022 typedef union _nge_rx_en { 5485574Smx205022 uint8_t val; 5495574Smx205022 struct { 5505574Smx205022 uint8_t rx_en:1; 5515574Smx205022 uint8_t resv1_7:7; 5525574Smx205022 } bits; 5535574Smx205022 } nge_rx_en; 5545574Smx205022 5555574Smx205022 /* 5565574Smx205022 * Receive status register 5575574Smx205022 */ 5585574Smx205022 #define NGE_RX_STA 0x098 5595574Smx205022 typedef union _nge_rx_sta { 5605574Smx205022 uint32_t sta_val; 5615574Smx205022 struct { 5625574Smx205022 uint32_t rx_chan_sta:1; 5635574Smx205022 uint32_t resv1_15:15; 5645574Smx205022 uint32_t runt_sta:1; 5655574Smx205022 uint32_t rlcol_sta:1; 5665574Smx205022 uint32_t mlen_err:1; 5675574Smx205022 uint32_t lf_err:1; 5685574Smx205022 uint32_t crc_err:1; 5695574Smx205022 uint32_t ofol_err:1; 5705574Smx205022 uint32_t fram_err:1; 5715574Smx205022 uint32_t resv23_31:9; 5725574Smx205022 } sta_bits; 5735574Smx205022 } nge_rx_sta; 5745574Smx205022 5755574Smx205022 /* 5765574Smx205022 * Backoff Control 5775574Smx205022 */ 5785574Smx205022 #define NGE_BKOFF_CNTL 0x09c 5795574Smx205022 #define BKOFF_RSEED 0x8 5805574Smx205022 #define BKOFF_SLIM_GMII 0x3ff 5815574Smx205022 #define BKOFF_SLIM_MII 0x7f 5825574Smx205022 typedef union _nge_bkoff_cntl { 5835574Smx205022 uint32_t cntl_val; 5845574Smx205022 struct { 5855574Smx205022 uint32_t rseed:8; 5865574Smx205022 uint32_t sltm:10; 5875574Smx205022 uint32_t resv18_30:13; 5885574Smx205022 uint32_t leg_bk_en:1; 5895574Smx205022 } bkoff_bits; 5905574Smx205022 } nge_bkoff_cntl; 5915574Smx205022 5925574Smx205022 /* 5935574Smx205022 * Transmit defferral timing 5945574Smx205022 */ 5955574Smx205022 #define NGE_TX_DEF 0x0a0 5965574Smx205022 #define TX_TIFG_MII 0x15 5975574Smx205022 #define TX_IFG_RGMII_1000_FD 0x14 5985574Smx205022 #define TX_IFG_RGMII_OTHER 0x16 5995574Smx205022 #define TX_IFG2_MII 0x5 6005574Smx205022 #define TX_IFG2_RGMII_10_100 0x7 6015574Smx205022 #define TX_IFG2_RGMII_1000 0x5 6025574Smx205022 #define TX_IFG2_DEFAULT 0X0 6035574Smx205022 #define TX_IFG1_DEFAULT 0xf 6045574Smx205022 typedef union _nge_tx_def { 6055574Smx205022 uint32_t def_val; 6065574Smx205022 struct { 6075574Smx205022 uint32_t ifg1_def:8; 6085574Smx205022 uint32_t ifg2_def:8; 6095574Smx205022 uint32_t if_def:8; 6105574Smx205022 uint32_t resv24_31:8; 6115574Smx205022 } def_bits; 6125574Smx205022 } nge_tx_def; 6135574Smx205022 6145574Smx205022 /* 6155574Smx205022 * Receive defferral timing 6165574Smx205022 */ 6175574Smx205022 #define NGE_RX_DEf 0x0a4 6185574Smx205022 #define RX_DEF_DEFAULT 0x16 6195574Smx205022 typedef union _nge_rx_def { 6205574Smx205022 uint8_t def_val; 6215574Smx205022 struct { 6225574Smx205022 uint8_t rifg; 6235574Smx205022 } def_bits; 6245574Smx205022 } nge_rx_def; 6255574Smx205022 6265574Smx205022 /* 6275574Smx205022 * Low 32 bit unicast address 6285574Smx205022 */ 6295574Smx205022 #define NGE_UNI_ADDR0 0x0a8 6305574Smx205022 union { 6315574Smx205022 uint32_t addr_val; 6325574Smx205022 struct { 6335574Smx205022 uint32_t addr; 6345574Smx205022 } addr_bits; 6355574Smx205022 } nge_uni_addr0; 6365574Smx205022 6375574Smx205022 /* 6385574Smx205022 * High 32 bit unicast address 6395574Smx205022 */ 6405574Smx205022 #define NGE_UNI_ADDR1 0x0ac 6415574Smx205022 typedef union _nge_uni_addr1 { 6425574Smx205022 uint32_t addr_val; 6435574Smx205022 struct { 6445574Smx205022 uint32_t addr:16; 6455574Smx205022 uint32_t resv16_31:16; 6465574Smx205022 } addr_bits; 6475574Smx205022 } nge_uni_addr1; 6485574Smx205022 6498218SMin.Xu@Sun.COM #define LOW_24BITS_MASK 0xffffffULL 6508218SMin.Xu@Sun.COM #define REVERSE_MAC_ELITE 0x211900ULL 6518218SMin.Xu@Sun.COM #define REVERSE_MAC_GIGABYTE 0xe61600ULL 6528218SMin.Xu@Sun.COM #define REVERSE_MAC_ASUS 0x601d00ULL 6538218SMin.Xu@Sun.COM 6545574Smx205022 /* 6555574Smx205022 * Low 32 bit multicast address 6565574Smx205022 */ 6575574Smx205022 #define NGE_MUL_ADDR0 0x0b0 6585574Smx205022 union { 6595574Smx205022 uint32_t addr_val; 6605574Smx205022 struct { 6615574Smx205022 uint32_t addr; 6625574Smx205022 }addr_bits; 6635574Smx205022 }nge_mul_addr0; 6645574Smx205022 6655574Smx205022 /* 6665574Smx205022 * High 32 bit multicast address 6675574Smx205022 */ 6685574Smx205022 #define NGE_MUL_ADDR1 0x0b4 6695574Smx205022 typedef union _nge_mul_addr1 { 6705574Smx205022 uint32_t addr_val; 6715574Smx205022 struct { 6725574Smx205022 uint32_t addr:16; 6735574Smx205022 uint32_t resv16_31:16; 6745574Smx205022 }addr_bits; 6755574Smx205022 }nge_mul_addr1; 6765574Smx205022 6775574Smx205022 /* 6785574Smx205022 * Low 32 bit multicast mask 6795574Smx205022 */ 6805574Smx205022 #define NGE_MUL_MASK 0x0b8 6815574Smx205022 union { 6825574Smx205022 uint32_t mask_val; 6835574Smx205022 struct { 6845574Smx205022 uint32_t mask; 6855574Smx205022 } mask_bits; 6865574Smx205022 } nge_mul_mask0; 6875574Smx205022 6885574Smx205022 /* 6895574Smx205022 * High 32 bit multicast mask 6905574Smx205022 */ 6915574Smx205022 #define NGE_MUL_MASK1 0x0bc 6925574Smx205022 union { 6935574Smx205022 uint32_t mask_val; 6945574Smx205022 struct { 6955574Smx205022 uint32_t mask:16; 6965574Smx205022 uint32_t resv16_31:16; 6975574Smx205022 } mask_bits; 6985574Smx205022 } nge_mul_mask1; 6995574Smx205022 7005574Smx205022 /* 7015574Smx205022 * Mac-to Phy Interface 7025574Smx205022 */ 7035574Smx205022 #define NGE_MAC2PHY 0x0c0 7045574Smx205022 #define low_speed 0x0 7055574Smx205022 #define fast_speed 0x1 7065574Smx205022 #define giga_speed 0x2 7075574Smx205022 #define err_speed 0x4 7085574Smx205022 #define MII_IN 0x0 7095574Smx205022 #define RGMII_IN 0x1 7105574Smx205022 #define ERR_IN1 0x3 7115574Smx205022 #define ERR_IN2 0x4 7125574Smx205022 typedef union _nge_mac2phy { 7135574Smx205022 uint32_t m2p_val; 7145574Smx205022 struct { 7155574Smx205022 uint32_t speed:2; 7165574Smx205022 uint32_t resv2_7:6; 7175574Smx205022 uint32_t hdup_en:1; 7185574Smx205022 uint32_t resv9:1; 7195574Smx205022 uint32_t phyintr:1; /* for mcp55 only */ 7205574Smx205022 uint32_t phyintrlvl:1; /* for mcp55 only */ 7215574Smx205022 uint32_t resv12_27:16; 7225574Smx205022 uint32_t in_type:2; 7235574Smx205022 uint32_t resv30_31:2; 7245574Smx205022 } m2p_bits; 7255574Smx205022 } nge_mac2phy; 7265574Smx205022 7275574Smx205022 /* 7285574Smx205022 * Transmit Descriptor Ring address 7295574Smx205022 */ 7305574Smx205022 #define NGE_TX_DADR 0x100 7315574Smx205022 typedef union _nge_tx_addr { 7325574Smx205022 uint32_t addr_val; 7335574Smx205022 struct { 7345574Smx205022 uint32_t resv0_2:3; 7355574Smx205022 uint32_t addr:29; 7365574Smx205022 } addr_bits; 7375574Smx205022 } nge_tx_addr; 7385574Smx205022 7395574Smx205022 /* 7405574Smx205022 * Receive Descriptor Ring address 7415574Smx205022 */ 7425574Smx205022 #define NGE_RX_DADR 0x104 7435574Smx205022 typedef union _nge_rx_addr { 7445574Smx205022 uint32_t addr_val; 7455574Smx205022 struct { 7465574Smx205022 uint32_t resv0_2:3; 7475574Smx205022 uint32_t addr:29; 7485574Smx205022 } addr_bits; 7495574Smx205022 } nge_rx_addr; 7505574Smx205022 7515574Smx205022 /* 7525574Smx205022 * Rx/tx descriptor ring leng 7535574Smx205022 * Note: for mcp55, tdlen/rdlen are 14 bit. 7545574Smx205022 */ 7555574Smx205022 #define NGE_RXTX_DLEN 0x108 7565574Smx205022 typedef union _nge_rxtx_dlen { 7575574Smx205022 uint32_t dlen_val; 7585574Smx205022 struct { 7595574Smx205022 uint32_t tdlen:14; 7605574Smx205022 uint32_t resv14_15:2; 7615574Smx205022 uint32_t rdlen:14; 7625574Smx205022 uint32_t resv30_31:2; 7635574Smx205022 } dlen_bits; 7645574Smx205022 } nge_rxtx_dlen; 7655574Smx205022 7665574Smx205022 /* 7675574Smx205022 * Transmit polling register 7685574Smx205022 */ 7695574Smx205022 #define NGE_TX_POLL 0x10c 7705574Smx205022 #define TX_POLL_INTV_1G 10 7715574Smx205022 #define TX_POLL_INTV_100M 100 7725574Smx205022 #define TX_POLL_INTV_10M 1000 7735574Smx205022 7745574Smx205022 typedef union _nge_tx_poll { 7755574Smx205022 uint32_t poll_val; 7765574Smx205022 struct { 7775574Smx205022 uint32_t tpi:16; 7785574Smx205022 uint32_t tpen:1; 7795574Smx205022 uint32_t resv17_31:15; 7805574Smx205022 } poll_bits; 7815574Smx205022 } nge_tx_poll; 7825574Smx205022 7835574Smx205022 /* 7845574Smx205022 * Receive polling register 7855574Smx205022 */ 7865574Smx205022 #define NGE_RX_POLL 0x110 7875574Smx205022 #define RX_POLL_INTV_1G 10 7885574Smx205022 #define RX_POLL_INTV_100M 100 7895574Smx205022 #define RX_POLL_INTV_10M 1000 7905574Smx205022 typedef union _nge_rx_poll { 7915574Smx205022 uint32_t poll_val; 7925574Smx205022 struct { 7935574Smx205022 uint32_t rpi:16; 7945574Smx205022 uint32_t rpen:1; 7955574Smx205022 uint32_t resv17_31:15; 7965574Smx205022 } poll_bits; 7975574Smx205022 } nge_rx_poll; 7985574Smx205022 7995574Smx205022 /* 8005574Smx205022 * Transmit polling count 8015574Smx205022 */ 8025574Smx205022 #define NGE_TX_PCNT 0x114 8035574Smx205022 union { 8045574Smx205022 uint32_t cnt_val; 8055574Smx205022 struct { 8065574Smx205022 uint32_t pcnt:32; 8075574Smx205022 } cnt_bits; 8085574Smx205022 } nge_tx_pcnt; 8095574Smx205022 8105574Smx205022 /* 8115574Smx205022 * Receive polling count 8125574Smx205022 */ 8135574Smx205022 #define NGE_RX_PCNT 0x118 8145574Smx205022 union { 8155574Smx205022 uint32_t cnt_val; 8165574Smx205022 struct { 8175574Smx205022 uint32_t pcnt:32; 8185574Smx205022 } cnt_bits; 8195574Smx205022 } nge_rx_pcnt; 8205574Smx205022 8215574Smx205022 8225574Smx205022 /* 8235574Smx205022 * Current tx's descriptor address 8245574Smx205022 */ 8255574Smx205022 #define NGE_TX_CUR_DADR 0x11c 8265574Smx205022 union { 8275574Smx205022 uint32_t addr_val; 8285574Smx205022 struct { 8295574Smx205022 uint32_t resv0_2:3; 8305574Smx205022 uint32_t addr:29; 8315574Smx205022 } addr_bits; 8325574Smx205022 } nge_tx_cur_addr; 8335574Smx205022 8345574Smx205022 /* 8355574Smx205022 * Current rx's descriptor address 8365574Smx205022 */ 8375574Smx205022 #define NGE_RX_CUR_DADR 0x120 8385574Smx205022 union { 8395574Smx205022 uint32_t addr_val; 8405574Smx205022 struct { 8415574Smx205022 uint32_t resv0_2:3; 8425574Smx205022 uint32_t addr:29; 8435574Smx205022 } addr_bits; 8445574Smx205022 } nge_rx_cur_addr; 8455574Smx205022 8465574Smx205022 /* 8475574Smx205022 * Current tx's data buffer address 8485574Smx205022 */ 8495574Smx205022 #define NGE_TX_CUR_PRD0 0x124 8505574Smx205022 union { 8515574Smx205022 uint32_t prd0_val; 8525574Smx205022 struct { 8535574Smx205022 uint32_t prd0:32; 8545574Smx205022 } prd0_bits; 8555574Smx205022 } nge_tx_cur_prd0; 8565574Smx205022 8575574Smx205022 /* 8585574Smx205022 * Current tx's data buffer status 8595574Smx205022 */ 8605574Smx205022 #define NGE_TX_CUR_PRD1 0x128 8615574Smx205022 union { 8625574Smx205022 uint32_t prd1_val; 8635574Smx205022 struct { 8645574Smx205022 uint32_t rebytes:16; 8655574Smx205022 uint32_t status:16; 8665574Smx205022 } prd1_bits; 8675574Smx205022 } nge_tx_cur_prd1; 8685574Smx205022 8695574Smx205022 /* 8705574Smx205022 * Current rx's data buffer address 8715574Smx205022 */ 8725574Smx205022 #define NGE_RX_CUR_PRD0 0x12c 8735574Smx205022 union { 8745574Smx205022 uint32_t prd0_val; 8755574Smx205022 struct { 8765574Smx205022 uint32_t prd0:32; 8775574Smx205022 }prd0_bits; 8785574Smx205022 }nge_rx_cur_prd0; 8795574Smx205022 8805574Smx205022 /* 8815574Smx205022 * Current rx's data buffer status 8825574Smx205022 */ 8835574Smx205022 #define NGE_RX_CUR_PRD1 0x130 8845574Smx205022 8855574Smx205022 /* 8865574Smx205022 * Next tx's descriptor address 8875574Smx205022 */ 8885574Smx205022 #define NGE_TX_NXT_DADR 0x134 8895574Smx205022 union { 8905574Smx205022 uint32_t dadr_val; 8915574Smx205022 struct { 8925574Smx205022 uint32_t addr:32; 8935574Smx205022 }addr_bits; 8945574Smx205022 }nge_tx_nxt_dadr; 8955574Smx205022 8965574Smx205022 /* 8975574Smx205022 * Next rx's descriptor address 8985574Smx205022 */ 8995574Smx205022 #define NGE_RX_NXT_DADR 0x138 9005574Smx205022 union { 9015574Smx205022 uint32_t dadr_val; 9025574Smx205022 struct { 9035574Smx205022 uint32_t addr:32; 9045574Smx205022 } addr_bits; 9055574Smx205022 } nge_rx_nxt_dadr; 9065574Smx205022 9075574Smx205022 /* 9085574Smx205022 * Transmit fifo watermark 9095574Smx205022 */ 9105574Smx205022 #define NGE_TX_FIFO_WM 0x13c 9115574Smx205022 #define TX_FIFO_TBFW 0 9125574Smx205022 #define TX_FIFO_NOB_WM_MII 1 9135574Smx205022 #define TX_FIFO_NOB_WM_GMII 8 9145574Smx205022 #define TX_FIFO_DATA_LWM 0x20 9155574Smx205022 #define TX_FIFO_PRD_LWM 0x8 9165574Smx205022 #define TX_FIFO_PRD_HWM 0x38 9175574Smx205022 typedef union _nge_tx_fifo_wm { 9185574Smx205022 uint32_t wm_val; 9195574Smx205022 struct { 9205574Smx205022 uint32_t data_lwm:9; 9215574Smx205022 uint32_t resv8_11:3; 9225574Smx205022 uint32_t prd_lwm:6; 9235574Smx205022 uint32_t uprd_hwm:6; 9245574Smx205022 uint32_t nbfb_wm:4; 9255574Smx205022 uint32_t fb_wm:4; 9265574Smx205022 } wm_bits; 9275574Smx205022 } nge_tx_fifo_wm; 9285574Smx205022 9295574Smx205022 /* 9305574Smx205022 * Receive fifo watermark 9315574Smx205022 */ 9325574Smx205022 #define NGE_RX_FIFO_WM 0x140 9335574Smx205022 typedef union _nge_rx_fifo_wm { 9345574Smx205022 uint32_t wm_val; 9355574Smx205022 struct { 9365574Smx205022 uint32_t data_hwm:9; 9375574Smx205022 uint32_t resv9_11:3; 9385574Smx205022 uint32_t prd_lwm:4; 9395574Smx205022 uint32_t resv16_17:2; 9405574Smx205022 uint32_t prd_hwm:4; 9415574Smx205022 uint32_t resv22_31:10; 9425574Smx205022 } wm_bits; 9435574Smx205022 } nge_rx_fifo_wm; 9445574Smx205022 9455574Smx205022 /* 9465574Smx205022 * Chip mode control 9475574Smx205022 */ 9485574Smx205022 #define NGE_MODE_CNTL 0x144 9495574Smx205022 #define DESC_MCP1 0x0 9505574Smx205022 #define DESC_OFFLOAD 0x1 9515574Smx205022 #define DESC_HOT 0x2 9525574Smx205022 #define DESC_RESV 0x3 9535574Smx205022 #define MACHINE_BUSY 0x0 9545574Smx205022 #define MACHINE_IDLE 0x1 9555574Smx205022 typedef union _nge_mode_cntl { 9565574Smx205022 uint32_t mode_val; 9575574Smx205022 struct { 9585574Smx205022 uint32_t txdm:1; 9595574Smx205022 uint32_t rxdm:1; 9605574Smx205022 uint32_t dma_dis:1; 9615574Smx205022 uint32_t dma_status:1; 9625574Smx205022 uint32_t bm_reset:1; 9635574Smx205022 uint32_t resv5:1; 9645574Smx205022 uint32_t vlan_strip:1; /* mcp55 chip only */ 9655574Smx205022 uint32_t vlan_ins:1; /* mcp55 chip only */ 9665574Smx205022 uint32_t desc_type:2; 9675574Smx205022 uint32_t rx_sum_en:1; 9685574Smx205022 uint32_t tx_prd_cu_en:1; 9695574Smx205022 uint32_t w64_dis:1; 9705574Smx205022 uint32_t tx_rcom_en:1; 9715574Smx205022 uint32_t rx_filter_en:1; 9725574Smx205022 uint32_t resv15:1; 9735574Smx205022 uint32_t resv16:1; /* ck804 and mcp51 only */ 9745574Smx205022 uint32_t resv17:1; /* ck804 and mcp51 only */ 9755574Smx205022 uint32_t resv18:1; /* ck804 and mcp51 only */ 9765574Smx205022 uint32_t resv19_21:3; 9775574Smx205022 uint32_t tx_fetch_prd:1; /* mcp51/mcp55 only */ 9785574Smx205022 uint32_t rx_fetch_prd:1; /* mcp51/mcp55 only */ 9795574Smx205022 uint32_t resv24_29:6; 9805574Smx205022 uint32_t rx_status:1; 9815574Smx205022 uint32_t tx_status:1; 9825574Smx205022 } mode_bits; 9835574Smx205022 } nge_mode_cntl; 9845574Smx205022 9855574Smx205022 #define NGE_TX_DADR_HI 0x148 9865574Smx205022 #define NGE_RX_DADR_HI 0x14c 9875574Smx205022 9885574Smx205022 /* 9895574Smx205022 * Mii interrupt register 9905574Smx205022 * Note: for mcp55, this is a 32-bit register. 9915574Smx205022 */ 9925574Smx205022 #define NGE_MINTR_SRC 0x180 9935574Smx205022 typedef union _nge_mintr_src { 9945574Smx205022 uint8_t src_val; 9955574Smx205022 struct { 9965574Smx205022 uint8_t mrei:1; 9975574Smx205022 uint8_t mcc2:1; 9985574Smx205022 uint8_t mcc1:1; 9995574Smx205022 uint8_t mapi:1; 10005574Smx205022 uint8_t mpdi:1; 10015574Smx205022 uint8_t resv5_7:3; 10025574Smx205022 } src_bits; 10035574Smx205022 } nge_mintr_src; 10045574Smx205022 10055574Smx205022 /* 10065574Smx205022 * Mii interrupt mask 10075574Smx205022 * Note: for mcp55, this is a 32-bit register. 10085574Smx205022 */ 10095574Smx205022 #define NGE_MINTR_MASK 0x184 10105574Smx205022 typedef union _nge_mintr_mask { 10115574Smx205022 uint8_t mask_val; 10125574Smx205022 struct { 10135574Smx205022 uint8_t mrei:1; 10145574Smx205022 uint8_t mcc2:1; 10155574Smx205022 uint8_t mcc1:1; 10165574Smx205022 uint8_t mapi:1; 10175574Smx205022 uint8_t mpdi:1; 10185574Smx205022 uint8_t resv5_7:3; 10195574Smx205022 } mask_bits; 10205574Smx205022 } nge_mintr_mask; 10215574Smx205022 10225574Smx205022 /* 10235574Smx205022 * Mii control and status 10245574Smx205022 */ 10255574Smx205022 #define NGE_MII_CS 0x188 10265574Smx205022 #define MII_POLL_INTV 0x4 10275574Smx205022 typedef union _nge_mii_cs { 10285574Smx205022 uint32_t cs_val; 10295574Smx205022 struct { 10305574Smx205022 uint32_t excap:1; 10315574Smx205022 uint32_t jab_dec:1; 10325574Smx205022 uint32_t lk_up:1; 10335574Smx205022 uint32_t ana_cap:1; 10345574Smx205022 uint32_t rfault:1; 10355574Smx205022 uint32_t auto_neg:1; 10365574Smx205022 uint32_t mfps:1; 10375574Smx205022 uint32_t resv7:1; 10385574Smx205022 uint32_t exst:1; 10395574Smx205022 uint32_t hdup_100m_t2:1; 10405574Smx205022 uint32_t fdup_100m_t2:1; 10415574Smx205022 uint32_t hdup_10m:1; 10425574Smx205022 uint32_t fdup_10m:1; 10435574Smx205022 uint32_t hdup_100m_x:1; 10445574Smx205022 uint32_t fdup_100m_x:1; 10455574Smx205022 uint32_t cap_100m_t4:1; 10465574Smx205022 uint32_t ap_intv:4; 10475574Smx205022 uint32_t ap_en:1; 10485574Smx205022 uint32_t resv21_23:3; 10495574Smx205022 uint32_t ap_paddr:5; 10505574Smx205022 uint32_t resv29_31:3; 10515574Smx205022 } cs_bits; 10525574Smx205022 } nge_mii_cs; 10535574Smx205022 10545574Smx205022 /* 10555574Smx205022 * Mii Clock timer register 10565574Smx205022 */ 10575574Smx205022 #define NGE_MII_TM 0x18c 10585574Smx205022 typedef union _nge_mii_tm { 10595574Smx205022 uint16_t tm_val; 10605574Smx205022 struct { 10615574Smx205022 uint16_t timer_interv:8; 10625574Smx205022 uint16_t timer_en:1; 10635574Smx205022 uint16_t resv9_14:6; 10645574Smx205022 uint16_t timer_status:1; 10655574Smx205022 } tm_bits; 10665574Smx205022 } nge_mii_tm; 10675574Smx205022 10685574Smx205022 /* 10695574Smx205022 * Mdio address 10705574Smx205022 */ 10715574Smx205022 #define NGE_MDIO_ADR 0x190 10725574Smx205022 typedef union _nge_mdio_adr { 10735574Smx205022 uint16_t adr_val; 10745574Smx205022 struct { 10755574Smx205022 uint16_t phy_reg:5; 10765574Smx205022 uint16_t phy_adr:5; 10775574Smx205022 uint16_t mdio_rw:1; 10785574Smx205022 uint16_t resv11_14:4; 10795574Smx205022 uint16_t mdio_clc:1; 10805574Smx205022 } adr_bits; 10815574Smx205022 } nge_mdio_adr; 10825574Smx205022 10835574Smx205022 /* 10845574Smx205022 * Mdio data 10855574Smx205022 */ 10865574Smx205022 #define NGE_MDIO_DATA 0x194 10875574Smx205022 10885574Smx205022 /* 10895574Smx205022 * Power Management and Control 10905574Smx205022 */ 10915574Smx205022 #define NGE_PM_CNTL 0x200 10925574Smx205022 typedef union _nge_pm_cntl { 10935574Smx205022 uint32_t cntl_val; 10945574Smx205022 struct { 10955574Smx205022 /* 10965574Smx205022 * mp_en: Magic Packet Enable 10975574Smx205022 * pm_en: Pattern Match Enable 10985574Smx205022 * lc_en: Link Change Enable 10995574Smx205022 */ 11005574Smx205022 uint32_t mp_en_d0:1; 11015574Smx205022 uint32_t pm_en_d0:1; 11025574Smx205022 uint32_t lc_en_d0:1; 11035574Smx205022 uint32_t resv3:1; 11045574Smx205022 uint32_t mp_en_d1:1; 11055574Smx205022 uint32_t pm_en_d1:1; 11065574Smx205022 uint32_t lc_en_d1:1; 11075574Smx205022 uint32_t resv7:1; 11085574Smx205022 uint32_t mp_en_d2:1; 11095574Smx205022 uint32_t pm_en_d2:1; 11105574Smx205022 uint32_t lc_en_d2:1; 11115574Smx205022 uint32_t resv11:1; 11125574Smx205022 uint32_t mp_en_d3:1; 11135574Smx205022 uint32_t pm_en_d3:1; 11145574Smx205022 uint32_t lc_en_d3:1; 11155574Smx205022 uint32_t resv15:1; 11165574Smx205022 uint32_t pat_match_en:5; 11175574Smx205022 uint32_t resv21_23:3; 11185574Smx205022 uint32_t pat_match_stat:5; 11195574Smx205022 uint32_t magic_status:1; 11205574Smx205022 uint32_t netman_status:1; 11215574Smx205022 uint32_t resv31:1; 11225574Smx205022 } cntl_bits; 11235574Smx205022 } nge_pm_cntl; 11245574Smx205022 11255574Smx205022 #define NGE_MPT_CRC0 0x204 11265574Smx205022 #define NGE_PMC_MK00 0x208 11275574Smx205022 #define NGE_PMC_MK01 0x20C 11285574Smx205022 #define NGE_PMC_MK02 0x210 11295574Smx205022 #define NGE_PMC_MK03 0x214 11305574Smx205022 #define NGE_MPT_CRC1 0x218 11315574Smx205022 #define NGE_PMC_MK10 0x21c 11325574Smx205022 #define NGE_PMC_MK11 0x220 11335574Smx205022 #define NGE_PMC_MK12 0x224 11345574Smx205022 #define NGE_PMC_MK13 0x228 11355574Smx205022 #define NGE_MPT_CRC2 0x22c 11365574Smx205022 #define NGE_PMC_MK20 0x230 11375574Smx205022 #define NGE_PMC_MK21 0x234 11385574Smx205022 #define NGE_PMC_MK22 0x238 11395574Smx205022 #define NGE_PMC_MK23 0x23c 11405574Smx205022 #define NGE_MPT_CRC3 0x240 11415574Smx205022 #define NGE_PMC_MK30 0x244 11425574Smx205022 #define NGE_PMC_MK31 0x248 11435574Smx205022 #define NGE_PMC_MK32 0x24c 11445574Smx205022 #define NGE_PMC_MK33 0x250 11455574Smx205022 #define NGE_MPT_CRC4 0x254 11465574Smx205022 #define NGE_PMC_MK40 0x258 11475574Smx205022 #define NGE_PMC_MK41 0x25c 11485574Smx205022 #define NGE_PMC_MK42 0x260 11495574Smx205022 #define NGE_PMC_MK43 0x264 11505574Smx205022 #define NGE_PMC_ALIAS 0x268 11515574Smx205022 #define NGE_PMCSR_ALIAS 0x26c 11525574Smx205022 11535574Smx205022 /* 11545574Smx205022 * Seeprom control 11555574Smx205022 */ 11565574Smx205022 #define NGE_EP_CNTL 0x500 11575574Smx205022 #define EEPROM_CLKDIV 249 11585574Smx205022 #define EEPROM_WAITCLK 0x7 11595574Smx205022 typedef union _nge_cp_cntl { 11605574Smx205022 uint32_t cntl_val; 11615574Smx205022 struct { 11625574Smx205022 uint32_t clkdiv:8; 11635574Smx205022 uint32_t rom_size:3; 11645574Smx205022 uint32_t resv11:1; 11655574Smx205022 uint32_t word_wid:1; 11665574Smx205022 uint32_t resv13_15:3; 11675574Smx205022 uint32_t wait_slots:4; 11685574Smx205022 uint32_t resv20_31:12; 11695574Smx205022 } cntl_bits; 11705574Smx205022 } nge_cp_cntl; 11715574Smx205022 11725574Smx205022 /* 11735574Smx205022 * Seeprom cmd control 11745574Smx205022 */ 11755574Smx205022 #define NGE_EP_CMD 0x504 11765574Smx205022 #define SEEPROM_CMD_READ 0x0 11775574Smx205022 #define SEEPROM_CMD_WRITE_ENABLE 0x1 11785574Smx205022 #define SEEPROM_CMD_ERASE 0x2 11795574Smx205022 #define SEEPROM_CMD_WRITE 0x3 11805574Smx205022 #define SEEPROM_CMD_ERALSE_ALL 0x4 11815574Smx205022 #define SEEPROM_CMD_WRITE_ALL 0x5 11825574Smx205022 #define SEEPROM_CMD_WRITE_DIS 0x6 11835574Smx205022 #define SEEPROM_READY 0x1 11845574Smx205022 typedef union _nge_ep_cmd { 11855574Smx205022 uint32_t cmd_val; 11865574Smx205022 struct { 11875574Smx205022 uint32_t addr:16; 11885574Smx205022 uint32_t cmd:3; 11895574Smx205022 uint32_t resv19_30:12; 11905574Smx205022 uint32_t sts:1; 11915574Smx205022 } cmd_bits; 11925574Smx205022 } nge_ep_cmd; 11935574Smx205022 11945574Smx205022 /* 11955574Smx205022 * Seeprom data register 11965574Smx205022 */ 11975574Smx205022 #define NGE_EP_DATA 0x508 11985574Smx205022 typedef union _nge_ep_data { 11995574Smx205022 uint32_t data_val; 12005574Smx205022 struct { 12015574Smx205022 uint32_t data:16; 12025574Smx205022 uint32_t resv16_31:16; 12035574Smx205022 } data_bits; 12045574Smx205022 } nge_ep_data; 12055574Smx205022 12065574Smx205022 /* 12075574Smx205022 * Power management control 2nd register (since MCP51) 12085574Smx205022 */ 12095574Smx205022 #define NGE_PM_CNTL2 0x600 12105574Smx205022 typedef union _nge_pm_cntl2 { 12115574Smx205022 uint32_t cntl_val; 12125574Smx205022 struct { 12135574Smx205022 uint32_t phy_coma_set:1; 12145574Smx205022 uint32_t phy_coma_status:1; 12155574Smx205022 uint32_t resv2_3:2; 12165574Smx205022 uint32_t resv4:1; 12175574Smx205022 uint32_t resv5_7:3; 12185574Smx205022 uint32_t resv8_11:4; 12195574Smx205022 uint32_t resv12_15:4; 12205574Smx205022 uint32_t pmt5_en:1; 12215574Smx205022 uint32_t pmt6_en:1; 12225574Smx205022 uint32_t pmt7_en:1; 12235574Smx205022 uint32_t resv19_23:5; 12245574Smx205022 uint32_t pmt5_status:1; 12255574Smx205022 uint32_t pmt6_status:1; 12265574Smx205022 uint32_t pmt7_status:1; 12275574Smx205022 uint32_t resv27_31:5; 12285574Smx205022 } cntl_bits; 12295574Smx205022 } nge_pm_cntl2; 12305574Smx205022 12315574Smx205022 12325574Smx205022 /* 12335574Smx205022 * ASF RAM 0x800-0xfff 12345574Smx205022 */ 12355574Smx205022 12365574Smx205022 /* 12375574Smx205022 * Hardware-defined Statistics Block Offsets 12385574Smx205022 * 12395574Smx205022 * These are given in the manual as addresses in NIC memory, starting 12405574Smx205022 * from the NIC statistics area base address of 0x2000; 12415574Smx205022 */ 12425574Smx205022 12435574Smx205022 #define KS_BASE 0x0280 12445574Smx205022 #define KS_ADDR(x) (((x)-KS_BASE)/sizeof (uint32_t)) 12455574Smx205022 12465574Smx205022 typedef enum { 12475574Smx205022 KS_ifHOutOctets = KS_ADDR(0x0280), 12485574Smx205022 KS_ifHOutZeroRetranCount, 12495574Smx205022 KS_ifHOutOneRetranCount, 12505574Smx205022 KS_ifHOutMoreRetranCount, 12515574Smx205022 KS_ifHOutColCount, 12525574Smx205022 KS_ifHOutFifoovCount, 12535574Smx205022 KS_ifHOutLOCCount, 12545574Smx205022 KS_ifHOutExDecCount, 12555574Smx205022 KS_ifHOutRetryCount, 12565574Smx205022 12575574Smx205022 KS_ifHInFrameErrCount, 12585574Smx205022 KS_ifHInExtraOctErrCount, 12595574Smx205022 KS_ifHInLColErrCount, 12605574Smx205022 KS_ifHInRuntCount, 12615574Smx205022 KS_ifHInOversizeErrCount, 12625574Smx205022 KS_ifHInFovErrCount, 12635574Smx205022 KS_ifHInFCSErrCount, 12645574Smx205022 KS_ifHInAlignErrCount, 12655574Smx205022 KS_ifHInLenErrCount, 12665574Smx205022 KS_ifHInUniPktsCount, 12675574Smx205022 KS_ifHInBroadPksCount, 12685574Smx205022 KS_ifHInMulPksCount, 12695574Smx205022 KS_STATS_SIZE = KS_ADDR(0x2d0) 12705574Smx205022 12715574Smx205022 } nge_stats_offset_t; 12725574Smx205022 12735574Smx205022 /* 12745574Smx205022 * Hardware-defined Statistics Block 12755574Smx205022 * 12765574Smx205022 * Another view of the statistic block, as a array and a structure ... 12775574Smx205022 */ 12785574Smx205022 12795574Smx205022 typedef union { 12805898Sjj146644 uint64_t a[KS_STATS_SIZE]; 12815574Smx205022 struct { 12825898Sjj146644 uint64_t OutOctets; 12835898Sjj146644 uint64_t OutZeroRetranCount; 12845898Sjj146644 uint64_t OutOneRetranCount; 12855898Sjj146644 uint64_t OutMoreRetranCount; 12865898Sjj146644 uint64_t OutColCount; 12875898Sjj146644 uint64_t OutFifoovCount; 12885898Sjj146644 uint64_t OutLOCCount; 12895898Sjj146644 uint64_t OutExDecCount; 12905898Sjj146644 uint64_t OutRetryCount; 12915574Smx205022 12925898Sjj146644 uint64_t InFrameErrCount; 12935898Sjj146644 uint64_t InExtraOctErrCount; 12945898Sjj146644 uint64_t InLColErrCount; 12955898Sjj146644 uint64_t InRuntCount; 12965898Sjj146644 uint64_t InOversizeErrCount; 12975898Sjj146644 uint64_t InFovErrCount; 12985898Sjj146644 uint64_t InFCSErrCount; 12995898Sjj146644 uint64_t InAlignErrCount; 13005898Sjj146644 uint64_t InLenErrCount; 13015898Sjj146644 uint64_t InUniPktsCount; 13025898Sjj146644 uint64_t InBroadPksCount; 13035898Sjj146644 uint64_t InMulPksCount; 13045574Smx205022 } s; 13055574Smx205022 } nge_hw_statistics_t; 13065574Smx205022 13075574Smx205022 /* 13085574Smx205022 * MII (PHY) registers, beyond those already defined in <sys/miiregs.h> 13095574Smx205022 */ 13105574Smx205022 13115574Smx205022 #define NGE_PHY_NUMBER 32 13125574Smx205022 #define MII_LP_ASYM_PAUSE 0x0800 13135574Smx205022 #define MII_LP_PAUSE 0x0400 13145574Smx205022 13155574Smx205022 #define MII_100BASE_T4 0x0200 13165574Smx205022 #define MII_100BASET_FD 0x0100 13175574Smx205022 #define MII_100BASET_HD 0x0080 13185574Smx205022 #define MII_10BASET_FD 0x0040 13195574Smx205022 #define MII_10BASET_HD 0x0020 13205574Smx205022 13215574Smx205022 #define MII_ID_MARVELL 0x5043 13225574Smx205022 #define MII_ID_CICADA 0x03f1 13235574Smx205022 #define MII_IDL_MASK 0xfc00 13245574Smx205022 #define MII_AN_LPNXTPG 8 13255574Smx205022 13265574Smx205022 13275574Smx205022 #define MII_IEEE_EXT_STATUS 15 13285574Smx205022 13295574Smx205022 /* 13305574Smx205022 * New bits in the MII_CONTROL register 13315574Smx205022 */ 13325574Smx205022 #define MII_CONTROL_1000MB 0x0040 13335574Smx205022 13345574Smx205022 /* 13355574Smx205022 * Bits in the MII_1000BASE_T_CONTROL register 13365574Smx205022 * 13375574Smx205022 * The MASTER_CFG bit enables manual configuration of Master/Slave mode 13385574Smx205022 * (otherwise, roles are automatically negotiated). When this bit is set, 13395574Smx205022 * the MASTER_SEL bit forces Master mode, otherwise Slave mode is forced. 13405574Smx205022 */ 13415574Smx205022 #define MII_1000BASE_T_CONTROL 9 13425574Smx205022 #define MII_1000BT_CTL_MASTER_CFG 0x1000 /* enable role select */ 13435574Smx205022 #define MII_1000BT_CTL_MASTER_SEL 0x0800 /* role select bit */ 13445574Smx205022 #define MII_1000BT_CTL_ADV_FDX 0x0200 13455574Smx205022 #define MII_1000BT_CTL_ADV_HDX 0x0100 13465574Smx205022 13475574Smx205022 /* 13485574Smx205022 * Bits in the MII_1000BASE_T_STATUS register 13495574Smx205022 */ 13505574Smx205022 #define MII_1000BASE_T_STATUS 10 13515574Smx205022 #define MII_1000BT_STAT_MASTER_FAULT 0x8000 13525574Smx205022 #define MII_1000BT_STAT_MASTER_MODE 0x4000 13535574Smx205022 #define MII_1000BT_STAT_LCL_RCV_OK 0x2000 13545574Smx205022 #define MII_1000BT_STAT_RMT_RCV_OK 0x1000 13555574Smx205022 #define MII_1000BT_STAT_LP_FDX_CAP 0x0800 13565574Smx205022 #define MII_1000BT_STAT_LP_HDX_CAP 0x0400 13575574Smx205022 13585574Smx205022 #define MII_CICADA_BYPASS_CONTROL MII_VENDOR(2) 13595574Smx205022 #define CICADA_125MHZ_CLOCK_ENABLE 0x0001 13605574Smx205022 13615574Smx205022 #define MII_CICADA_10BASET_CONTROL MII_VENDOR(6) 13625574Smx205022 #define MII_CICADA_DISABLE_ECHO_MODE 0x2000 13635574Smx205022 13645574Smx205022 #define MII_CICADA_EXT_CONTROL MII_VENDOR(7) 13655574Smx205022 #define MII_CICADA_MODE_SELECT_BITS 0xf000 13665574Smx205022 #define MII_CICADA_MODE_SELECT_RGMII 0x1000 13675574Smx205022 #define MII_CICADA_POWER_SUPPLY_BITS 0x0e00 13685574Smx205022 #define MII_CICADA_POWER_SUPPLY_3_3V 0x0000 13695574Smx205022 #define MII_CICADA_POWER_SUPPLY_2_5V 0x0200 13705574Smx205022 13715574Smx205022 #define MII_CICADA_AUXCTRL_STATUS MII_VENDOR(12) 13725574Smx205022 #define MII_CICADA_PIN_PRORITY_SETTING 0x0004 13735574Smx205022 #define MII_CICADA_PIN_PRORITY_DEFAULT 0x0000 13745574Smx205022 13755574Smx205022 13765574Smx205022 #define NGE_REG_SIZE 0xfff 13775574Smx205022 #define NGE_MII_SIZE 0x20 13785574Smx205022 #define NGE_SEEROM_SIZE 0x800 13795574Smx205022 /* 13805574Smx205022 * Legacy rx's bd which does not support 13815574Smx205022 * any hardware offload 13825574Smx205022 */ 13835574Smx205022 typedef struct _legacy_rx_bd { 13845574Smx205022 uint32_t host_buf_addr; 13855574Smx205022 union { 13865574Smx205022 uint32_t cntl_val; 13875574Smx205022 struct { 13885574Smx205022 uint32_t bcnt:16; 13895574Smx205022 uint32_t end:1; 13905574Smx205022 uint32_t miss:1; 13915574Smx205022 uint32_t extra:1; 13925574Smx205022 uint32_t inten:1; 13935574Smx205022 uint32_t bam:1; 13945574Smx205022 uint32_t mam:1; 13955574Smx205022 uint32_t pam:1; 13965574Smx205022 uint32_t runt:1; 13975574Smx205022 uint32_t lcol:1; 13985574Smx205022 uint32_t max:1; 13995574Smx205022 uint32_t lfer:1; 14005574Smx205022 uint32_t crc:1; 14015574Smx205022 uint32_t ofol:1; 14025574Smx205022 uint32_t fram:1; 14035574Smx205022 uint32_t err:1; 14045574Smx205022 uint32_t own:1; 14055574Smx205022 } cntl_bits; 14065574Smx205022 } cntl_status; 14075574Smx205022 } legacy_rx_bd, *plegacy_rx_bd; 14085574Smx205022 14095574Smx205022 /* 14105574Smx205022 * Stand offload rx's bd which supports hareware checksum 14115574Smx205022 * for tcp/ip 14125574Smx205022 */ 14135574Smx205022 #define CK8G_NO_HSUM 0x0 14145574Smx205022 #define CK8G_TCP_SUM_ERR 0x1 14155574Smx205022 #define CK8G_UDP_SUM_ERR 0x2 14165574Smx205022 #define CK8G_IP_HSUM_ERR 0x3 14175574Smx205022 #define CK8G_IP_HSUM 0x4 14185574Smx205022 #define CK8G_TCP_SUM 0x5 14195574Smx205022 #define CK8G_UDP_SUM 0x6 14205574Smx205022 #define CK8G_RESV 0x7 14215574Smx205022 typedef struct _sum_rx_bd { 14225574Smx205022 uint32_t host_buf_addr; 14235574Smx205022 union { 14245574Smx205022 uint32_t cntl_val; 14255574Smx205022 struct { 14265574Smx205022 uint32_t bcnt:14; 14275574Smx205022 uint32_t resv14_29:16; 14285574Smx205022 uint32_t inten:1; 14295574Smx205022 uint32_t own:1; 14305574Smx205022 } control_bits; 14315574Smx205022 struct { 14325574Smx205022 uint32_t bcnt:14; 14335574Smx205022 uint32_t resv14:1; 14345574Smx205022 uint32_t bam:1; 14355574Smx205022 uint32_t mam:1; 14365574Smx205022 uint32_t pam:1; 14375574Smx205022 uint32_t runt:1; 14385574Smx205022 uint32_t lcol:1; 14395574Smx205022 uint32_t max:1; 14405574Smx205022 uint32_t lfer:1; 14415574Smx205022 uint32_t crc:1; 14425574Smx205022 uint32_t ofol:1; 14435574Smx205022 uint32_t fram:1; 14445574Smx205022 uint32_t extra:1; 14455574Smx205022 uint32_t l3_l4_sum:3; 14465574Smx205022 uint32_t rend:1; 14475574Smx205022 uint32_t err:1; 14485574Smx205022 uint32_t own:1; 14495574Smx205022 } status_bits; 14505574Smx205022 } cntl_status; 14515574Smx205022 } sum_rx_bd, *psum_rx_bd; 14525574Smx205022 /* 14535574Smx205022 * Hot offload rx's bd which support 64bit access and 14545574Smx205022 * full-tcp hardware offload 14555574Smx205022 */ 14565574Smx205022 typedef struct _hot_rx_bd { 14575574Smx205022 uint32_t host_buf_addr_hi; 14585574Smx205022 uint32_t host_buf_addr_lo; 14595574Smx205022 uint32_t sw_tag; 14605574Smx205022 union { 14615574Smx205022 uint32_t cntl_val; 14625574Smx205022 struct { 14635574Smx205022 uint32_t bcnt:14; 14645574Smx205022 uint32_t resv14_29:16; 14655574Smx205022 uint32_t inten:1; 14665574Smx205022 uint32_t own:1; 14675574Smx205022 } control_bits; 14685574Smx205022 14695574Smx205022 struct { 14705574Smx205022 uint32_t bcnt:14; 14715574Smx205022 uint32_t ctmach_rd:1; 14725574Smx205022 uint32_t bam:1; 14735574Smx205022 uint32_t mam:1; 14745574Smx205022 uint32_t pam:1; 14755574Smx205022 uint32_t runt:1; 14765574Smx205022 uint32_t lcol:1; 14775574Smx205022 uint32_t max:1; 14785574Smx205022 uint32_t lfer:1; 14795574Smx205022 uint32_t crc:1; 14805574Smx205022 uint32_t ofol:1; 14815574Smx205022 uint32_t fram:1; 14825574Smx205022 uint32_t extra:1; 14835574Smx205022 uint32_t l3_l4_sum:3; 14845574Smx205022 uint32_t rend:1; 14855574Smx205022 uint32_t err:1; 14865574Smx205022 uint32_t own:1; 14875574Smx205022 } status_bits_legacy; 14885574Smx205022 } cntl_status; 14895574Smx205022 } hot_rx_bd, *phot_rx_bd; 14905574Smx205022 14915574Smx205022 /* 14925574Smx205022 * Legacy tx's bd which does not support 14935574Smx205022 * any hardware offload 14945574Smx205022 */ 14955574Smx205022 typedef struct _legacy_tx_bd { 14965574Smx205022 uint32_t host_buf_addr; 14975574Smx205022 union { 14985574Smx205022 uint32_t cntl_val; 14995574Smx205022 struct { 15005574Smx205022 uint32_t bcnt:16; 15015574Smx205022 uint32_t end:1; 15025574Smx205022 uint32_t resv17_23:7; 15035574Smx205022 uint32_t inten:1; 15045574Smx205022 uint32_t resv25_30:6; 15055574Smx205022 uint32_t own:1; 15065574Smx205022 } control_bits; 15075574Smx205022 15085574Smx205022 struct { 15095574Smx205022 uint32_t bcnt:16; 15105574Smx205022 uint32_t end:1; 15115574Smx205022 uint32_t rtry:1; 15125574Smx205022 uint32_t trc:4; 15135574Smx205022 uint32_t inten:1; 15145574Smx205022 uint32_t exdef:1; 15155574Smx205022 uint32_t def:1; 15165574Smx205022 uint32_t lcar:1; 15175574Smx205022 uint32_t lcol:1; 15185574Smx205022 uint32_t uflo:1; 15195574Smx205022 uint32_t err:1; 15205574Smx205022 uint32_t own:1; 15215574Smx205022 } status_bits; 15225574Smx205022 } cntl_status; 15235574Smx205022 } legacy_tx_bd, *plegacy_tx_bd; 15245574Smx205022 15255574Smx205022 /* 15265574Smx205022 * Stand offload tx's bd which supports hareware checksum 15275574Smx205022 * for tcp/ip 15285574Smx205022 */ 15295574Smx205022 typedef struct _sum_tx_bd { 15305574Smx205022 uint32_t host_buf_addr; 15315574Smx205022 union { 15325574Smx205022 uint32_t cntl_val; 15335574Smx205022 struct { 15345574Smx205022 uint32_t bcnt:14; 15355574Smx205022 uint32_t resv14_25:12; 15365574Smx205022 uint32_t tcp_hsum:1; 15375574Smx205022 uint32_t ip_hsum:1; 15385574Smx205022 uint32_t segen:1; 15395574Smx205022 uint32_t end:1; 15405574Smx205022 uint32_t inten:1; 15415574Smx205022 uint32_t own:1; 15425574Smx205022 } control_sum_bits; 15435574Smx205022 15445574Smx205022 struct { 15455574Smx205022 uint32_t bcnt:14; 15465574Smx205022 uint32_t mss:14; 15475574Smx205022 uint32_t segen:1; 15485574Smx205022 uint32_t end:1; 15495574Smx205022 uint32_t inten:1; 15505574Smx205022 uint32_t own:1; 15515574Smx205022 } control_tso_bits; 15525574Smx205022 15535574Smx205022 struct { 15545574Smx205022 uint32_t bcnt:14; 15555574Smx205022 uint32_t resv14_17:4; 15565574Smx205022 uint32_t rtry:1; 15575574Smx205022 uint32_t trc:4; 15585574Smx205022 uint32_t inten:1; 15595574Smx205022 uint32_t exdef:1; 15605574Smx205022 uint32_t def:1; 15615574Smx205022 uint32_t lcar:1; 15625574Smx205022 uint32_t lcol:1; 15635574Smx205022 uint32_t uflo:1; 15645574Smx205022 uint32_t end:1; 15655574Smx205022 uint32_t err:1; 15665574Smx205022 uint32_t own:1; 15675574Smx205022 } status_bits; 15685574Smx205022 } control_status; 15695574Smx205022 } sum_tx_bd, *psum_tx_bd; 15705574Smx205022 15715574Smx205022 /* 15725574Smx205022 * Hot offload tx's bd which support 64bit access and 15735574Smx205022 * full-tcp hardware offload 15745574Smx205022 */ 15755574Smx205022 15765574Smx205022 typedef struct _hot_tx_bd { 15775574Smx205022 uint32_t host_buf_addr_hi; 15785574Smx205022 uint32_t host_buf_addr_lo; 15795574Smx205022 union { 15805574Smx205022 uint32_t parm_val; 15815574Smx205022 struct { 15825574Smx205022 uint32_t resv0_15:16; 15835574Smx205022 uint32_t resv16:1; 15845574Smx205022 uint32_t resv17:1; 15855574Smx205022 uint32_t resv18_31:14; 15865574Smx205022 } parm_bits; 15875574Smx205022 } hot_parms; 15885574Smx205022 15895574Smx205022 union { 15905574Smx205022 uint32_t cntl_val; 15915574Smx205022 struct { 15925574Smx205022 uint32_t bcnt:14; 15935574Smx205022 uint32_t resv14_25:12; 15945574Smx205022 uint32_t tcp_hsum:1; 15955574Smx205022 uint32_t ip_hsum:1; 15965574Smx205022 uint32_t segen:1; 15975574Smx205022 uint32_t end:1; 15985574Smx205022 uint32_t inten:1; 15995574Smx205022 uint32_t own:1; 16005574Smx205022 } control_sum_bits; 16015574Smx205022 16025574Smx205022 struct { 16035574Smx205022 uint32_t bcnt:14; 16045574Smx205022 uint32_t mss:14; 16055574Smx205022 uint32_t segen:1; 16065574Smx205022 uint32_t end:1; 16075574Smx205022 uint32_t inten:1; 16085574Smx205022 uint32_t own:1; 16095574Smx205022 } control_tso_bits; 16105574Smx205022 16115574Smx205022 struct { 16125574Smx205022 uint32_t bcnt:14; 16135574Smx205022 uint32_t resv14_17:4; 16145574Smx205022 uint32_t rtry:1; 16155574Smx205022 uint32_t trc:4; 16165574Smx205022 uint32_t inten:1; 16175574Smx205022 uint32_t exdef:1; 16185574Smx205022 uint32_t def:1; 16195574Smx205022 uint32_t lcar:1; 16205574Smx205022 uint32_t lcol:1; 16215574Smx205022 uint32_t uflo:1; 16225574Smx205022 uint32_t end:1; 16235574Smx205022 uint32_t err:1; 16245574Smx205022 uint32_t own:1; 16255574Smx205022 } status_bits; 16265574Smx205022 } control_status; 16275574Smx205022 } hot_tx_bd, *phot_tx_bd; 16285574Smx205022 16295574Smx205022 #ifdef __cplusplus 16305574Smx205022 } 16315574Smx205022 #endif 16325574Smx205022 16335574Smx205022 #endif /* _SYS_NGE_CHIP_H */ 1634