netxen: remove old flash check.
[safe/jmp/linux-2.6] / drivers / net / netxen / netxen_nic.h
index e41f623..1ff066b 100644 (file)
@@ -45,7 +45,6 @@
 #include <linux/in.h>
 #include <linux/tcp.h>
 #include <linux/skbuff.h>
-#include <linux/version.h>
 
 #include <linux/ethtool.h>
 #include <linux/mii.h>
@@ -54,6 +53,7 @@
 
 #include <linux/mm.h>
 #include <linux/mman.h>
+#include <linux/vmalloc.h>
 
 #include <asm/system.h>
 #include <asm/io.h>
 
 #include "netxen_nic_hw.h"
 
-#define _NETXEN_NIC_LINUX_MAJOR 3
-#define _NETXEN_NIC_LINUX_MINOR 4
-#define _NETXEN_NIC_LINUX_SUBVERSION 18
-#define NETXEN_NIC_LINUX_VERSIONID  "3.4.18"
+#define _NETXEN_NIC_LINUX_MAJOR 4
+#define _NETXEN_NIC_LINUX_MINOR 0
+#define _NETXEN_NIC_LINUX_SUBVERSION 11
+#define NETXEN_NIC_LINUX_VERSIONID  "4.0.11"
+
+#define NETXEN_VERSION_CODE(a, b, c)   (((a) << 16) + ((b) << 8) + (c))
 
 #define NETXEN_NUM_FLASH_SECTORS (64)
 #define NETXEN_FLASH_SECTOR_SIZE (64 * 1024)
 #define NX_RX_NORMAL_BUF_MAX_LEN       (NX_MAX_ETHERHDR + NX_ETHERMTU)
 #define NX_P2_RX_JUMBO_BUF_MAX_LEN     (NX_MAX_ETHERHDR + P2_MAX_MTU)
 #define NX_P3_RX_JUMBO_BUF_MAX_LEN     (NX_MAX_ETHERHDR + P3_MAX_MTU)
+#define NX_CT_DEFAULT_RX_BUF_LEN       2048
 
 #define MAX_RX_BUFFER_LENGTH           1760
 #define MAX_RX_JUMBO_BUFFER_LENGTH     8062
-#define MAX_RX_LRO_BUFFER_LENGTH       ((48*1024)-512)
+#define MAX_RX_LRO_BUFFER_LENGTH       (8062)
 #define RX_DMA_MAP_LEN                 (MAX_RX_BUFFER_LENGTH - 2)
 #define RX_JUMBO_DMA_MAP_LEN   \
        (MAX_RX_JUMBO_BUFFER_LENGTH - 2)
 
 #define MAX_CMD_DESCRIPTORS            4096
 #define MAX_RCV_DESCRIPTORS            16384
-#define MAX_CMD_DESCRIPTORS_HOST       (MAX_CMD_DESCRIPTORS / 4)
-#define MAX_RCV_DESCRIPTORS_1G         (MAX_RCV_DESCRIPTORS / 4)
-#define MAX_RCV_DESCRIPTORS_10G                8192
+#define MAX_CMD_DESCRIPTORS_HOST       1024
+#define MAX_RCV_DESCRIPTORS_1G         2048
+#define MAX_RCV_DESCRIPTORS_10G                4096
 #define MAX_JUMBO_RCV_DESCRIPTORS      1024
-#define MAX_LRO_RCV_DESCRIPTORS                64
+#define MAX_LRO_RCV_DESCRIPTORS                8
 #define MAX_RCVSTATUS_DESCRIPTORS      MAX_RCV_DESCRIPTORS
 #define MAX_JUMBO_RCV_DESC     MAX_JUMBO_RCV_DESCRIPTORS
 #define MAX_RCV_DESC           MAX_RCV_DESCRIPTORS
@@ -305,27 +308,16 @@ struct netxen_ring_ctx {
 #define netxen_set_cmd_desc_ctxid(cmd_desc, var)       \
        ((cmd_desc)->port_ctxid |= ((var) << 4 & 0xF0))
 
-#define netxen_set_cmd_desc_flags(cmd_desc, val)       \
-       (cmd_desc)->flags_opcode = ((cmd_desc)->flags_opcode & \
-               ~cpu_to_le16(0x7f)) | cpu_to_le16((val) & 0x7f)
-#define netxen_set_cmd_desc_opcode(cmd_desc, val)      \
-       (cmd_desc)->flags_opcode = ((cmd_desc)->flags_opcode & \
-               ~cpu_to_le16((u16)0x3f << 7)) | cpu_to_le16(((val) & 0x3f) << 7)
-
-#define netxen_set_cmd_desc_num_of_buff(cmd_desc, val) \
-       (cmd_desc)->num_of_buffers_total_length = \
-               ((cmd_desc)->num_of_buffers_total_length & \
-               ~cpu_to_le32(0xff)) | cpu_to_le32((val) & 0xff)
-#define netxen_set_cmd_desc_totallength(cmd_desc, val) \
-       (cmd_desc)->num_of_buffers_total_length = \
-               ((cmd_desc)->num_of_buffers_total_length & \
-               ~cpu_to_le32((u32)0xffffff << 8)) | \
-               cpu_to_le32(((val) & 0xffffff) << 8)
-
-#define netxen_get_cmd_desc_opcode(cmd_desc)   \
-       ((le16_to_cpu((cmd_desc)->flags_opcode) >> 7) & 0x003f)
-#define netxen_get_cmd_desc_totallength(cmd_desc)      \
-       ((le32_to_cpu((cmd_desc)->num_of_buffers_total_length) >> 8) & 0xffffff)
+#define netxen_set_tx_port(_desc, _port) \
+       (_desc)->port_ctxid = ((_port) & 0xf) | (((_port) << 4) & 0xf0)
+
+#define netxen_set_tx_flags_opcode(_desc, _flags, _opcode) \
+       (_desc)->flags_opcode = \
+       cpu_to_le16(((_flags) & 0x7f) | (((_opcode) & 0x3f) << 7))
+
+#define netxen_set_tx_frags_len(_desc, _frags, _len) \
+       (_desc)->num_of_buffers_total_length = \
+       cpu_to_le32(((_frags) & 0xff) | (((_len) & 0xffffff) << 8))
 
 struct cmd_desc_type0 {
        u8 tcp_hdr_offset;      /* For LSO only */
@@ -391,8 +383,8 @@ struct rcv_desc {
 };
 
 /* opcode field in status_desc */
-#define RCV_NIC_PKT    (0xA)
-#define STATUS_NIC_PKT ((RCV_NIC_PKT) << 12)
+#define NETXEN_NIC_RXPKT_DESC  0x04
+#define NETXEN_OLD_RXPKT_DESC  0x3f
 
 /* for status field in status_desc */
 #define STATUS_NEED_CKSUM      (1)
@@ -424,6 +416,8 @@ struct rcv_desc {
        (((sts_data) >> 28) & 0xFFFF)
 #define netxen_get_sts_prot(sts_data)  \
        (((sts_data) >> 44) & 0x0F)
+#define netxen_get_sts_pkt_offset(sts_data)    \
+       (((sts_data) >> 48) & 0x1F)
 #define netxen_get_sts_opcode(sts_data)        \
        (((sts_data) >> 58) & 0x03F)
 
@@ -438,17 +432,30 @@ struct rcv_desc {
 
 struct status_desc {
        /* Bit pattern: 0-3 port, 4-7 status, 8-11 type, 12-27 total_length
-          28-43 reference_handle, 44-47 protocol, 48-52 unused
+          28-43 reference_handle, 44-47 protocol, 48-52 pkt_offset
           53-55 desc_cnt, 56-57 owner, 58-63 opcode
         */
        __le64 status_desc_data;
-       __le32 hash_value;
-       u8 hash_type;
-       u8 msg_type;
-       u8 unused;
-       /* Bit pattern: 0-6 lro_count indicates frag sequence,
-          7 last_frag indicates last frag */
-       u8 lro;
+       union {
+               struct {
+                       __le32 hash_value;
+                       u8 hash_type;
+                       u8 msg_type;
+                       u8 unused;
+                       union {
+                               /* Bit pattern: 0-6 lro_count indicates frag
+                                * sequence, 7 last_frag indicates last frag
+                                */
+                               u8 lro;
+
+                               /* chained buffers */
+                               u8 nr_frags;
+                       };
+               };
+               struct {
+                       __le16 frag_handles[4];
+               };
+       };
 } __attribute__ ((aligned(16)));
 
 enum {
@@ -489,8 +496,11 @@ typedef enum {
        NETXEN_BRDTYPE_P3_10000_BASE_T = 0x0027,
        NETXEN_BRDTYPE_P3_XG_LOM = 0x0028,
        NETXEN_BRDTYPE_P3_4_GB_MM = 0x0029,
+       NETXEN_BRDTYPE_P3_10G_SFP_CT = 0x002a,
+       NETXEN_BRDTYPE_P3_10G_SFP_QT = 0x002b,
        NETXEN_BRDTYPE_P3_10G_CX4 = 0x0031,
-       NETXEN_BRDTYPE_P3_10G_XFP = 0x0032
+       NETXEN_BRDTYPE_P3_10G_XFP = 0x0032,
+       NETXEN_BRDTYPE_P3_10G_TP = 0x0080
 
 } netxen_brdtype_t;
 
@@ -722,7 +732,7 @@ extern char netxen_nic_driver_name[];
        } while (0)
 #else
 #define DPRINTK(klevel, fmt, args...)  do { \
-       printk(KERN_##klevel PFX "%s: %s: " fmt, __FUNCTION__,\
+       printk(KERN_##klevel PFX "%s: %s: " fmt, __func__,\
                (adapter != NULL && adapter->netdev != NULL) ? \
                adapter->netdev->name : NULL, \
                ## args); } while(0)
@@ -737,7 +747,7 @@ extern char netxen_nic_driver_name[];
  */
 struct netxen_skb_frag {
        u64 dma;
-       u32 length;
+       ulong length;
 };
 
 #define _netxen_set_bits(config_word, start, bits, val)        {\
@@ -763,17 +773,12 @@ struct netxen_skb_frag {
 struct netxen_cmd_buffer {
        struct sk_buff *skb;
        struct netxen_skb_frag frag_array[MAX_BUFFERS_PER_CMD + 1];
-       u32 total_length;
-       u32 mss;
-       u16 port;
-       u8 cmd;
-       u8 frag_count;
-       unsigned long time_stamp;
-       u32 state;
+       u32 frag_count;
 };
 
 /* In rx_buffer, we do not need multiple fragments as is a single buffer */
 struct netxen_rx_buffer {
+       struct list_head list;
        struct sk_buff *skb;
        u64 dma;
        u16 ref_handle;
@@ -854,7 +859,7 @@ struct nx_host_rds_ring {
        u32 dma_size;
        u32 skb_size;
        struct netxen_rx_buffer *rx_buf_arr;    /* rx buffers for receive   */
-       int begin_alloc;
+       struct list_head free_list;
 };
 
 /*
@@ -973,31 +978,31 @@ struct netxen_recv_context {
  */
 
 typedef struct {
-       u64 host_phys_addr;     /* Ring base addr */
-       u32 ring_size;          /* Ring entries */
-       u16 msi_index;
-       u16 rsvd;               /* Padding */
+       __le64 host_phys_addr;  /* Ring base addr */
+       __le32 ring_size;               /* Ring entries */
+       __le16 msi_index;
+       __le16 rsvd;            /* Padding */
 } nx_hostrq_sds_ring_t;
 
 typedef struct {
-       u64 host_phys_addr;     /* Ring base addr */
-       u64 buff_size;          /* Packet buffer size */
-       u32 ring_size;          /* Ring entries */
-       u32 ring_kind;          /* Class of ring */
+       __le64 host_phys_addr;  /* Ring base addr */
+       __le64 buff_size;               /* Packet buffer size */
+       __le32 ring_size;               /* Ring entries */
+       __le32 ring_kind;               /* Class of ring */
 } nx_hostrq_rds_ring_t;
 
 typedef struct {
-       u64 host_rsp_dma_addr;  /* Response dma'd here */
-       u32 capabilities[4];    /* Flag bit vector */
-       u32 host_int_crb_mode;  /* Interrupt crb usage */
-       u32 host_rds_crb_mode;  /* RDS crb usage */
+       __le64 host_rsp_dma_addr;       /* Response dma'd here */
+       __le32 capabilities[4]; /* Flag bit vector */
+       __le32 host_int_crb_mode;       /* Interrupt crb usage */
+       __le32 host_rds_crb_mode;       /* RDS crb usage */
        /* These ring offsets are relative to data[0] below */
-       u32 rds_ring_offset;    /* Offset to RDS config */
-       u32 sds_ring_offset;    /* Offset to SDS config */
-       u16 num_rds_rings;      /* Count of RDS rings */
-       u16 num_sds_rings;      /* Count of SDS rings */
-       u16 rsvd1;              /* Padding */
-       u16 rsvd2;              /* Padding */
+       __le32 rds_ring_offset; /* Offset to RDS config */
+       __le32 sds_ring_offset; /* Offset to SDS config */
+       __le16 num_rds_rings;   /* Count of RDS rings */
+       __le16 num_sds_rings;   /* Count of SDS rings */
+       __le16 rsvd1;           /* Padding */
+       __le16 rsvd2;           /* Padding */
        u8  reserved[128];      /* reserve space for future expansion*/
        /* MUST BE 64-bit aligned.
           The following is packed:
@@ -1007,24 +1012,24 @@ typedef struct {
 } nx_hostrq_rx_ctx_t;
 
 typedef struct {
-       u32 host_producer_crb;  /* Crb to use */
-       u32 rsvd1;              /* Padding */
+       __le32 host_producer_crb;       /* Crb to use */
+       __le32 rsvd1;           /* Padding */
 } nx_cardrsp_rds_ring_t;
 
 typedef struct {
-       u32 host_consumer_crb;  /* Crb to use */
-       u32 interrupt_crb;      /* Crb to use */
+       __le32 host_consumer_crb;       /* Crb to use */
+       __le32 interrupt_crb;   /* Crb to use */
 } nx_cardrsp_sds_ring_t;
 
 typedef struct {
        /* These ring offsets are relative to data[0] below */
-       u32 rds_ring_offset;    /* Offset to RDS config */
-       u32 sds_ring_offset;    /* Offset to SDS config */
-       u32 host_ctx_state;     /* Starting State */
-       u32 num_fn_per_port;    /* How many PCI fn share the port */
-       u16 num_rds_rings;      /* Count of RDS rings */
-       u16 num_sds_rings;      /* Count of SDS rings */
-       u16 context_id;         /* Handle for context */
+       __le32 rds_ring_offset; /* Offset to RDS config */
+       __le32 sds_ring_offset; /* Offset to SDS config */
+       __le32 host_ctx_state;  /* Starting State */
+       __le32 num_fn_per_port; /* How many PCI fn share the port */
+       __le16 num_rds_rings;   /* Count of RDS rings */
+       __le16 num_sds_rings;   /* Count of SDS rings */
+       __le16 context_id;              /* Handle for context */
        u8  phys_port;          /* Physical id of port */
        u8  virt_port;          /* Virtual/Logical id of port */
        u8  reserved[128];      /* save space for future expansion */
@@ -1050,34 +1055,34 @@ typedef struct {
  */
 
 typedef struct {
-       u64 host_phys_addr;     /* Ring base addr */
-       u32 ring_size;          /* Ring entries */
-       u32 rsvd;               /* Padding */
+       __le64 host_phys_addr;  /* Ring base addr */
+       __le32 ring_size;               /* Ring entries */
+       __le32 rsvd;            /* Padding */
 } nx_hostrq_cds_ring_t;
 
 typedef struct {
-       u64 host_rsp_dma_addr;  /* Response dma'd here */
-       u64 cmd_cons_dma_addr;  /*  */
-       u64 dummy_dma_addr;     /*  */
-       u32 capabilities[4];    /* Flag bit vector */
-       u32 host_int_crb_mode;  /* Interrupt crb usage */
-       u32 rsvd1;              /* Padding */
-       u16 rsvd2;              /* Padding */
-       u16 interrupt_ctl;
-       u16 msi_index;
-       u16 rsvd3;              /* Padding */
+       __le64 host_rsp_dma_addr;       /* Response dma'd here */
+       __le64 cmd_cons_dma_addr;       /*  */
+       __le64 dummy_dma_addr;  /*  */
+       __le32 capabilities[4]; /* Flag bit vector */
+       __le32 host_int_crb_mode;       /* Interrupt crb usage */
+       __le32 rsvd1;           /* Padding */
+       __le16 rsvd2;           /* Padding */
+       __le16 interrupt_ctl;
+       __le16 msi_index;
+       __le16 rsvd3;           /* Padding */
        nx_hostrq_cds_ring_t cds_ring;  /* Desc of cds ring */
        u8  reserved[128];      /* future expansion */
 } nx_hostrq_tx_ctx_t;
 
 typedef struct {
-       u32 host_producer_crb;  /* Crb to use */
-       u32 interrupt_crb;      /* Crb to use */
+       __le32 host_producer_crb;       /* Crb to use */
+       __le32 interrupt_crb;   /* Crb to use */
 } nx_cardrsp_cds_ring_t;
 
 typedef struct {
-       u32 host_ctx_state;     /* Starting state */
-       u16 context_id;         /* Handle for context */
+       __le32 host_ctx_state;  /* Starting state */
+       __le16 context_id;              /* Handle for context */
        u8  phys_port;          /* Physical id of port */
        u8  virt_port;          /* Virtual/Logical id of port */
        nx_cardrsp_cds_ring_t cds_ring; /* Card cds settings */
@@ -1115,10 +1120,74 @@ typedef struct nx_mac_list_s {
        uint8_t mac_addr[MAX_ADDR_LEN];
 } nx_mac_list_t;
 
+/*
+ * Interrupt coalescing defaults. The defaults are for 1500 MTU. It is
+ * adjusted based on configured MTU.
+ */
+#define NETXEN_DEFAULT_INTR_COALESCE_RX_TIME_US        3
+#define NETXEN_DEFAULT_INTR_COALESCE_RX_PACKETS        256
+#define NETXEN_DEFAULT_INTR_COALESCE_TX_PACKETS        64
+#define NETXEN_DEFAULT_INTR_COALESCE_TX_TIME_US        4
+
+#define NETXEN_NIC_INTR_DEFAULT                        0x04
+
+typedef union {
+       struct {
+               uint16_t        rx_packets;
+               uint16_t        rx_time_us;
+               uint16_t        tx_packets;
+               uint16_t        tx_time_us;
+       } data;
+       uint64_t                word;
+} nx_nic_intr_coalesce_data_t;
+
+typedef struct {
+       uint16_t                        stats_time_us;
+       uint16_t                        rate_sample_time;
+       uint16_t                        flags;
+       uint16_t                        rsvd_1;
+       uint32_t                        low_threshold;
+       uint32_t                        high_threshold;
+       nx_nic_intr_coalesce_data_t     normal;
+       nx_nic_intr_coalesce_data_t     low;
+       nx_nic_intr_coalesce_data_t     high;
+       nx_nic_intr_coalesce_data_t     irq;
+} nx_nic_intr_coalesce_t;
+
+#define NX_HOST_REQUEST                0x13
+#define NX_NIC_REQUEST         0x14
+
+#define NX_MAC_EVENT           0x1
+
+enum {
+       NX_NIC_H2C_OPCODE_START = 0,
+       NX_NIC_H2C_OPCODE_CONFIG_RSS,
+       NX_NIC_H2C_OPCODE_CONFIG_RSS_TBL,
+       NX_NIC_H2C_OPCODE_CONFIG_INTR_COALESCE,
+       NX_NIC_H2C_OPCODE_CONFIG_LED,
+       NX_NIC_H2C_OPCODE_CONFIG_PROMISCUOUS,
+       NX_NIC_H2C_OPCODE_CONFIG_L2_MAC,
+       NX_NIC_H2C_OPCODE_LRO_REQUEST,
+       NX_NIC_H2C_OPCODE_GET_SNMP_STATS,
+       NX_NIC_H2C_OPCODE_PROXY_START_REQUEST,
+       NX_NIC_H2C_OPCODE_PROXY_STOP_REQUEST,
+       NX_NIC_H2C_OPCODE_PROXY_SET_MTU,
+       NX_NIC_H2C_OPCODE_PROXY_SET_VPORT_MISS_MODE,
+       NX_H2P_OPCODE_GET_FINGER_PRINT_REQUEST,
+       NX_H2P_OPCODE_INSTALL_LICENSE_REQUEST,
+       NX_H2P_OPCODE_GET_LICENSE_CAPABILITY_REQUEST,
+       NX_NIC_H2C_OPCODE_GET_NET_STATS,
+       NX_NIC_H2C_OPCODE_LAST
+};
+
+#define VPORT_MISS_MODE_DROP           0 /* drop all unmatched */
+#define VPORT_MISS_MODE_ACCEPT_ALL     1 /* accept all packets */
+#define VPORT_MISS_MODE_ACCEPT_MULTI   2 /* accept unmatched multicast */
+
 typedef struct {
-       u64 qhdr;
-       u64 req_hdr;
-       u64 words[6];
+       __le64 qhdr;
+       __le64 req_hdr;
+       __le64 words[6];
 } nx_nic_req_t;
 
 typedef struct {
@@ -1134,12 +1203,16 @@ typedef struct {
 #define NETXEN_IS_MSI_FAMILY(adapter) \
        ((adapter)->flags & (NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED))
 
-#define MSIX_ENTRIES_PER_ADAPTER       8
+#define MSIX_ENTRIES_PER_ADAPTER       1
 #define NETXEN_MSIX_TBL_SPACE          8192
 #define NETXEN_PCI_REG_MSIX_TBL                0x44
 
 #define NETXEN_DB_MAPSIZE_BYTES        0x1000
 
+#define NETXEN_NETDEV_WEIGHT 120
+#define NETXEN_ADAPTER_UP_MAGIC 777
+#define NETXEN_NIC_PEG_TUNE 0
+
 struct netxen_dummy_dma {
        void *addr;
        dma_addr_t phys_addr;
@@ -1218,6 +1291,7 @@ struct netxen_adapter {
 
        int is_up;
        struct netxen_dummy_dma dummy_dma;
+       nx_nic_intr_coalesce_t coal;
 
        /* Context interface shared between card and host */
        struct netxen_ring_ctx *ctx_desc;
@@ -1228,7 +1302,7 @@ struct netxen_adapter {
        int (*disable_phy_interrupts) (struct netxen_adapter *);
        int (*macaddr_set) (struct netxen_adapter *, netxen_ethernet_macaddr_t);
        int (*set_mtu) (struct netxen_adapter *, int);
-       int (*set_promisc) (struct netxen_adapter *, netxen_niu_prom_mode_t);
+       int (*set_promisc) (struct netxen_adapter *, u32);
        int (*phy_read) (struct netxen_adapter *, long reg, u32 *);
        int (*phy_write) (struct netxen_adapter *, long reg, u32 val);
        int (*init_port) (struct netxen_adapter *, int);
@@ -1395,8 +1469,6 @@ void netxen_release_tx_buffers(struct netxen_adapter *adapter);
 
 void netxen_initialize_adapter_ops(struct netxen_adapter *adapter);
 int netxen_init_firmware(struct netxen_adapter *adapter);
-void netxen_tso_check(struct netxen_adapter *adapter,
-                     struct cmd_desc_type0 *desc, struct sk_buff *skb);
 void netxen_nic_clear_stats(struct netxen_adapter *adapter);
 void netxen_watchdog_task(struct work_struct *work);
 void netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ctx,
@@ -1405,8 +1477,11 @@ int netxen_process_cmd_ring(struct netxen_adapter *adapter);
 u32 netxen_process_rcv_ring(struct netxen_adapter *adapter, int ctx, int max);
 void netxen_p2_nic_set_multi(struct net_device *netdev);
 void netxen_p3_nic_set_multi(struct net_device *netdev);
+void netxen_p3_free_mac_list(struct netxen_adapter *adapter);
+int netxen_p3_nic_set_promisc(struct netxen_adapter *adapter, u32);
+int netxen_config_intr_coalesce(struct netxen_adapter *adapter);
 
-u32 nx_fw_cmd_set_mtu(struct netxen_adapter *adapter, u32 mtu);
+int nx_fw_cmd_set_mtu(struct netxen_adapter *adapter, int mtu);
 int netxen_nic_change_mtu(struct net_device *netdev, int new_mtu);
 
 int netxen_nic_set_mac(struct net_device *netdev, void *p);
@@ -1441,7 +1516,9 @@ static const struct netxen_brdinfo netxen_boards[] = {
        {NETXEN_BRDTYPE_P3_10G_SFP_PLUS, 2, "Dual XGb SFP+ LP"},
        {NETXEN_BRDTYPE_P3_10000_BASE_T, 1, "XGB 10G BaseT LP"},
        {NETXEN_BRDTYPE_P3_XG_LOM,  2, "Dual XGb LOM"},
-       {NETXEN_BRDTYPE_P3_4_GB_MM, 4, "Quad GB - March Madness"},
+       {NETXEN_BRDTYPE_P3_4_GB_MM, 4, "NX3031 Gigabit Ethernet"},
+       {NETXEN_BRDTYPE_P3_10G_SFP_CT, 2, "NX3031 10 Gigabit Ethernet"},
+       {NETXEN_BRDTYPE_P3_10G_SFP_QT, 2, "Quanta Dual XGb SFP+"},
        {NETXEN_BRDTYPE_P3_10G_CX4, 2, "Reference Dual CX4 Option"},
        {NETXEN_BRDTYPE_P3_10G_XFP, 1, "Reference Single XFP Option"}
 };
@@ -1518,8 +1595,8 @@ dma_watchdog_wakeup(struct netxen_adapter *adapter)
 }
 
 
-int netxen_is_flash_supported(struct netxen_adapter *adapter);
-int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, __le64 mac[]);
+int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, __le64 *mac);
+int netxen_p3_get_mac_addr(struct netxen_adapter *adapter, __le64 *mac);
 extern void netxen_change_ringparam(struct netxen_adapter *adapter);
 extern int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr,
                                int *valp);