6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
47693af92e50a1ad81825eb01b7157a211269613mx * CDDL HEADER START
47693af92e50a1ad81825eb01b7157a211269613mx *
47693af92e50a1ad81825eb01b7157a211269613mx * The contents of this file are subject to the terms of the
47693af92e50a1ad81825eb01b7157a211269613mx * Common Development and Distribution License (the "License").
47693af92e50a1ad81825eb01b7157a211269613mx * You may not use this file except in compliance with the License.
47693af92e50a1ad81825eb01b7157a211269613mx *
47693af92e50a1ad81825eb01b7157a211269613mx * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
47693af92e50a1ad81825eb01b7157a211269613mx * or http://www.opensolaris.org/os/licensing.
47693af92e50a1ad81825eb01b7157a211269613mx * See the License for the specific language governing permissions
47693af92e50a1ad81825eb01b7157a211269613mx * and limitations under the License.
47693af92e50a1ad81825eb01b7157a211269613mx *
47693af92e50a1ad81825eb01b7157a211269613mx * When distributing Covered Code, include this CDDL HEADER in each
47693af92e50a1ad81825eb01b7157a211269613mx * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
47693af92e50a1ad81825eb01b7157a211269613mx * If applicable, add the following below this CDDL HEADER, with the
47693af92e50a1ad81825eb01b7157a211269613mx * fields enclosed by brackets "[]" replaced with your own identifying
47693af92e50a1ad81825eb01b7157a211269613mx * information: Portions Copyright [yyyy] [name of copyright owner]
47693af92e50a1ad81825eb01b7157a211269613mx *
47693af92e50a1ad81825eb01b7157a211269613mx * CDDL HEADER END
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
47693af92e50a1ad81825eb01b7157a211269613mx * Use is subject to license terms.
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#ifndef _SYS_NGE_CHIP_H
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define _SYS_NGE_CHIP_H
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#ifdef __cplusplus
6f3e57ac9d0b054c3169579f3422080b8ba10105mxextern "C" {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#endif
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#include "nge.h"
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define VENDOR_ID_NVIDIA 0x10de
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_MCP04_37 0x37
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_MCP04_38 0x38
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_CK804_56 0x56
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_CK804_57 0x57
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_MCP51_269 0x269
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_MCP51_268 0x268
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_MCP55_373 0x373
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_MCP55_372 0x372
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_MCP61_3EE 0x3ee
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_MCP61_3EF 0x3ef
a01a4735489b25416b449c3231ab8b710caaeb1cWinson Wang - Sun Microsystems - Beijing China#define DEVICE_ID_MCP77_760 0x760
9fa05d92f6b225eb418fb782225c991b887ea8b7Winson Wang - Sun Microsystems - Beijing China#define DEVICE_ID_MCP79_AB0 0xab0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_NF3_E6 0xe6
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DEVICE_ID_NF3_DF 0xdf
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/* Private PCI configuration register for bus config of ck804/mcp55 */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define PCI_CONF_HT_INTERNAL 0x4c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_interbus_conf {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t conf_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t unit_id:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv5_23:19;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t aux_val:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv27:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t msi_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t msix_off:1; /* mcp55 only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv30_31:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } conf_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_interbus_conf;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/* Private PCI configuration register for MSI mask of mcp55 */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define PCI_CONF_HT_MSI_MASK 0x60
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_msi_mask_conf {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t msi_mask_conf_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec0_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec1_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec2_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec3_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec4_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec5_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec6_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec7_off:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv8_31:24;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } msi_mask_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_msi_mask_conf;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/* Private PCI configuration register for MSI map capability of mcp55 */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define PCI_CONF_HT_MSI_MAP_CAP 0x6c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_msi_map_cap_conf {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t msi_map_cap_conf_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cap_id:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t next_ptr:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t map_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t map_fixed:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv18_26:9;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cap_type:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } map_cap_conf_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_msi_map_cap_conf;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Master interrupt
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_INTR_SRC 0x000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define INTR_SRC_ALL 0x00007fff
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_intr_src {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t intr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t reint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rcint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t miss:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t teint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tcint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t stint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rfint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tfint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t feint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv10:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv11:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv12:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv13:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t phyint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv15_31:17;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } int_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_intr_src;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Master interrupt Mask
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_INTR_MASK 0x004
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_INTR_ALL_EN 0x00007fff
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_intr_mask {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mask_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t reint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rcint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t miss:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t teint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tcint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t stint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rfint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tfint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t feint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv10:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv11:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv12:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv13:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t phyint:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv15_31:17;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } mask_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_intr_mask;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Software timer control register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_SWTR_CNTL 0x008
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_swtr_cntl {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t ctrl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t stren:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t sten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t resv2_7:6;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_swtr_cntl;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Software Timer Interval
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_SWTR_ITC 0x00c
02d51d0d625c185ad277d9ad1ddf34b06f78b9b4jj
02d51d0d625c185ad277d9ad1ddf34b06f78b9b4jj/* Default timer interval, 97 would mean 1 ms */
02d51d0d625c185ad277d9ad1ddf34b06f78b9b4jj#define SWTR_ITC 0x8
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_itc {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t itc_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t sw_intv:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t sw_cur_val:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } itc_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_itc;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Fatal error register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_REG010 0x010
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_reg010 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t reg010_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv0:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv1:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv3:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv4:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv5:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv6:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv7:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv8:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv9:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv10:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv11_31:21;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } reg010_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_reg010;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * MSI vector map register 0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MSI_MAP0 0x020
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_msi_map0_vec {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t msi_map0_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t reint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rcint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t miss_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t teint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tcint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t stint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rfint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } vecs_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_msi_map0_vec;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * MSI vector map register 1
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MSI_MAP1 0x024
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_msi_map1_vec {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t msi_map1_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tfint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t feint_vec:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv8_11:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv12_15:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16_19:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv20_23:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv24_31:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } vecs_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_msi_map1_vec;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * MSI vector map register 2
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MSI_MAP2 0x028
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * MSI vector map register 2
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MSI_MAP3 0x02c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * MSI mask register for mcp55
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MSI_MASK 0x30
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_msi_mask {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t msi_mask_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec0:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec1:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec3:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec4:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec5:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec6:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vec7:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv8_31:24;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx }msi_msk_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx}nge_msi_mask;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Software misc register for mcp51
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_SOFT_MISC 0x034
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_soft_misc {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t misc_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_clk_vx_rst:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_clk_vx_rst:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t clk12m_vx_rst:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fpci_clk_vx_rst:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_clk_vc_rst:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_clk_vc_rst:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fs_clk_vc_rst:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rst_ex_m2pintf:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv8_31:24;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } misc_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_soft_misc;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * DMA configuration
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_DMA_CFG 0x040
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_dma_cfg {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cfg_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_start_pri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_start_pri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_prd_rpri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_prd_rpri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_prd_wpri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_prd_wpri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_start_pri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_start_pri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_prd_rpri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_prd_rpri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_prd_wpri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_prd_wpri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dma_max_pri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dma_wrr_disable:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dma_pri_disable:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cfg_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_dma_cfg;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Request DMA configuration
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_DMA_RCFG 0x044
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_dma_rcfg {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dma_rcfg_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_prd_coh_state:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_data_coh_state:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_prd_coh_state:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_data_coh_state:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t max_roffset:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv13_31:19;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } rcfg_bis;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_dma_rcfg;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Hot DMA configuration
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_DMA_HOT_CFG 0x048
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_dma_hcfg {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dma_hcfg_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv0_3:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t noti_wstart_pri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t noti_wstart_pri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cmd_rstart_pri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cmd_rstart_pri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cmd_wstart_pri:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cmd_wstart_pri_flag:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16_31:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } hcfg_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_dma_hcfg;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * PMU control register 0 for mcp51
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CNTL0 0x060
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CORE_SPD10_BUSY 0x8
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CORE_SPD10_IDLE 0xB
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CORE_SPD100_BUSY 0x4
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CORE_SPD100_IDLE 0x7
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CORE_SPD1000_BUSY 0x0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CORE_SPD1000_IDLE 0x3
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_pmu_cntl0 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl0_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_spd10_fp:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_spd10_idle:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_spd100_fp:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_spd100_idle:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_spd1000_fp:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_spd1000_idle:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_sts_cur:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl0_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_pmu_cntl0;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * PMU control register 1 for mcp51
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CNTL1 0x064
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_pmu_cntl1 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl1_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dev_fp:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dev_idle:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv8_27:20;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dev_sts_cur:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl1_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_pmu_cntl1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * PMU control register 2 for mcp51
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CNTL2 0x068
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_pmu_cntl2 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl2_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_override:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv4_7:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dev_override:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv12_15:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_override_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dev_override_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t core_enable:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dev_enable:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_wake_dis:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cidle_timer:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t didle_timer:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv23_31:9;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl2_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_pmu_cntl2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * PMU core idle limit register for mcp51
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CIDLE_LIMIT 0x06c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CIDLE_LIMIT_DEF 0xffff
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * PMU device idle limit register for mcp51
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_DIDLE_LIMIT 0x070
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_DIDLE_LIMIT_DEF 0xffff
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * PMU core idle count value register for mcp51
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CIDLE_COUNT 0x074
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_CIDEL_COUNT_DEF 0xffff
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * PMU device idle count value register for mcp51
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_DIDLE_COUNT 0x078
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMU_DIDEL_COUNT_DEF 0xffff
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Transmit control
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_CNTL 0x080
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_tx_cntl {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t paen:1; /* only for mcp55, otherwise reserve */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv1:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t retry_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pad_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fappend_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t two_def_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv6_7:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t max_retry:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t burst_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv13_15:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t retry_emask:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t exdef_mask:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t def_mask:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcar_mask:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tlcol_mask:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t uflo_err_mask:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv22_23:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t jam_seq_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv25_31:7;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_cntl;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Transmit enable
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Note: for ck804 or mcp51, this is 8-bit register;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * for mcp55, it is a 32-bit register.
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_EN 0x084
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China#define NGE_SMU_FREE 0x0
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China#define NGE_SMU_GET 0xf
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_tx_en {
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China uint32_t val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China uint32_t tx_en:1;
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China uint32_t resv1_7:7;
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China uint32_t smu2mac:4;
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China uint32_t mac2smu:4;
d635b452b5b58e50f0c67983f4a57a04deefce77Winson Wang - Sun Microsystems - Beijing China uint32_t resv16_31:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_en;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Transmit status
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_STA 0x088
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_tx_sta {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t sta_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_chan_sta:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv1_15:15;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t retry_err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t exdef:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t def:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcar:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tlcol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t uflo:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv22_31:10;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } sta_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_sta;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Receive control
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_CNTL0 0x08c
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rx_cntrl0 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv0:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t padsen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fcsren:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t paen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lben:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t afen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t runten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t brdis:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rdfen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t slfb:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv10_15:6;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t runtm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rlcolm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t maxerm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lferm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t crcm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ofolm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t framerm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv23_31:9;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_cntrl0;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Maximum receive Frame size
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_CNTL1 0x090
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rx_cntl1 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t length:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14_31:18;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_cntl1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Receive enable register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Note: for ck804 and mcp51, this is a 8-bit register;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * for mcp55, it is a 32-bit register.
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_EN 0x094
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rx_en {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t rx_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t resv1_7:7;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_en;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Receive status register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_STA 0x098
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rx_sta {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t sta_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_chan_sta:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv1_15:15;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t runt_sta:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rlcol_sta:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mlen_err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lf_err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t crc_err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ofol_err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fram_err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv23_31:9;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } sta_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_sta;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Backoff Control
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_BKOFF_CNTL 0x09c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define BKOFF_RSEED 0x8
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define BKOFF_SLIM_GMII 0x3ff
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define BKOFF_SLIM_MII 0x7f
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_bkoff_cntl {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rseed:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t sltm:10;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv18_30:13;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t leg_bk_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } bkoff_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_bkoff_cntl;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Transmit defferral timing
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_DEF 0x0a0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_TIFG_MII 0x15
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_IFG_RGMII_1000_FD 0x14
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_IFG_RGMII_OTHER 0x16
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_IFG2_MII 0x5
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_IFG2_RGMII_10_100 0x7
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_IFG2_RGMII_1000 0x5
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_IFG2_DEFAULT 0X0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_IFG1_DEFAULT 0xf
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_tx_def {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t def_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ifg1_def:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ifg2_def:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t if_def:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv24_31:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } def_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_def;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Receive defferral timing
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_DEf 0x0a4
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define RX_DEF_DEFAULT 0x16
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rx_def {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t def_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t rifg;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } def_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_def;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Low 32 bit unicast address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_UNI_ADDR0 0x0a8
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_uni_addr0;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * High 32 bit unicast address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_UNI_ADDR1 0x0ac
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_uni_addr1 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16_31:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_uni_addr1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
d27d4a13eaba374ddedac2be3de8c5318360ca01Miles Xu, Sun Microsystems#define LOW_24BITS_MASK 0xffffffULL
d27d4a13eaba374ddedac2be3de8c5318360ca01Miles Xu, Sun Microsystems#define REVERSE_MAC_ELITE 0x211900ULL
d27d4a13eaba374ddedac2be3de8c5318360ca01Miles Xu, Sun Microsystems#define REVERSE_MAC_GIGABYTE 0xe61600ULL
d27d4a13eaba374ddedac2be3de8c5318360ca01Miles Xu, Sun Microsystems#define REVERSE_MAC_ASUS 0x601d00ULL
d27d4a13eaba374ddedac2be3de8c5318360ca01Miles Xu, Sun Microsystems
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Low 32 bit multicast address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MUL_ADDR0 0x0b0
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx }addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx}nge_mul_addr0;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * High 32 bit multicast address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MUL_ADDR1 0x0b4
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_mul_addr1 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16_31:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx }addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx}nge_mul_addr1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Low 32 bit multicast mask
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MUL_MASK 0x0b8
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mask_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mask;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } mask_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mul_mask0;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * High 32 bit multicast mask
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MUL_MASK1 0x0bc
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mask_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mask:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16_31:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } mask_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mul_mask1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Mac-to Phy Interface
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MAC2PHY 0x0c0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define low_speed 0x0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define fast_speed 0x1
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define giga_speed 0x2
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define err_speed 0x4
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_IN 0x0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define RGMII_IN 0x1
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define ERR_IN1 0x3
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define ERR_IN2 0x4
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_mac2phy {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t m2p_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t speed:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv2_7:6;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t hdup_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv9:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t phyintr:1; /* for mcp55 only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t phyintrlvl:1; /* for mcp55 only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv12_27:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t in_type:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv30_31:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } m2p_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mac2phy;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Transmit Descriptor Ring address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_DADR 0x100
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_tx_addr {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv0_2:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:29;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Receive Descriptor Ring address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_DADR 0x104
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rx_addr {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv0_2:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:29;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Rx/tx descriptor ring leng
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Note: for mcp55, tdlen/rdlen are 14 bit.
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RXTX_DLEN 0x108
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rxtx_dlen {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dlen_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tdlen:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14_15:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rdlen:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv30_31:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } dlen_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rxtx_dlen;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Transmit polling register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_POLL 0x10c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_POLL_INTV_1G 10
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_POLL_INTV_100M 100
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_POLL_INTV_10M 1000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_tx_poll {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t poll_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tpi:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tpen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv17_31:15;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } poll_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_poll;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Receive polling register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_POLL 0x110
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define RX_POLL_INTV_1G 10
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define RX_POLL_INTV_100M 100
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define RX_POLL_INTV_10M 1000
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rx_poll {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t poll_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rpi:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rpen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv17_31:15;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } poll_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_poll;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Transmit polling count
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_PCNT 0x114
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cnt_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pcnt:32;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cnt_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_pcnt;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Receive polling count
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_PCNT 0x118
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cnt_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pcnt:32;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cnt_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_pcnt;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Current tx's descriptor address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_CUR_DADR 0x11c
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv0_2:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:29;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_cur_addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Current rx's descriptor address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_CUR_DADR 0x120
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv0_2:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:29;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_cur_addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Current tx's data buffer address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_CUR_PRD0 0x124
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t prd0_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t prd0:32;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } prd0_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_cur_prd0;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Current tx's data buffer status
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_CUR_PRD1 0x128
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t prd1_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rebytes:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t status:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } prd1_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_cur_prd1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Current rx's data buffer address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_CUR_PRD0 0x12c
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t prd0_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t prd0:32;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx }prd0_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx}nge_rx_cur_prd0;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Current rx's data buffer status
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_CUR_PRD1 0x130
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Next tx's descriptor address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_NXT_DADR 0x134
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dadr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:32;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx }addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx}nge_tx_nxt_dadr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Next rx's descriptor address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_NXT_DADR 0x138
6f3e57ac9d0b054c3169579f3422080b8ba10105mxunion {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dadr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:32;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } addr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_nxt_dadr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Transmit fifo watermark
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_FIFO_WM 0x13c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_FIFO_TBFW 0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_FIFO_NOB_WM_MII 1
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_FIFO_NOB_WM_GMII 8
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_FIFO_DATA_LWM 0x20
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_FIFO_PRD_LWM 0x8
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define TX_FIFO_PRD_HWM 0x38
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_tx_fifo_wm {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t wm_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t data_lwm:9;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv8_11:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t prd_lwm:6;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t uprd_hwm:6;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t nbfb_wm:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fb_wm:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } wm_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_tx_fifo_wm;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Receive fifo watermark
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_FIFO_WM 0x140
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_rx_fifo_wm {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t wm_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t data_hwm:9;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv9_11:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t prd_lwm:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16_17:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t prd_hwm:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv22_31:10;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } wm_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_rx_fifo_wm;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Chip mode control
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MODE_CNTL 0x144
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DESC_MCP1 0x0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DESC_OFFLOAD 0x1
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DESC_HOT 0x2
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define DESC_RESV 0x3
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MACHINE_BUSY 0x0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MACHINE_IDLE 0x1
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_mode_cntl {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mode_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t txdm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rxdm:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dma_dis:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t dma_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bm_reset:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv5:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vlan_strip:1; /* mcp55 chip only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t vlan_ins:1; /* mcp55 chip only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t desc_type:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_sum_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_prd_cu_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t w64_dis:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_rcom_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_filter_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv15:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16:1; /* ck804 and mcp51 only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv17:1; /* ck804 and mcp51 only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv18:1; /* ck804 and mcp51 only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv19_21:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_fetch_prd:1; /* mcp51/mcp55 only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_fetch_prd:1; /* mcp51/mcp55 only */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv24_29:6;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rx_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tx_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } mode_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mode_cntl;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_TX_DADR_HI 0x148
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_RX_DADR_HI 0x14c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Mii interrupt register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Note: for mcp55, this is a 32-bit register.
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MINTR_SRC 0x180
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_mintr_src {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t src_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mrei:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mcc2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mcc1:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mapi:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mpdi:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t resv5_7:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } src_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mintr_src;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Mii interrupt mask
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Note: for mcp55, this is a 32-bit register.
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MINTR_MASK 0x184
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_mintr_mask {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mask_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mrei:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mcc2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mcc1:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mapi:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t mpdi:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint8_t resv5_7:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } mask_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mintr_mask;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Mii control and status
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MII_CS 0x188
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_POLL_INTV 0x4
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_mii_cs {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cs_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t excap:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t jab_dec:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lk_up:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ana_cap:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rfault:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t auto_neg:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mfps:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv7:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t exst:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t hdup_100m_t2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fdup_100m_t2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t hdup_10m:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fdup_10m:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t hdup_100m_x:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fdup_100m_x:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cap_100m_t4:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ap_intv:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ap_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv21_23:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ap_paddr:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv29_31:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cs_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mii_cs;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Mii Clock timer register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MII_TM 0x18c
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_mii_tm {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t tm_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t timer_interv:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t timer_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t resv9_14:6;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t timer_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } tm_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mii_tm;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Mdio address
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MDIO_ADR 0x190
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_mdio_adr {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t adr_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t phy_reg:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t phy_adr:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t mdio_rw:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t resv11_14:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint16_t mdio_clc:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } adr_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_mdio_adr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Mdio data
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MDIO_DATA 0x194
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Power Management and Control
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PM_CNTL 0x200
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_pm_cntl {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx /*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * mp_en: Magic Packet Enable
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * pm_en: Pattern Match Enable
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * lc_en: Link Change Enable
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mp_en_d0:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pm_en_d0:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lc_en_d0:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv3:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mp_en_d1:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pm_en_d1:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lc_en_d1:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv7:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mp_en_d2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pm_en_d2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lc_en_d2:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv11:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mp_en_d3:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pm_en_d3:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lc_en_d3:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv15:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pat_match_en:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv21_23:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pat_match_stat:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t magic_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t netman_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv31:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_pm_cntl;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MPT_CRC0 0x204
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK00 0x208
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK01 0x20C
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK02 0x210
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK03 0x214
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MPT_CRC1 0x218
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK10 0x21c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK11 0x220
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK12 0x224
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK13 0x228
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MPT_CRC2 0x22c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK20 0x230
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK21 0x234
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK22 0x238
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK23 0x23c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MPT_CRC3 0x240
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK30 0x244
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK31 0x248
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK32 0x24c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK33 0x250
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MPT_CRC4 0x254
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK40 0x258
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK41 0x25c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK42 0x260
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_MK43 0x264
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMC_ALIAS 0x268
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PMCSR_ALIAS 0x26c
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Seeprom control
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_EP_CNTL 0x500
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define EEPROM_CLKDIV 249
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define EEPROM_WAITCLK 0x7
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_cp_cntl {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t clkdiv:8;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rom_size:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv11:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t word_wid:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv13_15:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t wait_slots:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv20_31:12;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_cp_cntl;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Seeprom cmd control
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_EP_CMD 0x504
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define SEEPROM_CMD_READ 0x0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define SEEPROM_CMD_WRITE_ENABLE 0x1
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define SEEPROM_CMD_ERASE 0x2
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define SEEPROM_CMD_WRITE 0x3
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define SEEPROM_CMD_ERALSE_ALL 0x4
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define SEEPROM_CMD_WRITE_ALL 0x5
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define SEEPROM_CMD_WRITE_DIS 0x6
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define SEEPROM_READY 0x1
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_ep_cmd {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cmd_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t addr:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cmd:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv19_30:12;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t sts:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cmd_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_ep_cmd;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Seeprom data register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_EP_DATA 0x508
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_ep_data {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t data_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t data:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16_31:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } data_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_ep_data;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Power management control 2nd register (since MCP51)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PM_CNTL2 0x600
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union _nge_pm_cntl2 {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t phy_coma_set:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t phy_coma_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv2_3:2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv4:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv5_7:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv8_11:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv12_15:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pmt5_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pmt6_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pmt7_en:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv19_23:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pmt5_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pmt6_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pmt7_status:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv27_31:5;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_pm_cntl2;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * ASF RAM 0x800-0xfff
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Hardware-defined Statistics Block Offsets
6f3e57ac9d0b054c3169579f3422080b8ba10105mx *
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * These are given in the manual as addresses in NIC memory, starting
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * from the NIC statistics area base address of 0x2000;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define KS_BASE 0x0280
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define KS_ADDR(x) (((x)-KS_BASE)/sizeof (uint32_t))
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef enum {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutOctets = KS_ADDR(0x0280),
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutZeroRetranCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutOneRetranCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutMoreRetranCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutColCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutFifoovCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutLOCCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutExDecCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHOutRetryCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInFrameErrCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInExtraOctErrCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInLColErrCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInRuntCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInOversizeErrCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInFovErrCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInFCSErrCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInAlignErrCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInLenErrCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInUniPktsCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInBroadPksCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_ifHInMulPksCount,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx KS_STATS_SIZE = KS_ADDR(0x2d0)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_stats_offset_t;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Hardware-defined Statistics Block
6f3e57ac9d0b054c3169579f3422080b8ba10105mx *
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Another view of the statistic block, as a array and a structure ...
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef union {
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t a[KS_STATS_SIZE];
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutOctets;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutZeroRetranCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutOneRetranCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutMoreRetranCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutColCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutFifoovCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutLOCCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutExDecCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t OutRetryCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InFrameErrCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InExtraOctErrCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InLColErrCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InRuntCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InOversizeErrCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InFovErrCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InFCSErrCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InAlignErrCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InLenErrCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InUniPktsCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InBroadPksCount;
da9d001479c0df0ff0e6da7f78022412a5ec0c5bjj uint64_t InMulPksCount;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } s;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} nge_hw_statistics_t;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * MII (PHY) registers, beyond those already defined in <sys/miiregs.h>
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_PHY_NUMBER 32
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_LP_ASYM_PAUSE 0x0800
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_LP_PAUSE 0x0400
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_100BASE_T4 0x0200
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_100BASET_FD 0x0100
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_100BASET_HD 0x0080
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_10BASET_FD 0x0040
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_10BASET_HD 0x0020
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_ID_MARVELL 0x5043
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_ID_CICADA 0x03f1
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_IDL_MASK 0xfc00
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_AN_LPNXTPG 8
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_IEEE_EXT_STATUS 15
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * New bits in the MII_CONTROL register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CONTROL_1000MB 0x0040
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Bits in the MII_1000BASE_T_CONTROL register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx *
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * The MASTER_CFG bit enables manual configuration of Master/Slave mode
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * (otherwise, roles are automatically negotiated). When this bit is set,
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * the MASTER_SEL bit forces Master mode, otherwise Slave mode is forced.
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BASE_T_CONTROL 9
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_CTL_MASTER_CFG 0x1000 /* enable role select */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_CTL_MASTER_SEL 0x0800 /* role select bit */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_CTL_ADV_FDX 0x0200
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_CTL_ADV_HDX 0x0100
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Bits in the MII_1000BASE_T_STATUS register
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BASE_T_STATUS 10
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_STAT_MASTER_FAULT 0x8000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_STAT_MASTER_MODE 0x4000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_STAT_LCL_RCV_OK 0x2000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_STAT_RMT_RCV_OK 0x1000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_STAT_LP_FDX_CAP 0x0800
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_1000BT_STAT_LP_HDX_CAP 0x0400
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_BYPASS_CONTROL MII_VENDOR(2)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CICADA_125MHZ_CLOCK_ENABLE 0x0001
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_10BASET_CONTROL MII_VENDOR(6)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_DISABLE_ECHO_MODE 0x2000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_EXT_CONTROL MII_VENDOR(7)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_MODE_SELECT_BITS 0xf000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_MODE_SELECT_RGMII 0x1000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_POWER_SUPPLY_BITS 0x0e00
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_POWER_SUPPLY_3_3V 0x0000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_POWER_SUPPLY_2_5V 0x0200
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_AUXCTRL_STATUS MII_VENDOR(12)
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_PIN_PRORITY_SETTING 0x0004
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define MII_CICADA_PIN_PRORITY_DEFAULT 0x0000
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_REG_SIZE 0xfff
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_MII_SIZE 0x20
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define NGE_SEEROM_SIZE 0x800
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Legacy rx's bd which does not support
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * any hardware offload
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef struct _legacy_rx_bd {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t host_buf_addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx union {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t miss:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t extra:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t runt:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t max:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lfer:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t crc:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ofol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fram:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_status;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} legacy_rx_bd, *plegacy_rx_bd;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Stand offload rx's bd which supports hareware checksum
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * for tcp/ip
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CK8G_NO_HSUM 0x0
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CK8G_TCP_SUM_ERR 0x1
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CK8G_UDP_SUM_ERR 0x2
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CK8G_IP_HSUM_ERR 0x3
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CK8G_IP_HSUM 0x4
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CK8G_TCP_SUM 0x5
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CK8G_UDP_SUM 0x6
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#define CK8G_RESV 0x7
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef struct _sum_rx_bd {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t host_buf_addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx union {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14_29:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t runt:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t max:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lfer:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t crc:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ofol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fram:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t extra:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t l3_l4_sum:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rend:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } status_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_status;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} sum_rx_bd, *psum_rx_bd;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Hot offload rx's bd which support 64bit access and
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * full-tcp hardware offload
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef struct _hot_rx_bd {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t host_buf_addr_hi;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t host_buf_addr_lo;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t sw_tag;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx union {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14_29:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ctmach_rd:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t pam:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t runt:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t max:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lfer:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t crc:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ofol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t fram:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t extra:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t l3_l4_sum:3;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rend:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } status_bits_legacy;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_status;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} hot_rx_bd, *phot_rx_bd;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Legacy tx's bd which does not support
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * any hardware offload
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef struct _legacy_tx_bd {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t host_buf_addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx union {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv17_23:7;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv25_30:6;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rtry:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t trc:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t exdef:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t def:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcar:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t uflo:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } status_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } cntl_status;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} legacy_tx_bd, *plegacy_tx_bd;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Stand offload tx's bd which supports hareware checksum
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * for tcp/ip
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef struct _sum_tx_bd {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t host_buf_addr;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx union {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14_25:12;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tcp_hsum:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ip_hsum:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t segen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_sum_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mss:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t segen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_tso_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14_17:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rtry:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t trc:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t exdef:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t def:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcar:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t uflo:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } status_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_status;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} sum_tx_bd, *psum_tx_bd;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx/*
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * Hot offload tx's bd which support 64bit access and
6f3e57ac9d0b054c3169579f3422080b8ba10105mx * full-tcp hardware offload
6f3e57ac9d0b054c3169579f3422080b8ba10105mx */
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mxtypedef struct _hot_tx_bd {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t host_buf_addr_hi;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t host_buf_addr_lo;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx union {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t parm_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv0_15:16;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv16:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv17:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv18_31:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } parm_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } hot_parms;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx union {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t cntl_val;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14_25:12;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t tcp_hsum:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t ip_hsum:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t segen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_sum_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t mss:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t segen:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_tso_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx struct {
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t bcnt:14;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t resv14_17:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t rtry:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t trc:4;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t inten:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t exdef:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t def:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcar:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t lcol:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t uflo:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t end:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t err:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx uint32_t own:1;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } status_bits;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx } control_status;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx} hot_tx_bd, *phot_tx_bd;
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#ifdef __cplusplus
6f3e57ac9d0b054c3169579f3422080b8ba10105mx}
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#endif
6f3e57ac9d0b054c3169579f3422080b8ba10105mx
6f3e57ac9d0b054c3169579f3422080b8ba10105mx#endif /* _SYS_NGE_CHIP_H */