diff -Naru linux-2.6.16_orig/drivers/net/netxen/netxen_inc.h linux-2.6.16/drivers/net/netxen/netxen_inc.h --- linux-2.6.16_orig/drivers/net/netxen/netxen_inc.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.16/drivers/net/netxen/netxen_inc.h 2006-03-24 14:13:57.000000000 -0800 @@ -0,0 +1,1228 @@ +/* + * Copyright (C) 2003 - 2006 NetXen Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + * + * The full GNU General Public License is included in this distribution + * in the file called LICENSE. + * + * Contact Information: + * [EMAIL PROTECTED] + * NetXen, 3965 Freedom Circle, Fourth Floor, + * Santa Clara, CA 95054 + */ +#ifndef __NetXen_INC_H +#define __NetXen_INC_H + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/version.h> + +#include <linux/config.h> +#include <linux/version.h> + +#define NetXen_CONF_X86 3 + +#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) +#define MODVERSIONS +#endif + +#if defined(MODVERSIONS) && !defined(__GENKSYMS__) +#include <config/modversions.h> +#endif + +#include <asm/semaphore.h> +#include <linux/spinlock.h> +#include <asm/irq.h> +#include <linux/init.h> +#include <linux/errno.h> +#include <linux/pci.h> +#include <linux/proc_fs.h> +#include <asm/uaccess.h> +#include <asm/string.h> /* for memset */ + +typedef char __int8_t; +typedef short __int16_t; +typedef int __int32_t; + +typedef long long __int64_t; +typedef unsigned char __uint8_t; +typedef unsigned short __uint16_t; +typedef unsigned int __uint32_t; +typedef unsigned long long __uint64_t; + + +#define PRINTK_PREFIX "<1>" +#define printf_0(A) printk(PRINTK_PREFIX A) +#define printf_1(A,B) printk(PRINTK_PREFIX A, B) +#define printf_2(A,B,C) printk(PRINTK_PREFIX A, B, C) +#define printf_3(A,B,C,D) printk(PRINTK_PREFIX A, B, C, D) +#define printf_4(A,B,C,D,E) printk(PRINTK_PREFIX A, B, C, D, E) +#define printf_5(A,B,C,D,E,F) printk(PRINTK_PREFIX A, B, C, D, E, F) + +void DELAY(int A); + +/* + * We use the environmental controls to define/undefine various feature + * control macros depending on the circumstances. + * When compiling for a Linux host, we use the standard Linux configuration + * method to simplify things here. + */ + +#define NetXen_DELAY_HW 0 /* no delay */ + +#define NetXen_DELAY_HUMAN 0 /* humans read slow */ + +#define UNUSED __attribute__((unused)) +#define NOINLINE __attribute__((noinline)) + +extern long pegDynamicMemStart; + +/* + * The basic unit of access when reading/writing control registers. + */ +typedef long native_t; /* most efficient integer on h/w */ + +typedef __uint32_t netxen_crbword_t; /* single word in CRB space */ +typedef __uint64_t netxen_dataword_t; /* single word in data space */ +typedef __uint64_t netxen64ptr_t; /* a pointer that occupies 64 bits */ +#define NetXen64PTR(P) ((netxen64ptr_t)((native_t)(P))) /* convert for us */ + +#define MAX_REASSEMBLED_PKTS 4 + +# include <linux/types.h> + +#define NetXen_HW_H0_CH_HUB_ADR 0x05 +#define NetXen_HW_H1_CH_HUB_ADR 0x0E +#define NetXen_HW_H2_CH_HUB_ADR 0x03 +#define NetXen_HW_H3_CH_HUB_ADR 0x01 +#define NetXen_HW_H4_CH_HUB_ADR 0x06 +#define NetXen_HW_H5_CH_HUB_ADR 0x07 +#define NetXen_HW_H6_CH_HUB_ADR 0x08 +/* */ +/* WARNING: pex_tgt_adr.v assumes if MSB of hub adr is set then it is an ILLEGAL hub!!!!! */ +/* */ + +/* Hub 0 */ +#define NetXen_HW_MN_CRB_AGT_ADR 0x15 +#define NetXen_HW_MS_CRB_AGT_ADR 0x25 + +/* Hub 1 */ +#define NetXen_HW_PS_CRB_AGT_ADR 0x73 +#define NetXen_HW_SS_CRB_AGT_ADR 0x20 +#define NetXen_HW_RPMX3_CRB_AGT_ADR 0x0b +#define NetXen_HW_QMS_CRB_AGT_ADR 0x00 +#define NetXen_HW_SQGS0_CRB_AGT_ADR 0x01 +#define NetXen_HW_SQGS1_CRB_AGT_ADR 0x02 +#define NetXen_HW_SQGS2_CRB_AGT_ADR 0x03 +#define NetXen_HW_SQGS3_CRB_AGT_ADR 0x04 +#define NetXen_HW_C2C0_CRB_AGT_ADR 0x58 +#define NetXen_HW_C2C1_CRB_AGT_ADR 0x59 +#define NetXen_HW_C2C2_CRB_AGT_ADR 0x5a +#define NetXen_HW_RPMX2_CRB_AGT_ADR 0x0a +#define NetXen_HW_RPMX4_CRB_AGT_ADR 0x0c +#define NetXen_HW_RPMX7_CRB_AGT_ADR 0x0f +#define NetXen_HW_RPMX9_CRB_AGT_ADR 0x12 +#define NetXen_HW_SMB_CRB_AGT_ADR 0x18 + +/* Hub 2 */ +#define NetXen_HW_NIU_CRB_AGT_ADR 0x31 +#define NetXen_HW_I2C0_CRB_AGT_ADR 0x19 +#define NetXen_HW_I2C1_CRB_AGT_ADR 0x29 + +#define NetXen_HW_SN_CRB_AGT_ADR 0x10 +#define NetXen_HW_I2Q_CRB_AGT_ADR 0x20 +#define NetXen_HW_LPC_CRB_AGT_ADR 0x22 +#define NetXen_HW_ROMUSB_CRB_AGT_ADR 0x21 +#define NetXen_HW_QM_CRB_AGT_ADR 0x66 +#define NetXen_HW_SQG0_CRB_AGT_ADR 0x60 +#define NetXen_HW_SQG1_CRB_AGT_ADR 0x61 +#define NetXen_HW_SQG2_CRB_AGT_ADR 0x62 +#define NetXen_HW_SQG3_CRB_AGT_ADR 0x63 +#define NetXen_HW_RPMX1_CRB_AGT_ADR 0x09 +#define NetXen_HW_RPMX5_CRB_AGT_ADR 0x0d +#define NetXen_HW_RPMX6_CRB_AGT_ADR 0x0e +#define NetXen_HW_RPMX8_CRB_AGT_ADR 0x11 + +/* Hub 3 */ +#define NetXen_HW_PH_CRB_AGT_ADR 0x1A +#define NetXen_HW_SRE_CRB_AGT_ADR 0x50 +#define NetXen_HW_EG_CRB_AGT_ADR 0x51 +#define NetXen_HW_RPMX0_CRB_AGT_ADR 0x08 + +/* Hub 4 */ +#define NetXen_HW_PEGN0_CRB_AGT_ADR 0x40 +#define NetXen_HW_PEGN1_CRB_AGT_ADR 0x41 +#define NetXen_HW_PEGN2_CRB_AGT_ADR 0x42 +#define NetXen_HW_PEGN3_CRB_AGT_ADR 0x43 +#define NetXen_HW_PEGNI_CRB_AGT_ADR 0x44 +#define NetXen_HW_PEGND_CRB_AGT_ADR 0x45 +#define NetXen_HW_PEGNC_CRB_AGT_ADR 0x46 +#define NetXen_HW_PEGR0_CRB_AGT_ADR 0x47 +#define NetXen_HW_PEGR1_CRB_AGT_ADR 0x48 +#define NetXen_HW_PEGR2_CRB_AGT_ADR 0x49 +#define NetXen_HW_PEGR3_CRB_AGT_ADR 0x4a + + +/* Hub 5 */ +#define NetXen_HW_PEGS0_CRB_AGT_ADR 0x40 +#define NetXen_HW_PEGS1_CRB_AGT_ADR 0x41 +#define NetXen_HW_PEGS2_CRB_AGT_ADR 0x42 +#define NetXen_HW_PEGS3_CRB_AGT_ADR 0x43 +#define NetXen_HW_PEGSI_CRB_AGT_ADR 0x44 +#define NetXen_HW_PEGSD_CRB_AGT_ADR 0x45 +#define NetXen_HW_PEGSC_CRB_AGT_ADR 0x46 + + +/* Hub 6 */ +#define NetXen_HW_CAS0_CRB_AGT_ADR 0x46 +#define NetXen_HW_CAS1_CRB_AGT_ADR 0x47 +#define NetXen_HW_CAS2_CRB_AGT_ADR 0x48 +#define NetXen_HW_CAS3_CRB_AGT_ADR 0x49 +#define NetXen_HW_NCM_CRB_AGT_ADR 0x16 +#define NetXen_HW_TMR_CRB_AGT_ADR 0x17 +#define NetXen_HW_XDMA_CRB_AGT_ADR 0x05 +#define NetXen_HW_OCM0_CRB_AGT_ADR 0x06 +#define NetXen_HW_OCM1_CRB_AGT_ADR 0x07 + +/* Floaters - non existent modules */ +#define NetXen_HW_EFC_RPMX0_CRB_AGT_ADR 0x67 + +/* This field defines PCI/X adr [25:20] of agents on the CRB */ +/* */ +#define NetXen_HW_PX_MAP_CRB_PH 0 +#define NetXen_HW_PX_MAP_CRB_PS 1 +#define NetXen_HW_PX_MAP_CRB_MN 2 +#define NetXen_HW_PX_MAP_CRB_MS 3 +#define NetXen_HW_PX_MAP_CRB_SRE 5 +#define NetXen_HW_PX_MAP_CRB_NIU 6 +#define NetXen_HW_PX_MAP_CRB_QMN 7 +#define NetXen_HW_PX_MAP_CRB_SQN0 8 +#define NetXen_HW_PX_MAP_CRB_SQN1 9 +#define NetXen_HW_PX_MAP_CRB_SQN2 10 +#define NetXen_HW_PX_MAP_CRB_SQN3 11 +#define NetXen_HW_PX_MAP_CRB_QMS 12 +#define NetXen_HW_PX_MAP_CRB_SQS0 13 +#define NetXen_HW_PX_MAP_CRB_SQS1 14 +#define NetXen_HW_PX_MAP_CRB_SQS2 15 +#define NetXen_HW_PX_MAP_CRB_SQS3 16 +#define NetXen_HW_PX_MAP_CRB_PGN0 17 +#define NetXen_HW_PX_MAP_CRB_PGN1 18 +#define NetXen_HW_PX_MAP_CRB_PGN2 19 +#define NetXen_HW_PX_MAP_CRB_PGN3 20 +#define NetXen_HW_PX_MAP_CRB_PGND 21 +#define NetXen_HW_PX_MAP_CRB_PGNI 22 +#define NetXen_HW_PX_MAP_CRB_PGS0 23 +#define NetXen_HW_PX_MAP_CRB_PGS1 24 +#define NetXen_HW_PX_MAP_CRB_PGS2 25 +#define NetXen_HW_PX_MAP_CRB_PGS3 26 +#define NetXen_HW_PX_MAP_CRB_PGSD 27 +#define NetXen_HW_PX_MAP_CRB_PGSI 28 +#define NetXen_HW_PX_MAP_CRB_SN 29 +#define NetXen_HW_PX_MAP_CRB_EG 31 +#define NetXen_HW_PX_MAP_CRB_PH2 32 +#define NetXen_HW_PX_MAP_CRB_PS2 33 +#define NetXen_HW_PX_MAP_CRB_CAM 34 +#define NetXen_HW_PX_MAP_CRB_CAS0 35 +#define NetXen_HW_PX_MAP_CRB_CAS1 36 +#define NetXen_HW_PX_MAP_CRB_CAS2 37 +#define NetXen_HW_PX_MAP_CRB_C2C0 38 +#define NetXen_HW_PX_MAP_CRB_C2C1 39 +#define NetXen_HW_PX_MAP_CRB_TIMR 40 +/* #define PX_MAP_CRB_C2C2 40 // N/A: Not use in either Phantom1 or Phantom2 => use for TIMR */ +/* #define PX_MAP_CRB_SS 41 */ +#define NetXen_HW_PX_MAP_CRB_RPMX1 42 +#define NetXen_HW_PX_MAP_CRB_RPMX2 43 +#define NetXen_HW_PX_MAP_CRB_RPMX3 44 +#define NetXen_HW_PX_MAP_CRB_RPMX4 45 +#define NetXen_HW_PX_MAP_CRB_RPMX5 46 +#define NetXen_HW_PX_MAP_CRB_RPMX6 47 +#define NetXen_HW_PX_MAP_CRB_RPMX7 48 +#define NetXen_HW_PX_MAP_CRB_XDMA 49 +#define NetXen_HW_PX_MAP_CRB_I2Q 50 +#define NetXen_HW_PX_MAP_CRB_ROMUSB 51 +#define NetXen_HW_PX_MAP_CRB_CAS3 52 +#define NetXen_HW_PX_MAP_CRB_RPMX0 53 +#define NetXen_HW_PX_MAP_CRB_RPMX8 54 +#define NetXen_HW_PX_MAP_CRB_RPMX9 55 +#define NetXen_HW_PX_MAP_CRB_OCM0 56 +#define NetXen_HW_PX_MAP_CRB_OCM1 57 +#define NetXen_HW_PX_MAP_CRB_SMB 58 +#define NetXen_HW_PX_MAP_CRB_I2C0 59 +#define NetXen_HW_PX_MAP_CRB_I2C1 60 +#define NetXen_HW_PX_MAP_CRB_LPC 61 +#define NetXen_HW_PX_MAP_CRB_PGNC 62 +#define NetXen_HW_PX_MAP_CRB_PGR0 63 +#define NetXen_HW_PX_MAP_CRB_PGR1 4 +#define NetXen_HW_PX_MAP_CRB_PGR2 30 +#define NetXen_HW_PX_MAP_CRB_PGR3 41 + +/* This field defines CRB adr [31:20] of the agents */ +/* */ + +#define NetXen_HW_CRB_HUB_AGT_ADR_MN ((NetXen_HW_H0_CH_HUB_ADR << 7) | NetXen_HW_MN_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PH ((NetXen_HW_H0_CH_HUB_ADR << 7) | NetXen_HW_PH_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_MS ((NetXen_HW_H0_CH_HUB_ADR << 7) | NetXen_HW_MS_CRB_AGT_ADR) + +#define NetXen_HW_CRB_HUB_AGT_ADR_PS ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_PS_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SS ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_SS_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX3 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_RPMX3_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_QMS ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_QMS_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SQS0 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_SQGS0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SQS1 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_SQGS1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SQS2 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_SQGS2_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SQS3 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_SQGS3_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_C2C0 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_C2C0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_C2C1 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_C2C1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX2 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_RPMX2_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX4 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_RPMX4_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX7 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_RPMX7_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX9 ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_RPMX9_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SMB ((NetXen_HW_H1_CH_HUB_ADR << 7) | NetXen_HW_SMB_CRB_AGT_ADR) + +#define NetXen_HW_CRB_HUB_AGT_ADR_NIU ((NetXen_HW_H2_CH_HUB_ADR << 7) | NetXen_HW_NIU_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_I2C0 ((NetXen_HW_H2_CH_HUB_ADR << 7) | NetXen_HW_I2C0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_I2C1 ((NetXen_HW_H2_CH_HUB_ADR << 7) | NetXen_HW_I2C1_CRB_AGT_ADR) + +#define NetXen_HW_CRB_HUB_AGT_ADR_SRE ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_SRE_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_EG ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_EG_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX0 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_RPMX0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_QMN ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_QM_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SQN0 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_SQG0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SQN1 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_SQG1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SQN2 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_SQG2_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SQN3 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_SQG3_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX1 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_RPMX1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX5 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_RPMX5_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX6 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_RPMX6_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_RPMX8 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_RPMX8_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_CAS0 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_CAS0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_CAS1 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_CAS1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_CAS2 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_CAS2_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_CAS3 ((NetXen_HW_H3_CH_HUB_ADR << 7) | NetXen_HW_CAS3_CRB_AGT_ADR) + +#define NetXen_HW_CRB_HUB_AGT_ADR_PGNI ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGNI_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGND ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGND_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGN0 ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGN0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGN1 ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGN1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGN2 ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGN2_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGN3 ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGN3_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGNC ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGNC_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGR0 ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGR0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGR1 ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGR1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGR2 ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGR2_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGR3 ((NetXen_HW_H4_CH_HUB_ADR << 7) | NetXen_HW_PEGR3_CRB_AGT_ADR) + +#define NetXen_HW_CRB_HUB_AGT_ADR_PGSI ((NetXen_HW_H5_CH_HUB_ADR << 7) | NetXen_HW_PEGSI_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGSD ((NetXen_HW_H5_CH_HUB_ADR << 7) | NetXen_HW_PEGSD_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGS0 ((NetXen_HW_H5_CH_HUB_ADR << 7) | NetXen_HW_PEGS0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGS1 ((NetXen_HW_H5_CH_HUB_ADR << 7) | NetXen_HW_PEGS1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGS2 ((NetXen_HW_H5_CH_HUB_ADR << 7) | NetXen_HW_PEGS2_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGS3 ((NetXen_HW_H5_CH_HUB_ADR << 7) | NetXen_HW_PEGS3_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_PGSC ((NetXen_HW_H5_CH_HUB_ADR << 7) | NetXen_HW_PEGSC_CRB_AGT_ADR) + +#define NetXen_HW_CRB_HUB_AGT_ADR_CAM ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_NCM_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_TIMR ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_TMR_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_XDMA ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_XDMA_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_SN ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_SN_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_I2Q ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_I2Q_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_ROMUSB ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_ROMUSB_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_OCM0 ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_OCM0_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_OCM1 ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_OCM1_CRB_AGT_ADR) +#define NetXen_HW_CRB_HUB_AGT_ADR_LPC ((NetXen_HW_H6_CH_HUB_ADR << 7) | NetXen_HW_LPC_CRB_AGT_ADR) + + +/* ------------------------------------------------------------------------ */ +/* IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +/* ------------------------------------------------------------------------ */ +/* MN IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_SRE_MN_IMBUS_PORT_TAG 0x0 +#define NetXen_HW_EG_MN_IMBUS_PORT_TAG 0x1 +#define NetXen_HW_CAS_MN_IMBUS_PORT_TAG 0x2 +#define NetXen_HW_PEG2I_MN_IMBUS_PORT_TAG 0x3 +#define NetXen_HW_PEG2D_MN_IMBUS_PORT_TAG 0x4 +#define NetXen_HW_PEG2D1_MN_IMBUS_PORT_TAG 0x5 +#define NetXen_HW_PH_MN_IMBUS_PORT_TAG 0x6 +#define NetXen_HW_SN_PTM_MN_IMBUS_PORT_TAG 0x7 +#define NetXen_HW_PS_MN_IMBUS_PORT_TAG 0xc +#define NetXen_HW_XDMA_MN_IMBUS_PORT_TAG 0xd +#define NetXen_HW_ROM_MN_IMBUS_PORT_TAG 0xe +#define NetXen_HW_NCM_CAM0_MN_IMBUS_PORT_TAG 0x10 +#define NetXen_HW_NCM_CAM1_MN_IMBUS_PORT_TAG 0x10 +#define NetXen_HW_NCM_CAM2_MN_IMBUS_PORT_TAG 0x11 +#define NetXen_HW_NCM_CAM3_MN_IMBUS_PORT_TAG 0x11 +#define NetXen_HW_NCM_CAM4_MN_IMBUS_PORT_TAG 0x11 +#define NetXen_HW_TMR_MN_IMBUS_PORT_TAG 0x12 +#define NetXen_HW_QM_MN_IMBUS_PORT_TAG 0x13 +#define NetXen_HW_SQG0_FBQ_MN_IMBUS_PORT_TAG 0x14 +#define NetXen_HW_SQG1_FBQ_MN_IMBUS_PORT_TAG 0x15 +#define NetXen_HW_SQG2_FBQ_MN_IMBUS_PORT_TAG 0x16 +#define NetXen_HW_SQG3_FBQ_MN_IMBUS_PORT_TAG 0x17 + +/* ------------------------------------------------------------------------ */ +/* MS IMBus Port Tag Defines - not used for P2 */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_PH_MS_IMBUS_PORT_TAG 0x0 +#define NetXen_HW_PEG2I_MS_IMBUS_PORT_TAG 0x1 +#define NetXen_HW_PEG2D_MS_IMBUS_PORT_TAG 0x2 +#define NetXen_HW_PEG2D1_MS_IMBUS_PORT_TAG 0x3 +#define NetXen_HW_XDMA_MS_IMBUS_PORT_TAG 0x4 +#define NetXen_HW_CAS_MS_IMBUS_PORT_TAG 0x5 +#define NetXen_HW_PS_MS_IMBUS_PORT_TAG 0x6 +#define NetXen_HW_SS_PTM_MS_IMBUS_PORT_TAG 0x7 +#define NetXen_HW_C2C0_MS_IMBUS_PORT_TAG 0xc +#define NetXen_HW_C2C1_MS_IMBUS_PORT_TAG 0xd + +/* ------------------------------------------------------------------------ */ +/* SN IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_QM_SN_IMBUS_PORT_TAG 0x0 +#define NetXen_HW_PS_SN_IMBUS_PORT_TAG 0x2 +#define NetXen_HW_PH_SN_IMBUS_PORT_TAG 0x3 + +#define NetXen_HW_SQG0_FBQ_SN_IMBUS_PORT_TAG 0x4 +#define NetXen_HW_SQG1_FBQ_SN_IMBUS_PORT_TAG 0x5 +#define NetXen_HW_SQG2_FBQ_SN_IMBUS_PORT_TAG 0x6 +#define NetXen_HW_SQG3_FBQ_SN_IMBUS_PORT_TAG 0x7 + +#define NetXen_HW_SRE_SN_IMBUS_PORT_TAG1 0x8 +#define NetXen_HW_EG_SN_IMBUS_PORT_TAG 0x9 +#define NetXen_HW_SRE_SN_IMBUS_PORT_TAG0 0xa + +#define NetXen_HW_NCM_CAM0_SN_IMBUS_PORT_TAG 0xc +#define NetXen_HW_NCM_CAM1_SN_IMBUS_PORT_TAG 0xc +#define NetXen_HW_TMR_SN_IMBUS_PORT_TAG 0xd +#define NetXen_HW_CAS_SN_IMBUS_PORT_TAG 0xe +#define NetXen_HW_NCM_CAM2_SN_IMBUS_PORT_TAG 0xf +#define NetXen_HW_NCM_CAM3_SN_IMBUS_PORT_TAG 0xf +#define NetXen_HW_NCM_CAM4_SN_IMBUS_PORT_TAG 0xf + +#define NetXen_HW_PEGN_I_SN_IMBUS_PORT_TAG 0x10 +#define NetXen_HW_PEGN_D_SN_IMBUS_PORT_TAG 0x11 +#define NetXen_HW_PEGN_D1_SN_IMBUS_PORT_TAG 0x12 +#define NetXen_HW_MS_PTM_SN_IMBUS_PORT_TAG 0x14 + +#define NetXen_HW_PEGS_I_SN_IMBUS_PORT_TAG 0x15 + +/* defunct */ +#define NetXen_HW_SQGS0_FBQ_SN_IMBUS_PORT_TAG 0x8 +#define NetXen_HW_SQGS1_FBQ_SN_IMBUS_PORT_TAG 0x9 +#define NetXen_HW_SQGS2_FBQ_SN_IMBUS_PORT_TAG 0xa +#define NetXen_HW_SQGS3_FBQ_SN_IMBUS_PORT_TAG 0xb +#define NetXen_HW_QMS_SN_IMBUS_PORT_TAG 0x2 +//#define NetXen_HW_PS_SN_IMBUS_PORT_TAG 0xd + +/* ------------------------------------------------------------------------ */ +/* SS IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_QMS_SS_IMBUS_PORT_TAG 0x1 + +#define NetXen_HW_SQGS0_FBQ_SS_IMBUS_PORT_TAG 0x3 +#define NetXen_HW_SQGS1_FBQ_SS_IMBUS_PORT_TAG 0x4 +#define NetXen_HW_SQGS2_FBQ_SS_IMBUS_PORT_TAG 0x5 +#define NetXen_HW_SQGS3_FBQ_SS_IMBUS_PORT_TAG 0x6 +#define NetXen_HW_PS_SS_IMBUS_PORT_TAG 0x7 +#define NetXen_HW_PH_SS_IMBUS_PORT_TAG 0x8 +#define NetXen_HW_MN_PTM_MS_IMBUS_PORT_TAG 0x7 + +/* ------------------------------------------------------------------------ */ +/* NCM IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_SRE_CAM_TAG0 0x0 +#define NetXen_HW_SRE_CAM_TAG1 0x1 +#define NetXen_HW_SRE_CAM_TAG2 0x2 +#define NetXen_HW_PH_CAM_TAG 0x3 +#define NetXen_HW_CAS_CAM_TAG 0x4 +#define NetXen_HW_PS_CAM_TAG 0x5 +#define NetXen_HW_PEGN0_CAM_TAG 0x6 +#define NetXen_HW_PEGN1_CAM_TAG 0x7 +#define NetXen_HW_PEGN2_CAM_TAG 0x9 +#define NetXen_HW_PEGN3_CAM_TAG 0xa +#define NetXen_HW_PEGS0_CAM_TAG 0xb +#define NetXen_HW_PEGS1_CAM_TAG 0xc +#define NetXen_HW_PEGS2_CAM_TAG 0xd +#define NetXen_HW_PEGS3_CAM_TAG 0xe + + +/* ------------------------------------------------------------------------ */ +/* Network QM IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_SRE_PBI_QM_REQ_TAG 0x0 +#define NetXen_HW_SRE_RE1_QM_REQ_TAG 0x1 +#define NetXen_HW_SRE_FLM_QM_REQ_TAG 0x2 +#define NetXen_HW_SRE_RE2_QM_REQ_TAG 0x3 +#define NetXen_HW_EG_QM_REQ_TAG 0x4 +#define NetXen_HW_PEGN0_QM_REQ_TAG 0x5 +#define NetXen_HW_PEGN1_QM_REQ_TAG 0x6 +#define NetXen_HW_PEGN2_QM_REQ_TAG 0x7 +#define NetXen_HW_PEGN3_QM_REQ_TAG 0xE +#define NetXen_HW_I2Q_QM_REQ_TAG 0x8 +#define NetXen_HW_PS_DMA_QMN_REQ_TAG 0x9 +#define NetXen_HW_PS_QMN_REQ_TAG 0xA +#define NetXen_HW_XDMA_QMN_REQ_TAG 0xB +#define NetXen_HW_PCIX_QM_REQ_TAG 0xC +#define NetXen_HW_CAS_QMN_REQ_TAG 0xD +#define NetXen_HW_TMR_QMN_REQ_TAG 0xF +#define NetXen_HW_QMS_QMN_REQ_TAG 0xB +#define NetXen_HW_C2C0_QM_REQ_TAG 0x9 + +/* ------------------------------------------------------------------------ */ +/* Storage QM IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_PEGS0_QMS_REQ_TAG 0x0 +#define NetXen_HW_PEGS1_QMS_REQ_TAG 0x1 +#define NetXen_HW_PEGS2_QMS_REQ_TAG 0x2 +#define NetXen_HW_PEGS3_QMS_REQ_TAG 0xf +/* #define CAS_QMS_REQ_TAG 0x3 - casper uses CAS_QMN_REQ_TAG for both QMN & QMS */ +#define NetXen_HW_C2C1_QMS_REQ_TAG 0x4 +#define NetXen_HW_PS_QMS_REQ_TAG 0x5 +#define NetXen_HW_PH_QMS_REQ_TAG 0x6 +#define NetXen_HW_XDMA_QMS_REQ_TAG 0x9 +#define NetXen_HW_CAS_QMS_REQ_TAG 0xA - casper uses CAS_QMN_REQ_TAG for both QMN & QMS +#define NetXen_HW_QMN_QMS_REQ_TAG 0xE + +/* ------------------------------------------------------------------------ */ +/* OCM0 IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_MN_OCM0_PORT_TAG 0x00 +#define NetXen_HW_SN_OCM0_PORT_TAG 0x01 +#define NetXen_HW_P2D0_OCM0_PORT_TAG 0x02 +#define NetXen_HW_P2D1_OCM0_PORT_TAG 0x03 +#define NetXen_HW_XDMA_OCM0_PORT_TAG 0x04 + +/* ------------------------------------------------------------------------ */ +/* OCM0 IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_MN_OCM1_PORT_TAG 0x00 +#define NetXen_HW_SN_OCM1_PORT_TAG 0x01 +#define NetXen_HW_P2D0_OCM1_PORT_TAG 0x02 +#define NetXen_HW_P2D1_OCM1_PORT_TAG 0x03 +#define NetXen_HW_XDMA_OCM1_PORT_TAG 0x04 + +/* ------------------------------------------------------------------------ */ +/* PCIE IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_MN_PCIE_IMBUS_PORT_TAG 0x0 +#define NetXen_HW_SN_PCIE_IMBUS_PORT_TAG 0x1 +#define NetXen_HW_P2D0_PCIE_IMBUS_PORT_TAG 0x2 +#define NetXen_HW_P2D1_PCIE_IMBUS_PORT_TAG 0x3 +#define NetXen_HW_CAS_PCIE_IMBUS_PORT_TAG 0x4 +#define NetXen_HW_EPG_PCIE_IMBUS_PORT_TAG 0x4 + +/* ------------------------------------------------------------------------ */ +/* SubQueue Number Assignment */ +/* ------------------------------------------------------------------------ */ + +#define NetXen_HW_SQG0_FBQ0_NUM 0x0 +#define NetXen_HW_SQG0_FBQ1_NUM 0x1 +#define NetXen_HW_SQG0_FBQ2_NUM 0x2 +#define NetXen_HW_SQG0_FBQ3_NUM 0x3 + +#define NetXen_HW_SQG1_FBQ0_NUM 0x4 +#define NetXen_HW_SQG1_FBQ1_NUM 0x5 +#define NetXen_HW_SQG1_FBQ2_NUM 0x6 +#define NetXen_HW_SQG1_FBQ3_NUM 0x7 + +#define NetXen_HW_SQG2_FBQ0_NUM 0x8 +#define NetXen_HW_SQG2_FBQ1_NUM 0x9 +#define NetXen_HW_SQG2_FBQ2_NUM 0xA +#define NetXen_HW_SQG2_FBQ3_NUM 0xB + +#define NetXen_HW_SQG3_FBQ0_NUM 0xC +#define NetXen_HW_SQG3_FBQ1_NUM 0xD +#define NetXen_HW_SQG3_FBQ2_NUM 0xE +#define NetXen_HW_SQG3_FBQ3_NUM 0xF + +/* ------------------------------------------------------------------------ */ +/* C2C0 IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_XDMA_C2C0_IMBUS_PORT_TAG 0x0 + +/* ------------------------------------------------------------------------ */ +/* C2C1 IMBus Port Tag Defines */ +/* ------------------------------------------------------------------------ */ +#define NetXen_HW_XDMA_C2C1_IMBUS_PORT_TAG 0x0 + +/* Q SubAgent Field for Locking */ + +/* */ +#define NetXen_HW_NPEG0_VPEG0_SUB_AGNT 0x0 +#define NetXen_HW_NPEG0_VPEG1_SUB_AGNT 0x1 +#define NetXen_HW_NPEG1_VPEG0_SUB_AGNT 0x2 +#define NetXen_HW_NPEG1_VPEG1_SUB_AGNT 0x3 +#define NetXen_HW_NPEG2_VPEG0_SUB_AGNT 0x4 +#define NetXen_HW_NPEG2_VPEG1_SUB_AGNT 0x5 +#define NetXen_HW_CAS_SUB_AGNT 0x6 +#define NetXen_HW_PCI_SUB_AGNT 0x7 +#define NetXen_HW_SPEG0_VPEG0_SUB_AGNT 0x8 +#define NetXen_HW_SPEG0_VPEG1_SUB_AGNT 0x9 +#define NetXen_HW_SPEG1_VPEG0_SUB_AGNT 0xa +#define NetXen_HW_SPEG1_VPEG1_SUB_AGNT 0xb +#define NetXen_HW_SPEG2_VPEG0_SUB_AGNT 0xc +#define NetXen_HW_SPEG2_VPEG1_SUB_AGNT 0xd + +/* + * MAX_RCV_CTX : The number of receive contexts that are available on + * the phantom. + */ +#define MAX_RCV_CTX 1 + +#define NetXen_SRE_INT_STATUS (NetXen_CRB_SRE + 0x00034) +#define NetXen_SRE_PBI_ACTIVE_STATUS (NetXen_CRB_SRE + 0x01014) +#define NetXen_SRE_L1RE_CTL (NetXen_CRB_SRE + 0x03000) +#define NetXen_SRE_L2RE_CTL (NetXen_CRB_SRE + 0x05000) +#define NetXen_SRE_BUF_CTL (NetXen_CRB_SRE + 0x01000) + +#ifdef PCIX +#define NetXen_DMA_BASE(U) (NetXen_CRB_PCIX_HOST + 0x20000 + ((U)<<16)) +#else +#define NetXen_DMA_BASE(U) (NetXen_CRB_PCIX_MD + 0x20000 + ((U)<<16)) +#endif +#define NetXen_DMA_COMMAND(U) (NetXen_DMA_BASE(U) + 0x00008) + +#define NetXen_I2Q_CLR_PCI_HI (NetXen_CRB_I2Q + 0x00034) + +#define PEG_NETWORK_BASE(N) (NetXen_CRB_PEG_NET_0 + (((N)&3) << 20)) +#define CRB_REG_EX_PC 0x3c + +#define ROMUSB_GLB (NetXen_CRB_ROMUSB + 0x00000) +#define ROMUSB_ROM (NetXen_CRB_ROMUSB + 0x10000) + +#define NetXen_ROMUSB_GLB_STATUS (ROMUSB_GLB + 0x0004) +#define NetXen_ROMUSB_GLB_SW_RESET (ROMUSB_GLB + 0x0008) +#define NetXen_ROMUSB_GLB_PAD_GPIO_I (ROMUSB_GLB + 0x000c) +#define NetXen_ROMUSB_GLB_CAS_RST (ROMUSB_GLB + 0x0038) +#define NetXen_ROMUSB_GLB_TEST_MUX_SEL (ROMUSB_GLB + 0x0044) + +#define NetXen_ROMUSB_GPIO(n) (ROMUSB_GLB + 0x60 + (4 * (n))) + +#define NetXen_ROMUSB_ROM_INSTR_OPCODE (ROMUSB_ROM + 0x0004) +#define NetXen_ROMUSB_ROM_ADDRESS (ROMUSB_ROM + 0x0008) +#define NetXen_ROMUSB_ROM_ABYTE_CNT (ROMUSB_ROM + 0x0010) +#define NetXen_ROMUSB_ROM_DUMMY_BYTE_CNT (ROMUSB_ROM + 0x0014) +#define NetXen_ROMUSB_ROM_RDATA (ROMUSB_ROM + 0x0018) + +#define NetXen_PCI_CRB_WINDOWSIZE 0x00100000 /* all are 1MB windows */ +#define NetXen_PCI_CRB_WINDOW(A) (NetXen_PCI_CRBSPACE + (A)*NetXen_PCI_CRB_WINDOWSIZE) + +#define NetXen_CRB_NIU NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_NIU) +#define NetXen_CRB_SRE NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_SRE) +#define NetXen_CRB_ROMUSB NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_ROMUSB) +#define NetXen_CRB_I2Q NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_I2Q) +#define NetXen_CRB_MAX NetXen_PCI_CRB_WINDOW(64) + +#define NetXen_CRB_PCIX_HOST NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PH) +#define NetXen_CRB_PCIX_HOST2 NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PH2) +#define NetXen_CRB_PEG_NET_0 NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PGN0) +#define NetXen_CRB_PEG_NET_1 NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PGN1) +#define NetXen_CRB_PEG_NET_2 NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PGN2) +#define NetXen_CRB_PEG_NET_3 NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PGN3) +#define NetXen_CRB_PEG_NET_D NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PGND) +#define NetXen_CRB_PEG_NET_I NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PGNI) +#define NetXen_CRB_DDR_NET NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_MN) + +#define NetXen_CRB_PCIX_MD NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_PS) +#define NetXen_CRB_PCIE NetXen_CRB_PCIX_MD + +#define ISR_INT_VECTOR (NetXen_PCIX_PS_REG(PCIX_INT_VECTOR)) +#define ISR_INT_MASK (NetXen_PCIX_PS_REG(PCIX_INT_MASK)) +#define ISR_INT_MASK_SLOW (NetXen_PCIX_PS_REG(PCIX_INT_MASK)) +#define ISR_INT_TARGET_STATUS (NetXen_PCIX_PS_REG(PCIX_TARGET_STATUS)) +#define ISR_INT_TARGET_MASK (NetXen_PCIX_PS_REG(PCIX_TARGET_MASK)) + +#define NetXen_PCI_MAPSIZE 128 /* we're mapping 128MB of mem on the PCI bus */ +#define NetXen_PCI_DDR_NET (unsigned long)0x00000000 +#define NetXen_PCI_DDR_NET_MAX (unsigned long)0x01ffffff +#define NetXen_PCI_QDR_NET (unsigned long)0x04000000 +#define NetXen_PCI_QDR_NET_MAX (unsigned long)0x043fffff +#define NetXen_PCI_DIRECT_CRB (unsigned long)0x04400000 +#define NetXen_PCI_DIRECT_CRB_MAX (unsigned long)0x047fffff +#define NetXen_PCI_CAMQM_MAX (unsigned long)0x04ffffff +#define NetXen_PCI_OCM0 (unsigned long)0x05000000 +#define NetXen_PCI_OCM0_MAX (unsigned long)0x050fffff +#define NetXen_PCI_OCM1 (unsigned long)0x05100000 +#define NetXen_PCI_OCM1_MAX (unsigned long)0x051fffff +#define NetXen_PCI_CRBSPACE (unsigned long)0x06000000 + +#define NetXen_CRB_CAM NetXen_PCI_CRB_WINDOW(NetXen_HW_PX_MAP_CRB_CAM) + +#define NetXen_ADDR_DDR_NET (0x0000000000000000ULL) +#define NetXen_ADDR_DDR_NET_MAX (0x000000000fffffffULL) +#define NetXen_ADDR_OCM0 (0x0000000200000000ULL) +#define NetXen_ADDR_OCM0_MAX (0x00000002000fffffULL) +#define NetXen_ADDR_OCM1 (0x0000000200400000ULL) +#define NetXen_ADDR_OCM1_MAX (0x00000002004fffffULL) +#define NetXen_ADDR_QDR_NET (0x0000000300000000ULL) +#define NetXen_ADDR_QDR_NET_MAX (0x00000003003fffffULL) + +int netxen_crb_read(unsigned long off, void *data); +native_t netxen_crb_read_val(unsigned long off); +int netxen_crb_write(unsigned long off, void *data); +int netxen_crb_writelit(unsigned long off, int data); +int netxen_imb_read(unsigned long off, void *data); +int netxen_imb_write(unsigned long off, void *data); +int netxen_imb_writelit64(unsigned long off, __uint64_t data); +int netxen_data_read(unsigned long long off, void *data); +int netxen_data_write(unsigned long long off, void *data); +int netxen_data_writelit64(unsigned long long off, __uint64_t data); +int netxen_db_write(unsigned long long off, int size, void *data); +unsigned long netxen_xport_lock(void); +void netxen_xport_unlock(unsigned long); + +#define NetXen_CRB_READ_VAL(ADDR) netxen_crb_read_val((ADDR)) +#define NetXen_CRB_READ(ADDR,VALUE) netxen_crb_read((ADDR),(netxen_crbword_t *)(VALUE)) +#define NetXen_CRB_READ_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_crb_read(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_CRB_WRITE_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_crb_write(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_CRB_WRITELIT(ADDR, VALUE) \ + do { \ + netxen_crb_writelit(ADDR, VALUE); \ + } while(0) +#define NetXen_CRB_WRITE(ADDR, VALUE) \ + do { \ + netxen_crb_write(ADDR, VALUE); \ + } while(0) +#define NetXen_CRB_WRITELIT_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_crb_writelit(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_CRB_READ_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_crb_read(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) +#define NetXen_CRB_WRITE_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_crb_write(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) +#define NetXen_CRB_WRITELIT_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_crb_writelit(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) +#define NetXen_IMB_READ_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_imb_read(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_IMB_WRITE_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_imb_write(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_IMB_WRITELIT_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_imb_writelit64(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_IMB_READ_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_imb_read(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) +#define NetXen_IMB_WRITE_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_imb_write(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) +#define NetXen_IMB_WRITELIT_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_imb_writelit64(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) +#define NetXen_DATA_READ_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_data_read(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_DATA_WRITE_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_data_write(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_DATA_WRITELIT_CHECK(ADDR, VALUE) \ + do { \ + if (netxen_data_writelit64(ADDR, VALUE)) return -1; \ + } while(0) +#define NetXen_DATA_READ_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_data_read(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) +#define NetXen_DATA_WRITE_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_data_write(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) +#define NetXen_DATA_WRITELIT_PANIC(ADDR, VALUE, ERRSTR) \ + do { \ + if (netxen_data_writelit64(ADDR, VALUE)) panic(ERRSTR); \ + } while(0) + +typedef __uint8_t netxen_ethernet_macaddr_t[6]; + +/* Nibble or Byte mode for phy interface (GbE mode only) */ +typedef enum { + NetXen_NIU_10_100_MB = 0, + NetXen_NIU_1000_MB +} netxen_niu_gbe_ifmode_t; + +/* + * NIU GB MAC Config Register 0 (applies to GB0, GB1, GB2, GB3) + */ +typedef struct { + netxen_crbword_t + tx_enable:1, /* 1:enable frame xmit, 0:disable */ + tx_synched:1, /* R/O: xmit enable synched to xmit stream */ + rx_enable:1, /* 1:enable frame recv, 0:disable */ + rx_synched:1, /* R/O: recv enable synched to recv stream */ + tx_flowctl:1, /* 1:enable pause frame generation, 0:disable */ + rx_flowctl:1, /* 1:act on recv'd pause frames, 0:ignore */ + rsvd1:2, + loopback:1, /* 1:loop MAC xmits to MAC recvs, 0:normal */ + rsvd2:7, + tx_reset_pb:1, /* 1:reset frame xmit protocol blk, 0:no-op */ + rx_reset_pb:1, /* 1:reset frame recv protocol blk, 0:no-op */ + tx_reset_mac:1, /* 1:reset data/ctl multiplexer blk, 0:no-op */ + rx_reset_mac:1, /* 1:reset ctl frames & timers blk, 0:no-op */ + rsvd3:11, + soft_reset:1; /* 1:reset the MAC and the SERDES, 0:no-op */ +} netxen_niu_gb_mac_config_0_t; + +/* + * NIU GB MAC Config Register 1 (applies to GB0, GB1, GB2, GB3) + */ +typedef struct { + netxen_crbword_t + duplex:1, /* 1:full duplex mode, 0:half duplex */ + crc_enable:1, /* 1:append CRC to xmit frames, 0:dont append */ + padshort:1, /* 1:pad short frames and add CRC, 0:dont pad */ + rsvd1:1, + checklength:1, /* 1:check framelen with actual, 0:dont check */ + hugeframes:1, /* 1:allow oversize xmit frames, 0:dont allow */ + rsvd2:2, + intfmode:2, /* 01:nibble (10/100), 10:byte (1000) */ + rsvd3:2, + preamblelen:4, /* preamble field length in bytes, default 7 */ + rsvd4:16; +} netxen_niu_gb_mac_config_1_t; + +/* + * NIU GB GMII Mode Register (applies to GB0, GB1, GB2, GB3) + * To change the mode, turn off the existing mode, then turn on the new mode. + */ +typedef struct { + netxen_crbword_t + gmiimode:1, /* 1:GMII mode, 0:xmit clk taken from SERDES */ + rsvd:29; +} netxen_niu_gb_gmii_mode_t; + +/* + * NIU GB MII Mode Register (applies to GB0, GB1, GB2, GB3) + * To change the mode, turn off the existing mode, then turn on the new mode. + */ +typedef struct { + netxen_crbword_t + miimode:1, /* 1:MII mode, 0:xmit clk provided to SERDES */ + rsvd:29; +} netxen_niu_gb_mii_mode_t; + +/* + * NIU GB Station Address High Register + * NOTE: this value is in network byte order. + */ +typedef struct { + netxen_crbword_t + address:32; /* station address [47:16] */ +} netxen_niu_gb_station_address_high_t; + +/* + * NIU GB Station Address Low Register + * NOTE: this value is in network byte order. + */ +typedef struct { + netxen_crbword_t + rsvd:16, + address:16; /* station address [15:0] */ +} netxen_niu_gb_station_address_low_t; + +/* + * NIU GB MII Mgmt Config Register (applies to GB0, GB1, GB2, GB3) + */ +typedef struct { + netxen_crbword_t + clockselect:3, /* 0:clk/4, 1:clk/4, 2:clk/6, 3:clk/8 */ + /* 4:clk/10, 5:clk/14, 6:clk/20, 7:clk/28 */ + rsvd1:1, + nopreamble:1, /* 1:suppress preamble generation, 0:normal */ + scanauto:1, /* ???? */ + rsvd2:25, + reset:1; /* 1:reset MII mgmt, 0:no-op */ +} netxen_niu_gb_mii_mgmt_config_t; + +/* + * NIU GB MII Mgmt Command Register (applies to GB0, GB1, GB2, GB3) + */ +typedef struct { + netxen_crbword_t + read_cycle:1, /* 1:perform single read cycle, 0:no-op */ + scan_cycle:1, /* 1:perform continuous read cycles, 0:no-op */ + rsvd:30; +} netxen_niu_gb_mii_mgmt_command_t; + +/* + * NIU GB MII Mgmt Address Register (applies to GB0, GB1, GB2, GB3) + */ +typedef struct { + netxen_crbword_t + reg_addr:5, /* which mgmt register we want to talk to */ + rsvd1:3, + phy_addr:5, /* which PHY to talk to (0 is reserved) */ + rsvd:19; +} netxen_niu_gb_mii_mgmt_address_t; + +/* + * NIU GB MII Mgmt Control Register (applies to GB0, GB1, GB2, GB3) + * Write-only register. + */ +typedef struct { + netxen_crbword_t + data:16, /* do MII mgmt write cycle with this data */ + rsvd:16; +} netxen_niu_gb_mii_mgmt_control_t; + +/* + * NIU GB MII Mgmt Status Register (applies to GB0, GB1, GB2, GB3) + * Read-only register. + */ +typedef struct { + netxen_crbword_t + data:16, /* after MII mgmt read cycle, here's the data */ + rsvd:16; +} netxen_niu_gb_mii_mgmt_status_t; + +/* + * NIU GB MII Mgmt Indicators Register (applies to GB0, GB1, GB2, GB3) + * Read-only register. + */ +typedef struct { + netxen_crbword_t + busy:1, /* 1:performing an MII mgmt cycle, 0:idle */ + scanning:1, /* 1:scan operation in progress, 0:idle */ + notvalid:1, /* 1:mgmt result data not yet valid, 0:idle */ + rsvd:29; +} netxen_niu_gb_mii_mgmt_indicators_t; + +/* + * PHY-Specific MII control/status registers. + */ +typedef enum { + NetXen_NIU_GB_MII_MGMT_ADDR_CONTROL = 0, + NetXen_NIU_GB_MII_MGMT_ADDR_STATUS = 1, + NetXen_NIU_GB_MII_MGMT_ADDR_PHY_ID_0 = 2, + NetXen_NIU_GB_MII_MGMT_ADDR_PHY_ID_1 = 3, + NetXen_NIU_GB_MII_MGMT_ADDR_AUTONEG = 4, + NetXen_NIU_GB_MII_MGMT_ADDR_LNKPART = 5, + NetXen_NIU_GB_MII_MGMT_ADDR_AUTONEG_MORE = 6, + NetXen_NIU_GB_MII_MGMT_ADDR_NEXTPAGE_XMIT = 7, + NetXen_NIU_GB_MII_MGMT_ADDR_LNKPART_NEXTPAGE = 8, + NetXen_NIU_GB_MII_MGMT_ADDR_1000BT_CONTROL = 9, + NetXen_NIU_GB_MII_MGMT_ADDR_1000BT_STATUS = 10, + NetXen_NIU_GB_MII_MGMT_ADDR_EXTENDED_STATUS = 15, + NetXen_NIU_GB_MII_MGMT_ADDR_PHY_CONTROL = 16, + NetXen_NIU_GB_MII_MGMT_ADDR_PHY_STATUS = 17, + NetXen_NIU_GB_MII_MGMT_ADDR_INT_ENABLE = 18, + NetXen_NIU_GB_MII_MGMT_ADDR_INT_STATUS = 19, + NetXen_NIU_GB_MII_MGMT_ADDR_PHY_CONTROL_MORE = 20, + NetXen_NIU_GB_MII_MGMT_ADDR_RECV_ERROR_COUNT = 21, + NetXen_NIU_GB_MII_MGMT_ADDR_LED_CONTROL = 24, + NetXen_NIU_GB_MII_MGMT_ADDR_LED_OVERRIDE = 25, + NetXen_NIU_GB_MII_MGMT_ADDR_PHY_CONTROL_MORE_YET = 26, + NetXen_NIU_GB_MII_MGMT_ADDR_PHY_STATUS_MORE = 27 +} netxen_niu_phy_register_t; + +/* + * PHY-Specific Status Register (reg 17). + */ +typedef struct { + netxen_crbword_t + jabber:1, /* 1:jabber detected, 0:not */ + polarity:1, /* 1:polarity reversed, 0:normal */ + recvpause:1, /* 1:receive pause enabled, 0:disabled */ + xmitpause:1, /* 1:transmit pause enabled, 0:disabled */ + energydetect:1, /* 1:sleep, 0:active */ + downshift:1, /* 1:downshift, 0:no downshift */ + crossover:1, /* 1:MDIX (crossover), 0:MDI (no crossover) */ + cablelen:3, /* not valid in 10Mb/s mode */ + /* 0:<50m, 1:50-80m, 2:80-110m, 3:110-140m, 4:>140m */ + link:1, /* 1:link up, 0:link down */ + resolved:1, /* 1:speed and duplex resolved, 0:not yet */ + pagercvd:1, /* 1:page received, 0:page not received */ + duplex:1, /* 1:full duplex, 0:half duplex */ + speed:2, /* 0:10Mb/s, 1:100Mb/s, 2:1000Mb/s, 3:rsvd */ + rsvd:16; +} netxen_niu_phy_status_t; + +/* + * Interrupt Register definition + * This definition applies to registers 18 and 19 (int enable and int status). + */ +typedef struct { + netxen_crbword_t + jabber:1, + polarity_changed:1, + reserved:2, + energy_detect:1, + downshift:1, + mdi_xover_changed:1, + fifo_over_underflow:1, + false_carrier:1, + symbol_error:1, + link_status_changed:1, + autoneg_completed:1, + page_received:1, + duplex_changed:1, + speed_changed:1, + autoneg_error:1, + rsvd:16; +} netxen_niu_phy_interrupt_t; + +/* + * NIU Mode Register. + */ +typedef struct { + netxen_crbword_t + enable_fc:1, /* enable FibreChannel */ + enable_ge:1, /* enable 10/100/1000 Ethernet */ + enable_xgb:1, /* enable 10Gb Ethernet */ + rsvd:29; +} netxen_niu_control_t; + +/* Promiscous mode options (GbE mode only) */ +typedef enum { + NetXen_NIU_PROMISCOUS_MODE = 0, + NetXen_NIU_NON_PROMISCOUS_MODE +} netxen_niu_prom_mode_t; + +/* + * NIU GB Drop CRC Register + */ +typedef struct { + netxen_crbword_t + drop_gb0:1, /* 1:drop pkts with bad CRCs, 0:pass them on */ + drop_gb1:1, /* 1:drop pkts with bad CRCs, 0:pass them on */ + drop_gb2:1, /* 1:drop pkts with bad CRCs, 0:pass them on */ + drop_gb3:1, /* 1:drop pkts with bad CRCs, 0:pass them on */ + rsvd:28; +} netxen_niu_gb_drop_crc_t; + +/* + * NIU XG MAC Config Register + */ +typedef struct { + netxen_crbword_t + tx_enable:1, /* 1:enable frame xmit, 0:disable */ + rsvd1:1, + rx_enable:1, /* 1:enable frame recv, 0:disable */ + rsvd2:1, + soft_reset:1, /* 1:reset the MAC , 0:no-op */ + rsvd3:22, + xaui_framer_reset:1, + xaui_rx_reset:1, + xaui_tx_reset:1, + xg_ingress_afifo_reset:1, + xg_egress_afifo_reset:1; +} netxen_niu_xg_mac_config_0_t; + +/* Generic init routine (used for FPGA, superceded by port enables below) */ +void netxen_niu_init(int test); + +/* Set promiscuous mode for a GbE interface */ +native_t netxen_niu_set_promiscuous_mode(native_t port, netxen_niu_prom_mode_t mode); +native_t netxen_niu_xg_set_promiscuous_mode(native_t port, netxen_niu_prom_mode_t mode); + +/* get/set the MAC address for a given MAC */ +int netxen_niu_macaddr_get(int port, netxen_ethernet_macaddr_t *addr); +int netxen_niu_macaddr_set(int port, netxen_ethernet_macaddr_t addr); + +/* XG versons */ +int netxen_niu_xg_macaddr_get(int port, netxen_ethernet_macaddr_t *addr); +int netxen_niu_xg_macaddr_set(int port, netxen_ethernet_macaddr_t addr); + +/* Generic enable for GbE ports. Will detect the speed of the link. */ +long netxen_niu_gbe_init_port(long port); + +/* Disable a GbE interface */ +native_t netxen_niu_disable_gbe_port(native_t port); + +native_t netxen_niu_disable_xg_port(native_t port); + +#define NetXen_NIU_PHY_WAITLEN 200000 /* 200ms delay in each loop */ +#define NetXen_NIU_PHY_WAITMAX 50 /* 10 seconds before we give up */ +#define NetXen_NIU_MAX_GBE_PORTS 4 + +#define NetXen_NIU_MODE (NetXen_CRB_NIU + 0x00000) + +#define NetXen_NIU_XG_SINGLE_TERM (NetXen_CRB_NIU + 0x00004) +#define NetXen_NIU_XG_DRIVE_HI (NetXen_CRB_NIU + 0x00008) +#define NetXen_NIU_XG_DRIVE_LO (NetXen_CRB_NIU + 0x0000c) +#define NetXen_NIU_XG_DTX (NetXen_CRB_NIU + 0x00010) +#define NetXen_NIU_XG_DEQ (NetXen_CRB_NIU + 0x00014) +#define NetXen_NIU_XG_WORD_ALIGN (NetXen_CRB_NIU + 0x00018) +#define NetXen_NIU_XG_RESET (NetXen_CRB_NIU + 0x0001c) +#define NetXen_NIU_XG_POWER_DOWN (NetXen_CRB_NIU + 0x00020) +#define NetXen_NIU_XG_RESET_PLL (NetXen_CRB_NIU + 0x00024) +#define NetXen_NIU_XG_SERDES_LOOPBACK (NetXen_CRB_NIU + 0x00028) +#define NetXen_NIU_XG_DO_BYTE_ALIGN (NetXen_CRB_NIU + 0x0002c) +#define NetXen_NIU_XG_TX_ENABLE (NetXen_CRB_NIU + 0x00030) +#define NetXen_NIU_XG_RX_ENABLE (NetXen_CRB_NIU + 0x00034) +#define NetXen_NIU_XG_STATUS (NetXen_CRB_NIU + 0x00038) +#define NetXen_NIU_XG_PAUSE_THRESHOLD (NetXen_CRB_NIU + 0x0003c) +#define NetXen_NIU_INT_MASK (NetXen_CRB_NIU + 0x00040) +#define NetXen_NIU_ACTIVE_INT (NetXen_CRB_NIU + 0x00044) +#define NetXen_NIU_MASKABLE_INT (NetXen_CRB_NIU + 0x00048) + +#define NetXen_NIU_STRAP_VALUE_SAVE_HIGHER (NetXen_CRB_NIU + 0x0004c) + +#define NetXen_NIU_GB_SERDES_RESET (NetXen_CRB_NIU + 0x00050) +#define NetXen_NIU_GB0_GMII_MODE (NetXen_CRB_NIU + 0x00054) +#define NetXen_NIU_GB0_MII_MODE (NetXen_CRB_NIU + 0x00058) +#define NetXen_NIU_GB1_GMII_MODE (NetXen_CRB_NIU + 0x0005c) +#define NetXen_NIU_GB1_MII_MODE (NetXen_CRB_NIU + 0x00060) +#define NetXen_NIU_GB2_GMII_MODE (NetXen_CRB_NIU + 0x00064) +#define NetXen_NIU_GB2_MII_MODE (NetXen_CRB_NIU + 0x00068) +#define NetXen_NIU_GB3_GMII_MODE (NetXen_CRB_NIU + 0x0006c) +#define NetXen_NIU_GB3_MII_MODE (NetXen_CRB_NIU + 0x00070) +#define NetXen_NIU_REMOTE_LOOPBACK (NetXen_CRB_NIU + 0x00074) +#define NetXen_NIU_GB0_HALF_DUPLEX (NetXen_CRB_NIU + 0x00078) +#define NetXen_NIU_GB1_HALF_DUPLEX (NetXen_CRB_NIU + 0x0007c) +#define NetXen_NIU_RESET_SYS_FIFOS (NetXen_CRB_NIU + 0x00088) +#define NetXen_NIU_GB_CRC_DROP (NetXen_CRB_NIU + 0x0008c) +#define NetXen_NIU_GB_DROP_WRONGADDR (NetXen_CRB_NIU + 0x00090) +#define NetXen_NIU_TEST_MUX_CTL (NetXen_CRB_NIU + 0x00094) +#define NetXen_NIU_XG_PAUSE_CTL (NetXen_CRB_NIU + 0x00098) +#define NetXen_NIU_XG_PAUSE_LEVEL (NetXen_CRB_NIU + 0x000dc) +#define NetXen_NIU_XG_SEL (NetXen_CRB_NIU + 0x00128) + +#define NetXen_NIU_FC_RX_STATUS(I) (NetXen_CRB_NIU + 0x10000 + (I)*0x10000) +#define NetXen_NIU_FC_RX_COMMA_DETECT(I) (NetXen_CRB_NIU + 0x10004 + (I)*0x10000) +#define NetXen_NIU_FC_LASER_UNSAFE(I) (NetXen_CRB_NIU + 0x10008 + (I)*0x10000) +#define NetXen_NIU_FC_TX_CONTROL(I) (NetXen_CRB_NIU + 0x1000c + (I)*0x10000) +#define NetXen_NIU_FC_ON_OFFLINE_CTL(I) (NetXen_CRB_NIU + 0x10010 + (I)*0x10000) +#define NetXen_NIU_FC_PORT_ACTIVE_STAT(I) (NetXen_CRB_NIU + 0x10014 + (I)*0x10000) +#define NetXen_NIU_FC_PORT_INACTIVE_STAT(I)(NetXen_CRB_NIU + 0x10018 + (I)*0x10000) +#define NetXen_NIU_FC_LINK_FAILURE_CNT(I) (NetXen_CRB_NIU + 0x1001c + (I)*0x10000) +#define NetXen_NIU_FC_LOSS_SYNC_CNT(I) (NetXen_CRB_NIU + 0x10020 + (I)*0x10000) +#define NetXen_NIU_FC_LOSS_SIGNAL_CNT(I) (NetXen_CRB_NIU + 0x10024 + (I)*0x10000) +#define NetXen_NIU_FC_PRIM_SEQ_ERR_CNT(I) (NetXen_CRB_NIU + 0x10028 + (I)*0x10000) +#define NetXen_NIU_FC_INVLD_TX_WORD_CNT(I) (NetXen_CRB_NIU + 0x1002c + (I)*0x10000) +#define NetXen_NIU_FC_INVLD_CRC_CNT(I) (NetXen_CRB_NIU + 0x10030 + (I)*0x10000) +#define NetXen_NIU_FC_RX_CELL_CNT(I) (NetXen_CRB_NIU + 0x10034 + (I)*0x10000) +#define NetXen_NIU_FC_TX_CELL_CNT(I) (NetXen_CRB_NIU + 0x10038 + (I)*0x10000) +#define NetXen_NIU_FC_B2B_CREDIT(I) (NetXen_CRB_NIU + 0x1003c + (I)*0x10000) +#define NetXen_NIU_FC_LOGIN_DONE(I) (NetXen_CRB_NIU + 0x10040 + (I)*0x10000) +#define NetXen_NIU_FC_OPERATING_SPEED(I) (NetXen_CRB_NIU + 0x10044 + (I)*0x10000) + +#define NetXen_NIU_GB_MAC_CONFIG_0(I) (NetXen_CRB_NIU + 0x30000 + (I)*0x10000) +#define NetXen_NIU_GB_MAC_CONFIG_1(I) (NetXen_CRB_NIU + 0x30004 + (I)*0x10000) +#define NetXen_NIU_GB_MAC_IPG_IFG(I) (NetXen_CRB_NIU + 0x30008 + (I)*0x10000) +#define NetXen_NIU_GB_HALF_DUPLEX_CTRL(I) (NetXen_CRB_NIU + 0x3000c + (I)*0x10000) +#define NetXen_NIU_GB_MAX_FRAME_SIZE(I) (NetXen_CRB_NIU + 0x30010 + (I)*0x10000) +#define NetXen_NIU_GB_TEST_REG(I) (NetXen_CRB_NIU + 0x3001c + (I)*0x10000) +#define NetXen_NIU_GB_MII_MGMT_CONFIG(I) (NetXen_CRB_NIU + 0x30020 + (I)*0x10000) +#define NetXen_NIU_GB_MII_MGMT_COMMAND(I) (NetXen_CRB_NIU + 0x30024 + (I)*0x10000) +#define NetXen_NIU_GB_MII_MGMT_ADDR(I) (NetXen_CRB_NIU + 0x30028 + (I)*0x10000) +#define NetXen_NIU_GB_MII_MGMT_CTRL(I) (NetXen_CRB_NIU + 0x3002c + (I)*0x10000) +#define NetXen_NIU_GB_MII_MGMT_STATUS(I) (NetXen_CRB_NIU + 0x30030 + (I)*0x10000) +#define NetXen_NIU_GB_MII_MGMT_INDICATE(I) (NetXen_CRB_NIU + 0x30034 + (I)*0x10000) +#define NetXen_NIU_GB_INTERFACE_CTRL(I) (NetXen_CRB_NIU + 0x30038 + (I)*0x10000) +#define NetXen_NIU_GB_INTERFACE_STATUS(I) (NetXen_CRB_NIU + 0x3003c + (I)*0x10000) +#define NetXen_NIU_GB_STATION_ADDR_0(I) (NetXen_CRB_NIU + 0x30040 + (I)*0x10000) +#define NetXen_NIU_GB_STATION_ADDR_1(I) (NetXen_CRB_NIU + 0x30044 + (I)*0x10000) + + +#define NetXen_NIU_XGE_CONFIG_0 (NetXen_CRB_NIU + 0x70000) +#define NetXen_NIU_XGE_CONFIG_1 (NetXen_CRB_NIU + 0x70004) +#define NetXen_NIU_XGE_IPG (NetXen_CRB_NIU + 0x70008) +#define NetXen_NIU_XGE_STATION_ADDR_0_HI (NetXen_CRB_NIU + 0x7000c) +#define NetXen_NIU_XGE_STATION_ADDR_0_1 (NetXen_CRB_NIU + 0x70010) +#define NetXen_NIU_XGE_STATION_ADDR_1_LO (NetXen_CRB_NIU + 0x70014) +#define NetXen_NIU_XGE_STATUS (NetXen_CRB_NIU + 0x70018) +#define NetXen_NIU_XGE_MAX_FRAME_SIZE (NetXen_CRB_NIU + 0x7001c) +#define NetXen_NIU_XGE_PAUSE_FRAME_VALUE (NetXen_CRB_NIU + 0x70020) +#define NetXen_NIU_XGE_TX_BYTE_CNT (NetXen_CRB_NIU + 0x70024) +#define NetXen_NIU_XGE_TX_FRAME_CNT (NetXen_CRB_NIU + 0x70028) +#define NetXen_NIU_XGE_RX_BYTE_CNT (NetXen_CRB_NIU + 0x7002c) +#define NetXen_NIU_XGE_RX_FRAME_CNT (NetXen_CRB_NIU + 0x70030) +#define NetXen_NIU_XGE_AGGR_ERROR_CNT (NetXen_CRB_NIU + 0x70034) +#define NetXen_NIU_XGE_MULTICAST_FRAME_CNT (NetXen_CRB_NIU + 0x70038) +#define NetXen_NIU_XGE_UNICAST_FRAME_CNT (NetXen_CRB_NIU + 0x7003c) +#define NetXen_NIU_XGE_CRC_ERROR_CNT (NetXen_CRB_NIU + 0x70040) +#define NetXen_NIU_XGE_OVERSIZE_FRAME_ERR (NetXen_CRB_NIU + 0x70044) +#define NetXen_NIU_XGE_UNDERSIZE_FRAME_ERR (NetXen_CRB_NIU + 0x70048) +#define NetXen_NIU_XGE_LOCAL_ERROR_CNT (NetXen_CRB_NIU + 0x7004c) +#define NetXen_NIU_XGE_REMOTE_ERROR_CNT (NetXen_CRB_NIU + 0x70050) +#define NetXen_NIU_XGE_CONTROL_CHAR_CNT (NetXen_CRB_NIU + 0x70054) +#define NetXen_NIU_XGE_PAUSE_FRAME_CNT (NetXen_CRB_NIU + 0x70058) + +/* XG Link status */ +#define XG_LINK_UP 0x10 +#define XG_LINK_DOWN 0x20 + +#define NetXen_CAM_RAM_BASE (NetXen_CRB_CAM + 0x02000) +#define NetXen_CAM_RAM(reg) (NetXen_CAM_RAM_BASE + (reg)) +#define NetXen_FW_VERSION_MAJOR (NetXen_CAM_RAM(0x150)) +#define NetXen_FW_VERSION_MINOR (NetXen_CAM_RAM(0x154)) +#define NetXen_FW_VERSION_SUB (NetXen_CAM_RAM(0x158)) + +/* + * CRB window register. + */ +typedef struct { + netxen_crbword_t rsvd1:25, + addrbit:1, /* bit 25 of CRB address */ + rsvd2:6; +} netxen_pcix_crb_window_t; + +#define PCIX_PS_OP_ADDR_LO (0x10000) /* Used for PS PCI Memory access */ +#define PCIX_PS_OP_ADDR_HI (0x10004) /* via CRB (PS side only) */ + +#define PCIX_INT_VECTOR (0x10100) +#define PCIX_INT_MASK (0x10104) + +#define PCIX_MN_WINDOW (0x10200) +#define PCIX_MS_WINDOW (0x10204) +#define PCIX_SN_WINDOW (0x10208) +#define PCIX_CRB_WINDOW (0x10210) + +#define PCIX_TARGET_STATUS (0x10118) +#define PCIX_TARGET_MASK (0x10128) + +#define PCIX_MSI_F0 (0x13000) + +#define PCIX_PS_MEM_SPACE (0x90000) + +#define NetXen_PCIX_PH_REG(reg) (NetXen_CRB_PCIE + (reg)) +#define NetXen_PCIX_PS_REG(reg) (NetXen_CRB_PCIX_MD + (reg)) + +#define NetXen_PCIE_REG(reg) (NetXen_CRB_PCIE + (reg)) + +#define PCIE_IMBUS_CONTROL (0x101b8) +#define PCIE_MAX_DMA_XFER_SIZE (0x1404c) + +#define PCIE_DCR 0x00d8 + +#define PCIE_TGT_SPLIT_CHICKEN (0x12080) + +#define PCIE_MAX_MASTER_SPLIT (0x14048) + +#endif /* __NetXen_INC_H */
- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html