diff -Naru linux-2.6.16_orig/drivers/net/netxen/netxen_brdcfg.h linux-2.6.16/drivers/net/netxen/netxen_brdcfg.h --- linux-2.6.16_orig/drivers/net/netxen/netxen_brdcfg.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.16/drivers/net/netxen/netxen_brdcfg.h 2006-03-24 14:13:57.000000000 -0800 @@ -0,0 +1,279 @@ +/* + * 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 + */ +/****************************************************************************** +* netxen_bdinfo.h - Phantom board information stored in flash. +* +******************************************************************************* +*/ +#ifndef __NetXen_BRDINFO_H +#define __NetXen_BRDINFO_H + +/* The version of the main data structure */ +#define NetXen_BDINFO_VERSION 1 + +/* Magic number to let user know flash is programmed */ +#define NetXen_BDINFO_MAGIC 0x12345678 + +/* Max number of Gig ports on a Phantom board */ +#define NetXen_MAX_PORTS 4 + +/* MN */ +#define NetXen_MEM_MAX_SLOTS 2 + +typedef enum { + NetXen_BRDTYPE_P1_BD = 0x0000, + NetXen_BRDTYPE_P1_SB = 0x0001, + NetXen_BRDTYPE_P1_SMAX = 0x0002, + NetXen_BRDTYPE_P1_SOCK = 0x0003, + + NetXen_BRDTYPE_P2_SOCK_31 = 0x0008, + NetXen_BRDTYPE_P2_SOCK_35 = 0x0009, + NetXen_BRDTYPE_P2_SB35_4G = 0x000a, + NetXen_BRDTYPE_P2_SB31_10G = 0x000b, + NetXen_BRDTYPE_P2_SB31_2G = 0x000c, + + NetXen_BRDTYPE_P2_SB31_10G_IMEZ = 0x000d, + NetXen_BRDTYPE_P2_SB31_10G_HMEZ = 0x000e, + NetXen_BRDTYPE_P2_SB31_10G_CX4 = 0x000f + +} netxen_brdtype_t; + +typedef enum { + NetXen_BRDMFG_INVENTEC=1 +} netxen_brdmfg; + +typedef struct { + union { + struct { + U16 brdnum; + netxen_brdtype_t brdtype; + }; + U32 brdid; + }; +} netxen_brdid_t; + +#define CHIP_LOT_FAST 1 +#define CHIP_LOT_TYPICAL 2 +#define CHIP_LOT_SLOW 3 + +#define CHIP_PKG_31x31 1 +#define CHIP_PKG_35x35 2 +typedef struct { + U32 id:20, + minor:4, + major:2, + lot:3, + pkg:3; +} netxen_chipid_t; + +typedef enum { + MEM_ORG_128Mbx4 =0x0, /* DDR1 only */ + MEM_ORG_128Mbx8 =0x1, /* DDR1 only */ + MEM_ORG_128Mbx16 =0x2, /* DDR1 only */ + MEM_ORG_256Mbx4 =0x3, + MEM_ORG_256Mbx8 =0x4, + MEM_ORG_256Mbx16 =0x5, + MEM_ORG_512Mbx4 =0x6, + MEM_ORG_512Mbx8 =0x7, + MEM_ORG_512Mbx16 =0x8, + MEM_ORG_1Gbx4 =0x9, + MEM_ORG_1Gbx8 =0xa, + MEM_ORG_1Gbx16 =0xb, + MEM_ORG_2Gbx4 =0xc, + MEM_ORG_2Gbx8 =0xd, + MEM_ORG_2Gbx16 =0xe, + MEM_ORG_128Mbx32 =0x10002, /* GDDR only */ + MEM_ORG_256Mbx32 =0x10005 /* GDDR only */ +} netxen_mn_mem_org_t; + +typedef enum { + MEM_ORG_512Kx36 =0x0, + MEM_ORG_1Mx36 =0x1, + MEM_ORG_2Mx36 =0x2 +} netxen_sn_mem_org_t; + +typedef enum { + MEM_DEPTH_4MB = 0x1, + MEM_DEPTH_8MB = 0x2, + MEM_DEPTH_16MB = 0x3, + MEM_DEPTH_32MB = 0x4, + MEM_DEPTH_64MB = 0x5, + MEM_DEPTH_128MB = 0x6, + MEM_DEPTH_256MB = 0x7, + MEM_DEPTH_512MB = 0x8, + MEM_DEPTH_1GB = 0x9, + MEM_DEPTH_2GB = 0xa, + MEM_DEPTH_4GB = 0xb, + MEM_DEPTH_8GB = 0xc, + MEM_DEPTH_16GB = 0xd, + MEM_DEPTH_32GB = 0xe +} netxen_mem_depth_t; + +/****************************************************************************** +* +* +* +******************************************************************************* +*/ +typedef struct { + U32 header_version; + + U32 board_mfg; + //netxen_brdid_t board_id; + U32 board_type; + U32 board_num; + //netxen_chipid_t chip_id; + U32 chip_id; + U32 chip_minor; + U32 chip_major; + U32 chip_pkg; + U32 chip_lot; + + + U32 port_mask; /* available niu ports */ + U32 peg_mask; /* available pegs */ + U32 icache_ok; /* can we run with icache? */ + U32 dcache_ok; /* can we run with dcache? */ + U32 casper_ok; + + //netxen_eth_addr_t mac_address[MAX_PORTS]; /* */ + U32 mac_addr_lo_0; + U32 mac_addr_lo_1; + U32 mac_addr_lo_2; + U32 mac_addr_lo_3; + + /* MN-related config */ + U32 mn_sync_mode; /* enable/ sync shift cclk/ sync shift mclk */ + U32 mn_sync_shift_cclk; + U32 mn_sync_shift_mclk; + U32 mn_wb_en; + U32 mn_crystal_freq; /* in MHz */ + U32 mn_speed; /* in MHz */ + U32 mn_org; + U32 mn_depth; + U32 mn_ranks_0; /* ranks per slot */ + U32 mn_ranks_1; /* ranks per slot */ + U32 mn_rd_latency_0; + U32 mn_rd_latency_1; + U32 mn_rd_latency_2; + U32 mn_rd_latency_3; + U32 mn_rd_latency_4; + U32 mn_rd_latency_5; + U32 mn_rd_latency_6; + U32 mn_rd_latency_7; + U32 mn_rd_latency_8; + U32 mn_dll_val[18]; + U32 mn_mode_reg; /* See MIU DDR Mode Register */ + U32 mn_ext_mode_reg; /* See MIU DDR Extended Mode Register */ + U32 mn_timing_0; /* See MIU Memory Control Timing Rgister */ + U32 mn_timing_1; /* See MIU Extended Memory Ctrl Timing Register */ + U32 mn_timing_2; /* See MIU Extended Memory Ctrl Timing2 Register */ + + /* SN-related config */ + U32 sn_sync_mode; /* enable/ sync shift cclk / sync shift mclk */ + U32 sn_pt_mode; /* pass through mode */ + U32 sn_ecc_en; + U32 sn_wb_en; + U32 sn_crystal_freq; + U32 sn_speed; + U32 sn_org; + U32 sn_depth; + U32 sn_dll_tap; + U32 sn_rd_latency; + + U32 mac_addr_hi_0; + U32 mac_addr_hi_1; + U32 mac_addr_hi_2; + U32 mac_addr_hi_3; + + U32 magic; /* indicates flash has been initialized */ + + U32 mn_rdimm; + U32 mn_dll_override; +} netxen_board_info_t; + +#define FLASH_SECTOR_START (1) +#define NUM_FLASH_SECTORS (64) +#define FLASH_SECTOR_SIZE (64*1024) +#define FLASH_TOTAL_SIZE (NUM_FLASH_SECTORS*FLASH_SECTOR_SIZE) +#define FLASH_NUM_PORTS (4) + +typedef struct { + U32 flash_addr[32]; +} netxen_flash_mac_addr_t; + +/* flash user area */ +typedef struct { + U8 flash_md5[16]; + U8 crbinit_md5[16]; + U8 brdcfg_md5[16]; + /* bootloader */ + U32 bootld_version; + U32 bootld_size; + U8 bootld_md5[16]; + /* image */ + U32 image_version; + U32 image_size; + U8 image_md5[16]; + /* primary image status */ + U32 primary_status; + U32 secondary_present; + + /* MAC address , 4 ports */ + netxen_flash_mac_addr_t mac_addr[FLASH_NUM_PORTS]; + + /* Any user defined data */ +} netxen_user_info_t; + +#define SECONDARY_IMAGE_PRESENT 0xb3b4b5b6 +#define SECONDARY_IMAGE_ABSENT 0xffffffff +#define PRIMARY_IMAGE_GOOD 0x5a5a5a5a +#define PRIMARY_IMAGE_BAD 0xffffffff + +/* Flash memory map */ +typedef enum { + CRBINIT_START = 0, /* Crbinit section */ + BRDCFG_START = 0x4000, /* board config */ + INITCODE_START = 0x6000, /* pegtune code */ + BOOTLD_START = 0x10000, /* bootld */ + IMAGE_START = 0x42000, /* compressed image */ + SECONDARY_START = 0x200000, /* backup images */ + USER_START = 0x3E0000, /* user defined region */ + FIXED_START = 0x3F0000 /* backup of crbinit */ +} netxen_flash_map_t; + +#define FLASH_START (CRBINIT_START) +#define PRIMARY_START (BOOTLD_START) +#define FLASH_CRBINIT_SIZE (0x4000) +#define FLASH_BRDCFG_SIZE (sizeof(netxen_board_info_t)) +#define FLASH_USER_SIZE (sizeof(netxen_user_info_t)/sizeof(uint32_t)) +#define FLASH_SECONDARY_SIZE (USER_START-SECONDARY_START) +#define NUM_PRIMARY_SECTORS (0x20) +#define NUM_CONFIG_SECTORS (1) + +#endif diff -Naru linux-2.6.16_orig/drivers/net/netxen/netxen_nic_ioctl.h linux-2.6.16/drivers/net/netxen/netxen_nic_ioctl.h --- linux-2.6.16_orig/drivers/net/netxen/netxen_nic_ioctl.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.16/drivers/net/netxen/netxen_nic_ioctl.h 2006-03-24 14:13:57.000000000 -0800 @@ -0,0 +1,222 @@ +/* + * 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_NIC_IOCTL_H__ +#define __NetXen_NIC_IOCTL_H__ + +#include <linux/sockios.h> + +/* ioctl's dealing with PCI read/writes */ +#define NetXen_CMD_START SIOCDEVPRIVATE +#define NetXen_NIC_CMD (NetXen_CMD_START + 1) +#define NetXen_NIC_NAME (NetXen_CMD_START + 2) +#define NetXen_NIC_SEND_TEST (NetXen_CMD_START + 3) +#define NetXen_NIC_IRQ_TEST (NetXen_CMD_START + 5) +#define NetXen_NIC_ILB_TEST (NetXen_CMD_START + 6) +#define NetXen_NIC_ELB_TEST (NetXen_CMD_START + 7) +#define NetXen_NIC_LINK_TEST (NetXen_CMD_START + 8) +#define NetXen_NIC_HW_TEST (NetXen_CMD_START + 9) +#define NetXen_NIC_CIS_TEST (NetXen_CMD_START + 10) +#define NetXen_NIC_CR_TEST (NetXen_CMD_START + 11) + +/* Error codes - loopback test */ +enum { + LB_TEST_OK, + LB_UCOPY_PARAM_ERR, + LB_UCOPY_DATA_ERR, + LB_NOMEM_ERR, + LB_TX_NOSKB_ERR, + LB_SHORT_DATA_ERR, + LB_SEQUENCE_ERR, + LB_DATA_ERR, + LB_ERRCNT +}; + +/* Error codes - CR test */ +enum { + CR_TEST_OK, + CR_NIU_MODE, + CR_PHY, + CR_ERRCNT +}; + +/* Error codes - CIS test */ +enum { + CIS_TEST_OK, + CIS_WMARK, + CIS_ERRCNT +}; + +/* Error codes - HW test */ +enum { + HW_TEST_OK, + HW_DMA_BZ_0, + HW_DMA_BZ_1, + HW_DMA_BZ_2, + HW_DMA_BZ_3, + HW_SRE_PBI_HALT, + HW_SRE_L1IPQ, + HW_SRE_L2IFQ, + HW_SRE_FREEBUF, + HW_IPQ, + HW_PQ_W_PAUSE, + HW_PQ_W_FULL, + HW_IFQ_W_PAUSE, + HW_IFQ_W_FULL, + HW_MEN_BP_TOUT, + HW_DOWN_BP_TOUT, + HW_FBUFF_POOL_WM, + HW_PBUF_ERR, + HW_FM_MSG_HDR, + HW_FM_MSG, + HW_EPG_CTRL_Q, + HW_EPG_MSG_BUF, + HW_EPG_QREAD_TOUT, + HW_EPG_QWRITE_TOUT, + HW_EPG_CQ_W_FULL, + HW_EPG_MSG_CHKSM, + HW_EPG_MTLQ_TOUT, + HW_PEG0, + HW_PEG1, + HW_PEG2, + HW_PEG3, + HW_ERRCNT +}; + + + + +struct sections +{ + + long long is_bss_flag; + long long file_offset; + long long size; + long long load_offset; +}; +struct driverimg_header +{ + long long no_of_sections; + struct sections sec[1]; +}; + +typedef enum { + netxen_nic_cmd_none = 0, + netxen_nic_cmd_pci_read, + netxen_nic_cmd_pci_write, + netxen_nic_cmd_pci_mem_read, + netxen_nic_cmd_pci_mem_write, + netxen_nic_cmd_pci_config_read, + netxen_nic_cmd_pci_config_write, + netxen_nic_cmd_get_stats, + netxen_nic_cmd_clear_stats, + netxen_nic_cmd_get_version +} netxen_nic_ioctl_cmd_t; + +typedef struct { + __uint32_t cmd; + __uint32_t unused1; + __uint64_t off; + __uint32_t size; + __uint32_t rv; + char u[64]; + void *ptr; +} netxen_nic_ioctl_data_t; + +/* FIXME vijo, not used for now */ +/* ioctl's dealing w. interrupt counts */ +#define NetXen_INTR_CMD 3 +typedef enum { + netxen_intr_cmd_none = 0, + netxen_intr_cmd_clear, + netxen_intr_cmd_get +} netxen_intr_cmd_t; + +typedef enum { + netxen_intr_src_unspecified = -1, + netxen_intr_src_min = 0, + netxen_intr_src_dma_0 = 0, + netxen_intr_src_dma_1 = 1, + netxen_intr_src_i2q = 2, + netxen_intr_src_max = 3 +} netxen_intr_src_t; + +typedef struct { + netxen_intr_cmd_t cmd; + netxen_intr_src_t int_src; + int data; +} netxen_intr_data_t; + +typedef enum { + NetXen_TX_START = 1, + NetXen_TX_STOP, + NetXen_TX_SET_PARAM, + NetXen_TX_SET_PACKET, + NetXen_LOOPBACK_START, + NetXen_LOOPBACK_STOP +} netxen_send_test_cmd_t; + +typedef struct { + netxen_send_test_cmd_t cmd; + unsigned int ifg; + unsigned int count; +} netxen_send_test_t; + + /* + * Commands to be used for the IP Filter. + */ +enum { + NetXen_IP_ADDR_CLEAR = 1, + NetXen_IP_ADDR_ADD, + NetXen_IP_ADDR_DEL, + NetXen_IP_ADDR_SHOW +}; + +#define NetXen_IP_ADDR_MAX_COUNT 15 +typedef struct { + __int32_t count; + __uint32_t ip_addr[NetXen_IP_ADDR_MAX_COUNT]; +} netxen_ip_addr_filter_t; + +typedef struct { + int cmd; /* must be one of the commands above */ + netxen_ip_addr_filter_t request; +} netxen_ip_filter_request_t; + +struct netxen_statistics { + __uint64_t rx_packets; + __uint64_t tx_packets; + __uint64_t rx_bytes; + __uint64_t rx_errors; + __uint64_t tx_bytes; + __uint64_t tx_errors; + __uint64_t rx_CRC_errors; + __uint64_t rx_short_length_error; + __uint64_t rx_long_length_error; + __uint64_t rx_MAC_errors; +}; +#endif diff -Naru linux-2.6.16_orig/drivers/net/netxen/netxen_version.h linux-2.6.16/drivers/net/netxen/netxen_version.h --- linux-2.6.16_orig/drivers/net/netxen/netxen_version.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.16/drivers/net/netxen/netxen_version.h 2006-03-24 14:13:57.000000000 -0800 @@ -0,0 +1,38 @@ +/* + * 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 + */ +#define _NetXen_NIC_BUILD_NO 1 +#define NetXen_NIC_BUILD_NO "1" +#define NetXen_NIC_FW_VERSION_MAJOR 2 +#define NetXen_NIC_FW_VERSION_MINOR 0 +#define NetXen_NIC_FW_VERSION_SUB 28 +#define NetXen_NIC_FW_VERSIONID "2.0.28" +#define NetXen_NIC_LINUX_VERSIONID "2.0.28" +#define _NetXen_NIC_LINUX_MAJOR 2 +#define _NetXen_NIC_LINUX_MINOR 0 +#define _NetXen_NIC_LINUX_SUBVERSION 28 +#define NetXen_NIC_TIMESTAMP "Thu Mar 23 01:25:36 PST 2006 by build:build" diff -Naru linux-2.6.16_orig/drivers/net/netxen/nic_cmn.h linux-2.6.16/drivers/net/netxen/nic_cmn.h --- linux-2.6.16_orig/drivers/net/netxen/nic_cmn.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.16/drivers/net/netxen/nic_cmn.h 2006-03-24 14:13:57.000000000 -0800 @@ -0,0 +1,331 @@ +/* + * 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 + */ +/* Header file with definitions for both host and Phantom */ + +/* $Id: nic_cmn.h,v 1.56.6.3 2006/03/02 08:47:12 adhiraj Exp $ */ + +#ifndef NetXen_NIC_CMN_H +#define NetXen_NIC_CMN_H + +#include "netxen_nic_config.h" + +#if defined(__GCC__) +#define PREALIGN(X) +#define POSTALIGN(X) __attribute__ ((aligned(X)) +#else // NOT GCC +#if !defined (_MSC_VER) //and not windows! +#define PREALIGN(X) +#define POSTALIGN(X) +#endif +#endif // NOT GCC + +#define IP_ALIGNMENT_BYTES 2 /* make ip aligned on 16byteaddr */ +#define MAX_RX_BUFFER_LENGTH 2000 +#define MAX_RX_JUMBO_BUFFER_LENGTH 9046 +#define RX_DMA_MAP_LEN (MAX_RX_BUFFER_LENGTH-IP_ALIGNMENT_BYTES) +#define RX_JUMBO_DMA_MAP_LEN (MAX_RX_JUMBO_BUFFER_LENGTH-IP_ALIGNMENT_BYTES) + +/* Opcodes to be used with the commands */ +#define TX_ETHER_PKT 0x01 +/* The following opcodes are for IP checksum */ +#define TX_TCP_PKT 0x02 +#define TX_UDP_PKT 0x03 +#define TX_IP_PKT 0x04 +#define TX_TCP_LSO 0x05 +#define TX_IPSEC 0x06 +#define TX_IPSEC_CMD 0x07 + +/* The following opcodes are for internal consumption. */ +#define NetXen_CONTROL_OP 0x10 +#define PEGNET_REQUEST 0x11 + +#define MAX_NUM_CARDS 4 +#define MAX_NUM_PORTS 4 /* Deprecated. donot use this */ +#define MAX_NIU_PORTS MAX_NUM_PORTS +#define PORT1 0 +#define PORT2 1 +#define PORT3 2 +#define PORT4 3 + +#define DESC_CHAIN 0xFF /* descriptor command continuation */ + +#define MAX_BUFFERS_PER_CMD 32 + +/* + * Following are the states of the Phantom. Phantom will set them and + * Host will read to check if the fields are correct. + */ +#define PHAN_INITIALIZE_START 0xff00 +#define PHAN_INITIALIZE_FAILED 0xffff +#define PHAN_INITIALIZE_COMPLETE 0xff01 + +/* Following defines will be used in the status descriptor */ +#define TX_ETHER_PKT_COMPLETE 0xB /* same for both commands */ + +#define NUM_RCV_DESC_RINGS 2 /* No of Rcv Descriptor contexts */ + +/* descriptor types */ +#define RCV_DESC_NORMAL 0x01 +#define RCV_DESC_JUMBO 0x02 +#define RCV_DESC_NORMAL_CTXID 0 +#define RCV_DESC_JUMBO_CTXID 1 + +#define RCV_DESC_TYPE(ID) \ + ((ID == RCV_DESC_JUMBO_CTXID) ? RCV_DESC_JUMBO : RCV_DESC_NORMAL) + +#define MAX_CMD_DESCRIPTORS 1024 +#define MAX_RCV_DESCRIPTORS 32768 +#define MAX_JUMBO_RCV_DESCRIPTORS 4096 +#define MAX_RCVSTATUS_DESCRIPTORS MAX_RCV_DESCRIPTORS +#define MAX_JUMBO_RCV_DESC MAX_JUMBO_RCV_DESCRIPTORS +#define MAX_RCV_DESC MAX_RCV_DESCRIPTORS +#define MAX_RCVSTATUS_DESC MAX_RCV_DESCRIPTORS +#define NUM_RCV_DESC (MAX_RCV_DESC+MAX_JUMBO_RCV_DESCRIPTORS) + +#define MAX_EPG_DESCRIPTORS MAX_CMD_DESCRIPTORS * 8 + +#define MIN_TX_COUNT 4096 +#define MIN_RX_COUNT 4096 + +#define MAX_FRAME_SIZE 0x10000 /* 64K MAX size for LSO */ + +#define PHAN_PEG_RCV_INITIALIZED 0xff01 +#define PHAN_PEG_RCV_START_INITIALIZE 0xff00 + +#define get_next_index(index,length) ((((index) + 1) == length)?0:(index) +1) + + +#define get_index_range(index,length,count) ((((index) + (count)) >= length)? \ + (((index) + (count))-(length)):((index) + (count))) + + +/* + * Following data structures describe the descriptors that will be used. + * Added fileds of tcpHdrSize and ipHdrSize, The driver needs to do it only when + * we are doing LSO (above the 1500 size packet) only. + * This is an overhead but we need it. Let me know if you have questions. + */ + +/* the size of reference handle been changed to 16 bits to pass the MSS fields + for the LSO packet */ + +#define FLAGS_CHECKSUM_ENABLED 0x01 +#define FLAGS_LSO_ENABLED 0x02 +#define FLAGS_IPSEC_SA_ADD 0x04 +#define FLAGS_IPSEC_SA_DELETE 0x08 +#define FLAGS_VLAN_TAGGED 0x10 + + +#ifndef U64 +typedef uint64_t U64; +typedef uint32_t U32; +typedef uint16_t U16; +typedef uint8_t U8; +#endif + +typedef struct PREALIGN(64) cmdDescType0 +{ + U64 netxen_next; // for fragments handled by Phantom + union { + struct { + U32 AddrLowPart2; + U32 AddrHighPart2; + }; + U64 AddrBuffer2; + }; + + U64 totalLength:24, // Total size of the packet + tcpHdrOffset:8, // For LSO only + ipHdrOffset:8, // For LSO only + numOfBuffers:8, // total number of segments (buffers + // for this packet. (could be more than 4) + flags:8, // as defined above + opcode:8; + + U64 referenceHandle:16, // changed to U16 to add mss + mss:16, // passed by NDIS_PACKET for LSO + port:4, + rsvd1:4, + totalHdrLength:8, // LSO only : MAC+IP+TCP Hdr size + connID:16; // IPSec offoad only + + union { + struct { + U32 AddrLowPart3; + U32 AddrHighPart3; + }; + U64 AddrBuffer3; + }; + + union { + struct { + U32 AddrLowPart1; + U32 AddrHighPart1; + }; + U64 AddrBuffer1; + }; + + U64 buffer1Length:16, + buffer2Length:16, + buffer3Length:16, + buffer4Length:16; + + union { + struct { + U32 AddrLowPart4; + U32 AddrHighPart4; + }; + U64 AddrBuffer4; + }; + +} POSTALIGN(64) cmdDescType0_t; + +typedef struct PREALIGN(64) controlCmdDesc +{ + U64 opcode:8, + cmd:8, + count:8, // Number of control elements + unused:40; // Unused so far + __uint32_t ip_addr[(sizeof(cmdDescType0_t) - + sizeof(U64))/sizeof(__uint32_t)]; +} POSTALIGN(64) controlCmdDesc_t; + + +// This type has no reference handle but does have a ConnID as +// this is specific to TCP Chimney. We do not need referenceHandle +// as it has no associated buffers and based on completion opcode +// the miniport driver will be able to handle it. + +typedef struct cmdDescType1 +{ + U32 Unm_msg_hdr_Lo; + U32 Unm_msg_hdr_Hi; + U8 reserved; + U8 numOfBuffers; + U8 flags; + U8 Opcode; + U32 port:4, + connID:28; + U32 data[12]; //48 bytes of data +} cmdDescType1_t; + + +/* Note: sizeof(rcvDesc) should always be a mutliple of 2 */ +typedef struct rcvDesc +{ + U64 referenceHandle:16, + reserved:16, + bufferLength:32; // allocated buffer length (usually 2K) + U64 AddrBuffer; +} rcvDesc_t; + + +/* opcode field in statusDesc_t */ +#define RCV_NIC_PKT (0xA) +#define STATUS_NIC_PKT ((RCV_NIC_PKT) << 12) + +/* for status field in statusDesc_t */ +#define STATUS_NEED_CKSUM (1) +#define STATUS_CKSUM_OK (2) + +/* owner bits of statusDesc_t */ +#define STATUS_OWNER_HOST (1ULL) +#define STATUS_OWNER_PHANTOM (2ULL) +#define HOST_STATUS_DESC ((STATUS_OWNER_HOST) << 48) +#define PHANTOM_STATUS_DESC ((STATUS_OWNER_PHANTOM) << 48) + +#define NetXen_PROT_IP (1) +#define NetXen_PROT_UNKNOWN (0) + +/* Note: sizeof(statusDesc) should always be a mutliple of 2 */ +typedef struct PREALIGN(8) statusDesc +{ + U64 port:4, /* initially to be used but noe now */ + status:4, /* completion status may not have use */ + type:4, /* type/index of descriptor ring */ + opcode:4, /* Completion of receive or transmit */ + totalLength:16, /* NIC mode...no use yet */ + referenceHandle:16, /* handle for the associated packet */ + owner:2, /* Owner of the descriptor */ + prot:4; /* protocol type for skb (Linux) */ +} POSTALIGN(8) statusDesc_t; + + +/* + * Defines for various loop counts. These determine the behaviour of the + * system. The classic tradeoff between latency and throughput. + */ + +/* + * MAX_DMA_LOOPCOUNT : After how many interations do we start the dma for + * the status descriptors. + */ +#define MAX_DMA_LOOPCOUNT (32) + +/* + * MAX_TX_DMA_LOOP_COUNT : After how many interations do we start the dma for + * the command descriptors. + */ +#define MAX_TX_DMA_LOOP_COUNT 1000 + +/* + * MAX_RCV_BUFS : Max number Rx packets that can be buffered before DMA/INT + */ +#define MAX_RCV_BUFS (4096) + +/* + * MAX_INTR_LOOPCOUNT : After how many iterations do we interrupt the + * host ? + */ +#define MAX_INTR_LOOPCOUNT (1024) + +/* + * XMIT_LOOP_THRESHOLD : How many times do we spin before we process the + * transmit buffers. + */ +#define XMIT_LOOP_THRESHOLD 0x20 + +/* + * XMIT_DESC_THRESHOLD : How many descriptors pending before we process + * the descriptors. + */ +#define XMIT_DESC_THRESHOLD 0x4 + +/* + * TASKLET_DELAY : Ratio of interrupts to be ignored before scheduling + * the tasklet. We want to process the receive interrupts quickly, but can + * delay processing the tx interrupts. + */ +#define TASKLET_DELAY 4 + +enum { + NetXen_RCV_PEG_0 = 0, + NetXen_RCV_PEG_1 +}; + +#endif diff -Naru linux-2.6.16_orig/drivers/net/netxen/nic_phan_reg.h linux-2.6.16/drivers/net/netxen/nic_phan_reg.h --- linux-2.6.16_orig/drivers/net/netxen/nic_phan_reg.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.16/drivers/net/netxen/nic_phan_reg.h 2006-03-24 14:13:57.000000000 -0800 @@ -0,0 +1,228 @@ +/* + * 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 NIC_PHAN_REG_H +#define NIC_PHAN_REG_H + + +#if defined(__GCC__) +#define PREALIGN(X) +#define POSTALIGN(X) __attribute__ ((aligned(X)) +#else // NOT GCC +#if !defined (_MSC_VER) //and not windows! +#define PREALIGN(X) +#define POSTALIGN(X) +#endif +#endif // NOT GCC + +/* CRB Registers/ or q message done only at initialization time.... */ + + +/* + * The following 2 are the base adresses for the CRB registers and their + * offsets will be added to get addresses for the index addresses....... + */ +#define NIC_CRB_BASE_PORT1 NetXen_CAM_RAM(0x200) //20 registers for port 1 +#define NIC_CRB_BASE_PORT2 NetXen_CAM_RAM(0x250) // after 20 registers... + +#define NetXen_NIC_REG(X) (NIC_CRB_BASE_PORT1+(X)) + +/* + CrbPort?PhanCntrHi/Lo is used to pass the address of HostPhantomIndex address + which can be read by the Phantom host to get producer/consumer indexes from + Phantom/Casper. If it is not HOST_SHARED_MEMORY, then the following + registers will be used for the addresses of the ring's shared memory + on the Phantom. +*/ + +#define CRB_PHAN_CNTRL_LO_OFFSET NetXen_NIC_REG(0x00) +#define CRB_PHAN_CNTRL_HI_OFFSET NetXen_NIC_REG(0x04) + +/* point to the indexes */ +#define CRB_CMD_PRODUCER_OFFSET NetXen_NIC_REG(0x08) +#define CRB_CMD_CONSUMER_OFFSET NetXen_NIC_REG(0x0c) + +/* address of command descriptors in the host memory */ +#define CRB_HOST_CMD_ADDR_HI NetXen_NIC_REG(0x30) +#define CRB_HOST_CMD_ADDR_LO NetXen_NIC_REG(0x34) + +/* The following 4 CRB registers are for doing performance coal */ +#define CRB_CMD_INTR_LOOP NetXen_NIC_REG(0x38) +#define CRB_CMD_DMA_LOOP NetXen_NIC_REG(0x3c) +#define CRB_RCV_INTR_LOOP NetXen_NIC_REG(0x40) +#define CRB_RCV_DMA_LOOP NetXen_NIC_REG(0x44) + +/* Needed by the host to find out the state of Phantom's initialization */ +#define CRB_ENABLE_TX_INTR NetXen_NIC_REG(0x4c) +#define CRB_CMDPEG_STATE NetXen_NIC_REG(0x50) +#define CRB_CMDPEG_CMDRING NetXen_NIC_REG(0x54) + +#define CRB_MMAP_ADDR_0 NetXen_NIC_REG(0x60) +#define CRB_MMAP_ADDR_1 NetXen_NIC_REG(0x64) +#define CRB_MMAP_ADDR_2 NetXen_NIC_REG(0x68) +#define CRB_MMAP_ADDR_3 NetXen_NIC_REG(0x6c) + +#define CRB_MMAP_SIZE_0 NetXen_NIC_REG(0x70) +#define CRB_MMAP_SIZE_1 NetXen_NIC_REG(0x74) +#define CRB_MMAP_SIZE_2 NetXen_NIC_REG(0x78) +#define CRB_MMAP_SIZE_3 NetXen_NIC_REG(0x7c) + +/* Interrupt coalescing parameters */ +#define CRB_GLOBAL_INT_COAL NetXen_NIC_REG(0x80) +#define CRB_INT_COAL_MODE NetXen_NIC_REG(0x84) +#define CRB_MAX_RCV_BUFS NetXen_NIC_REG(0x88) +#define CRB_TX_INT_THRESHOLD NetXen_NIC_REG(0x8c) +#define CRB_RX_PKT_TIMER NetXen_NIC_REG(0x90) +#define CRB_TX_PKT_TIMER NetXen_NIC_REG(0x94) +#define CRB_RX_PKT_CNT NetXen_NIC_REG(0x98) +#define CRB_RX_TMR_CNT NetXen_NIC_REG(0x9c) + +/* Register for communicating XG link status */ +#define CRB_XG_STATE NetXen_NIC_REG(0xa0) + +/* Debug registers for controlling NIC pkt gen agent */ +#define CRB_AGENT_GO NetXen_NIC_REG(0xb0) +#define CRB_AGENT_TX_SIZE NetXen_NIC_REG(0xb4) +#define CRB_AGENT_TX_TYPE NetXen_NIC_REG(0xb8) +#define CRB_AGENT_TX_ADDR NetXen_NIC_REG(0xbc) +#define CRB_AGENT_TX_MSS NetXen_NIC_REG(0xc0) + +/* Debug registers for observing NIC performance */ +#define CRB_TX_STATE NetXen_NIC_REG(0xd0) +#define CRB_TX_COUNT NetXen_NIC_REG(0xd4) +#define CRB_RX_STATE NetXen_NIC_REG(0xd8) + +/* + * Alternative method of getting to the MMAP addr & size. + */ +#define CRB_MMAP_ADDR(idx) (CRB_MMAP_ADDR_0 + ((idx) << 2)) +#define CRB_MMAP_SIZE(idx) (CRB_MMAP_SIZE_0 + ((idx) << 2)) + +/* CRB registers per Rcv Descriptor ring */ +typedef struct { + U32 PREALIGN(512) CRB_RCV_PRODUCER_OFFSET POSTALIGN(512); + U32 CRB_RCV_CONSUMER_OFFSET; + + U32 CRB_GLOBALRCV_RING; +} netxen_rcv_desc_crb_t; + +/* + * CRB registers used by the receive peg logic. One instance of these + * needs to be instantiated per instance of the receive peg. + */ + +typedef struct { + netxen_rcv_desc_crb_t rcv_desc_crb[NUM_RCV_DESC_RINGS]; + + U32 CRB_RCVSTATUS_RING; + U32 CRB_RCV_STATUS_PRODUCER; + U32 CRB_RCV_STATUS_CONSUMER; + U32 CRB_RCVPEG_STATE; +} netxen_recv_crb_t; + +#if defined(DEFINE_GLOBAL_RECV_CRB) +netxen_recv_crb_t recv_crb_registers[] = { + /* + * Instance 0. + */ + { + //rcv_desc_crb: + { + { + //CRB_RCV_PRODUCER_OFFSET: + NetXen_NIC_REG(0x18), + //CRB_RCV_CONSUMER_OFFSET: + NetXen_NIC_REG(0x1c), + //CRB_GLOBALRCV_RING: + NetXen_NIC_REG(0x20), + }, + /* Jumbo frames */ + { + //CRB_RCV_PRODUCER_OFFSET: + NetXen_NIC_REG(0x100), + //CRB_RCV_CONSUMER_OFFSET: + NetXen_NIC_REG(0x104), + //CRB_GLOBALRCV_RING: + NetXen_NIC_REG(0x108), + } + }, + //CRB_RCVSTATUS_RING: + NetXen_NIC_REG(0x24), + //CRB_RCV_STATUS_PRODUCER: + NetXen_NIC_REG(0x28), + //CRB_RCV_STATUS_CONSUMER: + NetXen_NIC_REG(0x2c), + //CRB_RCVPEG_STATE: + NetXen_NIC_REG(0x48), + + }, + /* + * Instance 1, + */ + { + //rcv_desc_crb: + { + { + //CRB_RCV_PRODUCER_OFFSET: + NetXen_NIC_REG(0x80), + //CRB_RCV_CONSUMER_OFFSET: + NetXen_NIC_REG(0x84), + //CRB_GLOBALRCV_RING: + NetXen_NIC_REG(0x88), + }, + /* Jumbo frames */ + { + //CRB_RCV_PRODUCER_OFFSET: + NetXen_NIC_REG(0x10C), + //CRB_RCV_CONSUMER_OFFSET: + NetXen_NIC_REG(0x110), + //CRB_GLOBALRCV_RING: + NetXen_NIC_REG(0x114), + } + }, + //CRB_RCVSTATUS_RING: + NetXen_NIC_REG(0x8c), + //CRB_RCV_STATUS_PRODUCER: + NetXen_NIC_REG(0x90), + //CRB_RCV_STATUS_CONSUMER: + NetXen_NIC_REG(0x94), + //CRB_RCVPEG_STATE: + NetXen_NIC_REG(0x98), + + }, +}; + +#define NUM_RCV_INSTANCES \ + (sizeof(recv_crb_registers)/sizeof(recv_crb_registers[0])) + +#else + +extern netxen_recv_crb_t recv_crb_registers[]; + +#endif /* DEFINE_GLOBAL_RECEIVE_CRB */ + +#endif /* NIC_PHAN_REG_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