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