diff -Naru linux-2.6.16_orig/drivers/net/netxen/netxen_nic_config.h 
linux-2.6.16/drivers/net/netxen/netxen_nic_config.h
--- linux-2.6.16_orig/drivers/net/netxen/netxen_nic_config.h    1969-12-31 
16:00:00.000000000 -0800
+++ linux-2.6.16/drivers/net/netxen/netxen_nic_config.h 2006-03-24 
14:13:57.000000000 -0800
@@ -0,0 +1,40 @@
+/*
+ * 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
+ */
+/* $Id: netxen_nic_config.h,v 1.6 2005/06/17 01:20:11 sanjeev Exp $ */
+#ifndef _NetXen_NIC_CONFIG_H_
+#define _NetXen_NIC_CONFIG_H_
+
+/* NIC configuration */
+#undef  NetXen_IP_DEFRAG_ENABLED
+
+#define NO_EPG_PROXY      1
+
+#define HOST_CPU_64_BIT   1
+
+#endif
+
diff -Naru linux-2.6.16_orig/drivers/net/netxen/netxen_nic.h 
linux-2.6.16/drivers/net/netxen/netxen_nic.h
--- linux-2.6.16_orig/drivers/net/netxen/netxen_nic.h   1969-12-31 
16:00:00.000000000 -0800
+++ linux-2.6.16/drivers/net/netxen/netxen_nic.h        2006-03-24 
14:13:57.000000000 -0800
@@ -0,0 +1,561 @@
+/*
+ * 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_
+#define _NetXen_NIC_
+
+#include <linux/skbuff.h>
+#ifdef NETIF_F_HW_VLAN_TX
+#include <linux/if_vlan.h>
+#endif
+#ifndef MODULE
+#include <asm/i387.h>
+#endif
+
+#include "netxen_nic_hw.h"
+#include "nic_cmn.h"
+#include "netxen_inc.h"      /* For MAX_RCV_CTX */
+#include "netxen_brdcfg.h"
+
+#define BAR_0            0
+#define PCI_DMA_64BIT    0xffffffffffffffffULL
+#define PCI_DMA_32BIT    0x00000000ffffffffULL
+
+#define NETDEV_STATUS 0x1
+
+#define ADDR_IN_WINDOW1(off)   \
+       ((off > NetXen_CRB_PCIX_HOST2) && (off < NetXen_CRB_MAX)) ? 1 : 0 
+
+/* normalize a 64MB crb address to 32MB PCI window 
+ * To use CRB_NORMALIZE, window _must_ be set to 1
+ */
+#define CRB_NORMALIZE(adapter, reg) \
+        (void *)(uptr_t)(adapter->ahw.pci_base+ (reg) - NetXen_CRB_PCIX_HOST2 
+ NetXen_CRB_PCIX_HOST)
+
+/*
+ * The PCI VendorID and DeviceID for our board.
+ */
+#define PCI_VENDOR_ID_NetXen       0x4040
+#define PCI_DEVICE_ID_NetXen       0x0001
+#define PCI_DEVICE_ID_NetXen_4PORT 0x0001 /* XXX */
+
+/* Phantom is multi-function.  For our purposes,  use function 0 */
+#define PHAN_FUNC_NUM         0
+
+#define PFX "netxen: "
+
+/* FIXME vijo */
+extern int netxen_nic_debug;
+#define netxen_nic_debug_on  do { netxen_nic_debug = 1; } while(0)
+#define netxen_nic_debug_off do { netxen_nic_debug = 0; } while(0)
+
+/* FIXME, vijo: port[0] is not correct */
+/* Note: Make sure to not call this before adapter->port is valid */
+#if defined(NDEBUG)
+#define DPRINTK(nlevel, klevel, fmt, args...)  do { \
+    } while (0)
+#else /* NDEBUG */
+#define DPRINTK(nlevel, klevel, fmt, args...)  do { \
+    /* (void)((NETIF_MSG_##nlevel & adapter->msg_enable) && */\
+    if (netxen_nic_debug) \
+    printk(KERN_##klevel PFX "%s: %s: " fmt, __FUNCTION__,\
+           (adapter != NULL && adapter->port != NULL && \
+            adapter->port[0] != NULL && \
+            adapter->port[0]->netdev != NULL) ? \
+            adapter->port[0]->netdev->name : NULL, \
+              ## args); } while(0)
+#endif
+
+#define NetXen_MAX_INTR        10
+
+#define NetXen_RXBUFFER        2048
+
+/* Number of status descriptors to handle per interrupt */
+#define MAX_STATUS_HANDLE  (128)
+
+/* Number of status descriptors to process before posting buffers */
+#define MAX_RX_THRESHOLD  (MAX_STATUS_HANDLE*2)
+
+/* netif_wake_queue ?  count*/
+#define NetXen_TX_QUEUE_WAKE      16
+
+/* After NetXen_RX_BUFFER_WRITE have been processed, we will repopulate them */
+#define NetXen_RX_BUFFER_WRITE    64
+
+/* only works for sizes that are powers of 2 */
+#define NetXen_ROUNDUP(i, size) ((i) = (((i) + (size) - 1) & ~((size) - 1)))
+
+#ifndef    TAILQ_FIRST
+#define    TAILQ_FIRST(head)    ((head)->tqh_first)
+#define    TAILQ_EMPTY(head)    ((head)->tqh_first == NULL)
+#endif
+
+/* For the MAC Address:experimental ref. pegnet_types.h */
+#define NetXen_MAC_OUI          "00:0e:1e:"
+#define NetXen_MAC_EXPERIMENTAL ((unsigned char)0x20)
+
+/*
+ * netxen_skb_frag{} is to contain mapping info for each SG list. This
+ * has to be freed when DMA is complete. This is part of netxen_tx_buffer{}.
+ */
+struct    netxen_skb_frag {
+        uint64_t    dma;
+        uint32_t    length;
+};
+
+/*    Following defines are for the state of the buffers    */
+#define    NetXen_BUFFER_FREE        0
+#define    NetXen_BUFFER_BUSY        1
+
+/*
+ * There will be one netxen_buffer per skb packet.    These will be
+ * used to save the dma info for pci_netxenap_page()
+ */
+struct netxen_cmd_buffer {
+       struct {
+               struct netxen_cmd_buffer *tqe_next;
+               struct netxen_cmd_buffer **tqe_prev;
+       } link;
+
+        struct sk_buff         *skb;
+        struct netxen_skb_frag     fragArray[MAX_BUFFERS_PER_CMD+1];
+        uint32_t                totalLength;
+        uint32_t                mss;
+        uint32_t                port:16,
+                                cmd:8,
+                                fragCount:8;
+        unsigned long           time_stamp;
+
+        uint32_t                state;
+};
+
+/* In rx_buffer, we do not need multiple fragments as is a single buffer */
+struct netxen_rx_buffer {
+       struct {
+               struct netxen_rx_buffer *tqe_next;
+               struct netxen_rx_buffer **tqe_prev;
+       } link;
+
+        struct sk_buff     *skb;
+        uint64_t            dma;
+        uint32_t            refHandle:16,
+                            state:16;
+};
+
+/* Board types */
+#define  NetXen_NIC_GBE     0x01
+#define  NetXen_NIC_XGBE    0x02
+
+/*
+ * One hardware_context{} per adapter
+ * contains interrupt info as well shared hardware info.
+ */
+typedef struct _hardware_context {
+        struct pci_dev   *pdev;
+        unsigned long     pci_base;    /* base of mapped phantom memory */
+        unsigned long     pci_len;    /* length of mapped phantom memory */
+        uint16_t          vendor_id;
+        uint16_t          device_id;
+        uint8_t           revision_id;
+        uint16_t          pci_cmd_word;
+        uint16_t          board_type;
+        uint16_t          max_ports;
+        netxen_board_info_t  boardcfg;
+        uint32_t          xg_linkup;
+
+        struct netxen_adapter    *adapter;
+
+        cmdDescType0_t  *cmdDescHead;    /* Address of cmd ring in Phantom */
+
+        uint32_t    cmdProducer;
+        uint32_t    cmdConsumer;
+        uint32_t    rcvFlag;
+        uint32_t    statusRxProducer;
+        uint32_t    statusRxConsumer;
+        uint32_t    crb_base;
+
+        uint32_t    cmdDesc_physAddr;
+} hardware_context, *phardware_context;
+
+#define MAX_BUFFERS              2000
+
+#define MINIMUM_ETHERNET_FRAME_SIZE  64   /* With FCS */
+#define ETHERNET_FCS_SIZE             4
+
+struct netxen_adapter_stats {
+        uint64_t  ints;
+        uint64_t  hostints;
+        uint64_t  otherints;
+        uint64_t  process_rcv;
+        uint64_t  process_xmit;
+        uint64_t  noxmitdone;
+        uint64_t  xmitcsummed;
+        uint64_t  post_called;
+        uint64_t  posted;
+        uint64_t  lastposted;
+        uint64_t  goodskbposts;
+};
+
+/*
+ * Ring which will hold the skbs which can be fed to receive ring
+ */
+#define NetXen_SKB_ARRAY_SIZE 1024
+
+typedef struct netxen_recv_skb_ring_s {
+       struct sk_buff **skb_array;
+       uint32_t interrupt_index;
+       uint32_t tasklet_index;
+        uint32_t data_size;
+} netxen_recv_skb_ring_t;
+
+/* descriptor types */
+#define RCV_RING_STD       RCV_DESC_NORMAL
+#define RCV_RING_JUMBO      RCV_DESC_JUMBO
+
+/*
+ * Rcv Descriptor Context. One such per Rcv Descriptor. There may
+ * be one Rcv Descriptor for normal packets, one for jumbo and may be others.
+ */
+typedef struct netxen_rcv_desc_context_s {
+        uint32_t              flags;
+        uint32_t              producer;
+
+        /* Num of bufs posted in phantom */
+        uint32_t              rcv_pending;
+        /* Num of bufs in free list */
+        uint32_t              rcv_free;
+
+        uint32_t              phys_addr;
+        /* address of rx ring in Phantom */
+        rcvDesc_t            *desc_head;
+
+        uint32_t              MaxRxDescCount;
+        uint32_t              dma_size;
+        uint32_t              skb_size;
+        /* rx buffers for receive   */
+        struct netxen_rx_buffer *rx_buf_arr;
+        /* physical address of above */
+        dma_addr_t            rx_buf_phys;
+
+        netxen_recv_skb_ring_t *skb_ring;
+
+        struct free_rbuf_list {
+               struct netxen_rx_buffer *tqh_first;
+               struct netxen_rx_buffer **tqh_last;
+        } free_rxbuf_list;
+        struct busy_rbuf_list {
+               struct netxen_rx_buffer *tqh_first;
+               struct netxen_rx_buffer **tqh_last;
+        } busy_rxbuf_list;
+
+
+} netxen_rcv_desc_ctx_t;
+
+/*
+ * Receive context. There is one such structure per instance of the
+ * receive processing. Any state information that is relevant to
+ * the receive, and is must be in this structure. The global data may be
+ * present elsewhere.
+ */
+typedef struct netxen_recv_context_s {
+        netxen_rcv_desc_ctx_t rcv_desc[NUM_RCV_DESC_RINGS];
+
+        uint32_t      statusRxProducer;
+        uint32_t      statusRxConsumer;
+
+        uint32_t      rcvStatusDesc_physAddr;
+        statusDesc_t *rcvStatusDescHead;
+} netxen_recv_context_t;
+
+#define NetXen_NIC_MSI_ENABLED 0x02
+
+/* this structure by all ports on the adapter */
+typedef struct netxen_adapter_s {
+        hardware_context    ahw;
+    /*  struct netxen_cmd_info       cmd_info;
+        struct netxen_rx_info        rx_info;
+        struct netxen_status_info    status_info;  FIXME..unused. temp fix */
+        int                 portCount;   /* Number of configured ports  */
+        int                 activePorts; /* Number of open ports */
+        struct netxen_port   **port;        /* ptr to each port  */
+        spinlock_t          tx_lock;
+        rwlock_t           adapter_lock;
+        spinlock_t          lock;
+        struct work_struct  watchdog_task;
+        struct work_struct  tx_timeout_task[4];
+        struct timer_list      watchdog_timer;
+        struct tasklet_struct  tx_tasklet;
+        struct tasklet_struct  rx_tasklet;
+
+        uint32_t        curr_window;
+
+        uint32_t        cmdProducer;
+        uint32_t        cmdConsumer;
+
+        uint32_t        lastCmdConsumer;
+        /* Num of bufs posted in phantom */
+        uint32_t        pendingCmdCount;
+        uint32_t        freeCmdCount;    /* Num of bufs in free list */
+        uint32_t        MaxTxDescCount;
+        uint32_t        MaxRxDescCount;
+        uint32_t        MaxJumboRxDescCount;
+        /* Num of instances active on cmd buffer ring */
+        uint32_t        procCmdBufCounter;
+        volatile uint32_t cmdPegConsumer;
+
+        /*Use to keep track of xmit threads*/
+        uint32_t        num_threads, total_threads;
+
+        uint32_t        flags;
+       int             driver_mismatch;
+
+        struct netxen_adapter_stats stats;
+
+        struct netxen_cmd_buffer *cmd_buf_arr;  /* Command buffers for xmit */
+        struct netxen_rx_buffer  *rx_buf_arr;   /* rx buffers for receive   */
+
+        /*
+         * Receive instances. These can be either one per port,
+         * or one per peg, etc.
+         */
+        netxen_recv_context_t recv_ctx[MAX_RCV_CTX];
+ 
+        netxen_recv_skb_ring_t  std_ring;
+        netxen_recv_skb_ring_t  jumbo_ring;
+       struct netdev_list_s *netlist;
+       int             number;
+       int             is_up;
+       int             work_done;
+} netxen_adapter;    /* netxen_adapter structure */
+
+typedef struct netdev_list_s netdev_list_t;
+struct netdev_list_s {
+        netdev_list_t *next;
+        struct net_device *netdev;
+};
+
+typedef struct _port_hw {
+        unsigned char    mac_addr[MAX_ADDR_LEN];
+        int              mtu;
+        struct pci_dev  *pdev;
+        struct netxen_port *port;
+} port_hw, *pport_hw;
+
+
+/* Following structure is for specific port information    */
+
+#define    PORT_UP              0
+#define    PORT_DOWN            1
+#define    PORT_INITIALIAZED    2
+#define    PORT_SUSPEND         3
+
+#define    MAX_HD_DESC_BUFFERS    4    /* number of buffers in 1st desc */
+
+/*Max number of xmit producer threads that can run simultaneously*/
+#define    MAX_XMIT_PRODUCERS   16
+
+struct netxen_port_stats {
+        uint64_t  rcvdbadskb;
+        uint64_t  xmitcalled;
+        uint64_t  xmitedframes;
+        uint64_t  xmitfinished;
+        uint64_t  badskblen;
+        uint64_t  nocmddescriptor;
+        uint64_t  polled;
+        uint64_t  uphappy;
+        uint64_t  updropped;
+        uint64_t  uplcong;
+        uint64_t  uphcong;
+        uint64_t  upmcong;
+        uint64_t  updunno;
+        uint64_t  skbfreed;
+        uint64_t  txdropped;
+        uint64_t  txnullskb;
+        uint64_t  csummed;
+        uint64_t  no_rcv;
+        uint64_t  rxbytes;
+        uint64_t  txbytes;
+};
+
+struct        netxen_port {
+        struct netxen_adapter_s    *adapter;
+
+        port_hw     hw;    /* port hardware structure    */
+        uint16_t    portnum;    /* GBE port number        */
+        uint16_t    link_speed;
+        uint16_t    link_duplex;
+        uint16_t    state;        /* state of the port             */
+        uint16_t    link_autoneg;
+
+        int         flags;
+        spinlock_t  stats_lock;
+
+        struct net_device      *netdev;
+        struct pci_dev         *pdev;
+        struct net_device_stats net_stats;
+        struct netxen_port_stats   stats;
+};
+
+#define PROC_ENTRY_NAME        "netxen"
+#define PROC_PARENT            NULL
+
+extern char netxen_nic_driver_name[];
+
+void netxen_nic_pci_change_crbwindow(netxen_adapter *adapter, uint32_t wndw);
+
+static inline void
+netxen_nic_reg_write (netxen_adapter *adapter, u64 off, __uint32_t val)
+{//Only for window 1
+        void *addr;
+
+        read_lock(&adapter->adapter_lock);
+
+        if (adapter->curr_window != 1) {
+                netxen_nic_pci_change_crbwindow(adapter, 1);
+        }
+        addr = CRB_NORMALIZE(adapter, off);
+        DPRINTK(1, INFO, "writing to base %lx offset %llx addr %p data %x\n",
+                            adapter->ahw.pci_base, off, addr, val);
+        NetXen_NIC_PCI_WRITE_32 (val, addr);
+
+        read_unlock(&adapter->adapter_lock);
+}
+
+static inline int
+netxen_nic_reg_read (netxen_adapter *adapter, u64 off)
+{//Only for window 1
+        void *addr;
+        int val;
+
+        read_lock(&adapter->adapter_lock);
+        addr = CRB_NORMALIZE(adapter, off);
+        DPRINTK(1, INFO, "reading from base %lx offset %llx addr %p\n",
+                        adapter->ahw.pci_base, off, addr);
+        val = NetXen_NIC_PCI_READ_32(addr);
+        NetXen_NIC_PCI_WRITE_32 (val, addr);
+        read_unlock(&adapter->adapter_lock);
+
+        return val;
+}
+
+static inline void
+netxen_nic_write_w0(netxen_adapter *adapter, uint32_t index, uint32_t value)
+{//Change the window to 0, write and change back to window 1.
+        unsigned long        flags;
+        void                *addr;
+
+        write_lock_irqsave(&adapter->adapter_lock, flags);
+        netxen_nic_pci_change_crbwindow(adapter, 0);
+        addr = (void *)(adapter->ahw.pci_base + index);
+        NetXen_NIC_PCI_WRITE_32(value, addr);
+        netxen_nic_pci_change_crbwindow(adapter, 1);
+        write_unlock_irqrestore(&adapter->adapter_lock, flags);
+}
+
+static inline void
+netxen_nic_read_w0(netxen_adapter *adapter, uint32_t index, uint32_t *value)
+{//Change the window to 0, read and change back to window 1.
+        unsigned long        flags;
+        void                *addr;
+
+        addr = (void *)(adapter->ahw.pci_base + index);
+
+        write_lock_irqsave(&adapter->adapter_lock, flags);
+        netxen_nic_pci_change_crbwindow(adapter, 0);
+        *value = NetXen_NIC_PCI_READ_32(addr);
+        netxen_nic_pci_change_crbwindow(adapter, 1);
+        write_unlock_irqrestore(&adapter->adapter_lock, flags);
+}
+
+long netxen_niu_gbe_enable_phy_interrupts(long port);
+long netxen_niu_xg_enable_phy_interrupts(long port);
+long netxen_niu_gbe_disable_phy_interrupts(long port);
+long netxen_niu_xg_disable_phy_interrupts(long port);
+long netxen_niu_gbe_clear_phy_interrupts(long port);
+void netxen_niu_gbe_set_mii_mode(long port, long enable);
+void netxen_niu_gbe_set_gmii_mode(long port, long enable);
+long netxen_niu_gbe_phy_read (long phy, long reg, netxen_crbword_t *readval);
+long netxen_niu_gbe_phy_write (long phy, long reg, netxen_crbword_t val);
+long netxen_niu_xginit(void);
+void xge_loopback(int on);
+long xge_link_status (void);
+
+/* Functions available from netxen_nic_hw.c */
+int netxen_nic_get_board_info(struct netxen_adapter_s *adapter);
+void netxen_nic_hw_block_write(struct netxen_adapter_s *adapter,
+                                u64 off, void *data, int num_words);
+int  netxen_nic_pci_mem_write(struct netxen_adapter_s *adapter,
+                                u64 off, void *data, int size);
+int  netxen_nic_pci_mem_read(struct netxen_adapter_s *adapter,
+                                u64 off, void *data, int size);
+void netxen_nic_mem_block_read(struct netxen_adapter_s *adapter, u64 off,
+                                void *data, int num_words);
+void netxen_nic_mem_block_write(struct netxen_adapter_s *adapter, u64 off,
+                                void *data, int num_words);
+int netxen_nic_hw_read_wx (netxen_adapter *adapter, u64 off, void *data, int 
len);
+int netxen_nic_hw_write_wx(netxen_adapter *adapter, u64 off, void *data, int 
len);
+int  netxen_nic_macaddr_set(struct netxen_port *port, __uint8_t *addr);
+int  netxen_nic_macaddr_get(struct netxen_port *port, __uint8_t **addr);
+int netxen_nic_macaddr_set(struct netxen_port *port, __uint8_t *addr);
+int netxen_nic_macaddr_get(struct netxen_port *port, __uint8_t **addr);
+int netxen_nic_set_mtu(struct netxen_port *port, int new_mtu);
+long netxen_nic_phy_read(netxen_adapter *adapter, long phy, long , __uint32_t 
*);
+long netxen_nic_phy_write(netxen_adapter *adapter, long phy, long reg, 
__uint32_t);
+long netxen_nic_init_port(struct netxen_port *port);
+void netxen_nic_init_niu(struct netxen_adapter_s *adapter);
+int netxen_crb_read_adapter (unsigned long off, void *data, struct 
netxen_adapter_s *adapter);
+int netxen_crb_read_val_adapter (unsigned long off, struct netxen_adapter_s 
*adapter);
+int netxen_crb_writelit_adapter (unsigned long off, int data, struct 
netxen_adapter_s *adapter);
+
+/* Functions from netxen_nic_init.c */
+void phantom_init(struct netxen_adapter_s *adapter);
+void load_firmware(struct netxen_adapter_s *adapter);
+int  pinit_from_rom(netxen_adapter *adapter, int verbose);
+int  rom_fast_read(struct netxen_adapter_s *adapter, int addr);
+
+/* Functions from netxen_nic_isr.c */
+void netxen_nic_isr_other(netxen_adapter *adapter);
+void netxen_nic_handle_phy_intr(netxen_adapter *adapter);
+long netxen_nic_phy_read (netxen_adapter *adapter,long phy, long reg,
+                        __uint32_t *readval);
+long netxen_nic_phy_write (netxen_adapter *adapter,long phy, long reg,
+                        __uint32_t val);
+long netxen_nic_enable_phy_interrupts(netxen_adapter *adapter,long port);
+long netxen_nic_disable_phy_interrupts(netxen_adapter *adapter,long port);
+long netxen_nic_clear_phy_interrupts(netxen_adapter *adapter,long port);
+void netxen_nic_set_mii_mode(netxen_adapter *adapter,long port, long enable);
+void netxen_nic_set_gmii_mode(netxen_adapter *adapter,long port, long enable);
+void netxen_indicate_link_status(netxen_adapter *adapter,u32 port, u32 link);
+void netxen_handle_port_int(netxen_adapter *adapter,u32 port, u32 enable);
+int  tap_crb_mbist_clear(netxen_adapter *adapter);
+int  netxen_nic_set_promisc_mode(struct netxen_port *port);
+int  netxen_nic_unset_promisc_mode(struct netxen_port *port);
+void netxen_nic_stop_all_ports(struct netxen_adapter_s *adapter);
+void netxen_nic_stop_port(struct netxen_port *port);
+int  netxen_nic_get_board_num(netxen_adapter *adapter);
+
+#endif
diff -Naru linux-2.6.16_orig/drivers/net/netxen/netxen_nic_hw.h 
linux-2.6.16/drivers/net/netxen/netxen_nic_hw.h
--- linux-2.6.16_orig/drivers/net/netxen/netxen_nic_hw.h        1969-12-31 
16:00:00.000000000 -0800
+++ linux-2.6.16/drivers/net/netxen/netxen_nic_hw.h     2006-03-24 
14:13:57.000000000 -0800
@@ -0,0 +1,171 @@
+/*
+ * 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
+ */
+/*
+ * Structures, enums, and macros for the MAC
+ */
+
+#ifndef _NetXen_NIC_HW_
+#define _NetXen_NIC_HW_
+
+#include "netxen_inc.h"
+
+/* Hardware memory size of 128 meg */
+#define BAR0_SIZE (128 * 1024 * 1024)
+/*
+It can be calculated by looking at the first 1 bit of the BAR0 addr after bit 4
+#For us lets assume that BAR0 is D8000008, then the size is 0x8000000, 8 
represents
+#first bit containing 1.   temp notes....pg 162 of PCI systems arch...
+*/
+
+#ifndef readq
+static inline __uint64_t readq(void __iomem *addr)
+{
+        return readl(addr) |
+               (((__uint64_t)readl(addr+4)) << 32LL);
+}
+#endif
+
+#ifndef writeq
+static inline void writeq(__uint64_t val, void __iomem *addr)
+{
+        writel(((__uint32_t)(val)), (addr));
+        writel(((__uint32_t)(val >> 32)), (addr + 4));
+}
+#endif
+
+
+/*
+ * Following macros require the mapped addresses to access
+ * the Phantom memory.
+ */
+#define NetXen_NIC_PCI_READ_8(ADDR)         readb((ADDR))
+#define NetXen_NIC_PCI_READ_16(ADDR)        readw((ADDR))
+#define NetXen_NIC_PCI_READ_32(ADDR)        readl((ADDR))
+#define NetXen_NIC_PCI_READ_64(ADDR)        readq((ADDR))
+
+#define NetXen_NIC_PCI_WRITE_8(DATA, ADDR)  writeb(DATA, (ADDR))
+#define NetXen_NIC_PCI_WRITE_16(DATA, ADDR) writew(DATA, (ADDR))
+#define NetXen_NIC_PCI_WRITE_32(DATA, ADDR) writel(DATA, (ADDR))
+#define NetXen_NIC_PCI_WRITE_64(DATA, ADDR) writeq(DATA, (ADDR))
+
+#define NetXen_NIC_HW_BLOCK_WRITE_64(DATA_PTR, ADDR, NUM_WORDS)        \
+        do {                                                        \
+                int i;                                              \
+                u64 *a = (u64 *) (DATA_PTR);                        \
+                u64 *b = (u64 *) (ADDR);                            \
+                for (i=0; i< (NUM_WORDS); i++) {                    \
+                        writeq(readq(a), b);                        \
+                        b++;                                        \
+                        a++;                                        \
+                }                                                   \
+        } while (0)
+
+#define NetXen_NIC_HW_BLOCK_READ_64(DATA_PTR, ADDR, NUM_WORDS)           \
+        do {                                                          \
+                int i;                                                \
+                u64 *a = (u64 *) (DATA_PTR);                          \
+                u64 *b = (u64 *) (ADDR);                              \
+                for (i=0; i< (NUM_WORDS); i++) {                      \
+                        writeq(readq(b), a);                          \
+                        b++;                                          \
+                        a++;                                          \
+                }                                                     \
+        } while (0)
+
+#define NetXen_DEBUG_PVT_32_ADDR(A)                   \
+        (unsigned int)(A)
+#define NetXen_DEBUG_PVT_32_VALUE(V)                  \
+        *((unsigned int *)(V))
+#define NetXen_DEBUG_PVT_32_VALUE_LIT(V)              \
+        (unsigned int)(V)
+#define NetXen_DEBUG_PVT_64_ADDR_LO(A)                \
+        (unsigned int)((unsigned long)(A) & 0xffffffff)
+#define NetXen_DEBUG_PVT_64_ADDR_HI(A)                \
+        (unsigned int)((((unsigned long)(A) >> 16) >> 16) & 0xffffffff)
+#define NetXen_DEBUG_PVT_64_VALUE_LO(V)               \
+        (unsigned int)(*(__uint64_t *)(V) & 0xffffffff)
+#define NetXen_DEBUG_PVT_64_VALUE_HI(V)               \
+        (unsigned int)(((*(__uint64_t *)(V) >> 16) >> 16) & 0xffffffff)
+#define NetXen_DEBUG_PVT_64_VALUE_LIT_LO(LV)          \
+        (unsigned int)((LV) & 0xffffffff)
+#define NetXen_DEBUG_PVT_64_VALUE_LIT_HI(LV)          \
+        (unsigned int)(((LV) >> 32) & 0xffffffff)
+
+#if defined(CONFIG_X86_64)
+typedef unsigned long uptr_t;
+#else
+typedef unsigned uptr_t;
+#endif
+
+#define NetXen_PCI_MAPSIZE_BYTES  (NetXen_PCI_MAPSIZE << 20)
+
+#define NetXen_NIC_LOCKED_READ_REG(X, Y)   \
+        addr = (void *)(adapter->ahw.pci_base + X);     \
+        *(uint32_t *)Y = NetXen_NIC_PCI_READ_32(addr);
+
+#define NetXen_NIC_LOCKED_WRITE_REG(X, Y)   \
+       addr = (void *)(adapter->ahw.pci_base + X); \
+       NetXen_NIC_PCI_WRITE_32(*(uint32_t *)Y, addr);
+
+/* For Multicard support */
+#define NetXen_CRB_READ_VAL_ADAPTER(ADDR, ADAPTER) \
+                netxen_crb_read_val_adapter((ADDR), (struct netxen_adapter_s 
*)ADAPTER)
+
+#define NetXen_CRB_READ_CHECK_ADAPTER(ADDR, VALUE, ADAPTER)                    
             \
+        do {                                                            \
+            if (netxen_crb_read_adapter(ADDR, VALUE,(struct netxen_adapter_s 
*)ADAPTER)) return -1;      \
+        } while(0)
+
+#define NetXen_CRB_WRITE_CHECK_ADAPTER(ADDR, VALUE, ADAPTER)               \
+        do {                                                            \
+            if (netxen_crb_write_adapter(ADDR, VALUE,(struct netxen_adapter_s 
*)ADAPTER)) return -1; \
+        } while(0)
+
+#define NetXen_CRB_WRITELIT_ADAPTER(ADDR, VALUE, ADAPTER)                      
     \
+        do {                                                            \
+            netxen_crb_writelit_adapter(ADDR, VALUE, (struct netxen_adapter_s 
*)ADAPTER);      \
+        } while(0)
+
+#define NetXen_CRB_WRITE_ADAPTER_PANIC(ADDR, VALUE, ADAPTER, ERRSTR)           
             \
+        do {                                                            \
+            if (netxen_crb_write_adapter(ADDR, VALUE, (struct netxen_adapter_s 
*)ADAPTER)) panic(ERRSTR);  \
+        } while(0)
+
+#define NetXen_CRB_WRITELIT_ADAPTER_PANIC(ADDR, VALUE, ADAPTER, ERRSTR)    \
+        do {                                                            \
+            if (netxen_crb_writelit_adapter(ADDR, VALUE, (struct 
netxen_adapter_s *)ADAPTER)) panic(ERRSTR);  \
+        } while(0)
+
+
+struct netxen_port;
+void netxen_nic_set_link_parameters(struct netxen_port *port);
+long xge_mdio_init(void);
+struct netxen_adapter_s;
+void netxen_nic_flash_print(struct netxen_adapter_s* adapter);
+
+#endif /* _NetXen_NIC_HW_ */

-
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

Reply via email to