iwlagn: implement loading a new firmware file type
[safe/jmp/linux-2.6] / drivers / net / netxen / netxen_nic.h
index 63e2f79..144d2e8 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2003 - 2009 NetXen, Inc.
+ * Copyright (C) 2009 - QLogic Corporation.
  * All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * MA  02111-1307, USA.
  *
  * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.
- *
- * Contact Information:
- *    info@netxen.com
- * NetXen Inc,
- * 18922 Forge Drive
- * Cupertino, CA 95014-0701
+ * in the file called "COPYING".
  *
  */
 
@@ -58,8 +53,8 @@
 
 #define _NETXEN_NIC_LINUX_MAJOR 4
 #define _NETXEN_NIC_LINUX_MINOR 0
-#define _NETXEN_NIC_LINUX_SUBVERSION 41
-#define NETXEN_NIC_LINUX_VERSIONID  "4.0.41"
+#define _NETXEN_NIC_LINUX_SUBVERSION 72
+#define NETXEN_NIC_LINUX_VERSIONID  "4.0.72"
 
 #define NETXEN_VERSION_CODE(a, b, c)   (((a) << 24) + ((b) << 16) + (c))
 #define _major(v)      (((v) >> 24) & 0xff)
@@ -79,8 +74,6 @@
 #define NETXEN_FLASH_TOTAL_SIZE  (NETXEN_NUM_FLASH_SECTORS \
                                        * NETXEN_FLASH_SECTOR_SIZE)
 
-#define PHAN_VENDOR_ID 0x4040
-
 #define RCV_DESC_RINGSIZE(rds_ring)    \
        (sizeof(struct rcv_desc) * (rds_ring)->num_desc)
 #define RCV_BUFF_RINGSIZE(rds_ring)    \
 #define NX_P3_B0               0x40
 #define NX_P3_B1               0x41
 #define NX_P3_B2               0x42
+#define NX_P3P_A0              0x50
 
 #define NX_IS_REVISION_P2(REVISION)     (REVISION <= NX_P2_C1)
 #define NX_IS_REVISION_P3(REVISION)     (REVISION >= NX_P3_A0)
+#define NX_IS_REVISION_P3P(REVISION)     (REVISION >= NX_P3P_A0)
 
 #define FIRST_PAGE_GROUP_START 0
 #define FIRST_PAGE_GROUP_END   0x100000
 #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 NX_LRO_BUFFER_EXTRA            2048
 
 #define NX_RX_LRO_BUFFER_LENGTH                (8060)
 
 
 #define MAX_BUFFERS_PER_CMD    32
 #define TX_STOP_THRESH         ((MAX_SKB_FRAGS >> 2) + 4)
+#define NX_MAX_TX_TIMEOUTS     2
 
 /*
  * Following are the states of the Phantom. Phantom will set them and
 #define MPORT_SINGLE_FUNCTION_MODE 0x1111
 #define MPORT_MULTI_FUNCTION_MODE 0x2222
 
+#define NX_MAX_PCI_FUNC                8
+
 /*
  * NetXen host-peg signal message structure
  *
@@ -345,9 +344,9 @@ struct cmd_desc_type0 {
 
        __le64 addr_buffer4;
 
-       __le16 vlan_TCI;
-       __le16 reserved;
        __le32 reserved2;
+       __le16 reserved;
+       __le16 vlan_TCI;
 
 } __attribute__ ((aligned(64)));
 
@@ -420,6 +419,34 @@ struct status_desc {
        __le64 status_desc_data[2];
 } __attribute__ ((aligned(16)));
 
+/* UNIFIED ROMIMAGE *************************/
+#define NX_UNI_FW_MIN_SIZE             0xc8000
+#define NX_UNI_DIR_SECT_PRODUCT_TBL    0x0
+#define NX_UNI_DIR_SECT_BOOTLD         0x6
+#define NX_UNI_DIR_SECT_FW             0x7
+
+/*Offsets */
+#define NX_UNI_CHIP_REV_OFF            10
+#define NX_UNI_FLAGS_OFF               11
+#define NX_UNI_BIOS_VERSION_OFF        12
+#define NX_UNI_BOOTLD_IDX_OFF          27
+#define NX_UNI_FIRMWARE_IDX_OFF        29
+
+struct uni_table_desc{
+       uint32_t        findex;
+       uint32_t        num_entries;
+       uint32_t        entry_size;
+       uint32_t        reserved[5];
+};
+
+struct uni_data_desc{
+       uint32_t        findex;
+       uint32_t        size;
+       uint32_t        reserved[5];
+};
+
+/* UNIFIED ROMIMAGE *************************/
+
 /* The version of the main data structure */
 #define        NETXEN_BDINFO_VERSION 1
 
@@ -486,7 +513,15 @@ struct status_desc {
 #define NX_P2_MN_ROMIMAGE      0
 #define NX_P3_CT_ROMIMAGE      1
 #define NX_P3_MN_ROMIMAGE      2
-#define NX_FLASH_ROMIMAGE      3
+#define NX_UNIFIED_ROMIMAGE    3
+#define NX_FLASH_ROMIMAGE      4
+#define NX_UNKNOWN_ROMIMAGE    0xff
+
+#define NX_P2_MN_ROMIMAGE_NAME         "nxromimg.bin"
+#define NX_P3_CT_ROMIMAGE_NAME         "nx3fwct.bin"
+#define NX_P3_MN_ROMIMAGE_NAME         "nx3fwmn.bin"
+#define NX_UNIFIED_ROMIMAGE_NAME       "phanfw.bin"
+#define NX_FLASH_ROMIMAGE_NAME         "flash"
 
 extern char netxen_nic_driver_name[];
 
@@ -544,13 +579,16 @@ struct netxen_hardware_context {
        void __iomem *pci_base1;
        void __iomem *pci_base2;
        void __iomem *db_base;
+       void __iomem *ocm_win_crb;
+
        unsigned long db_len;
        unsigned long pci_len0;
 
-       int qdr_sn_window;
-       int ddr_mn_window;
-       unsigned long mn_win_crb;
-       unsigned long ms_win_crb;
+       u32 ocm_win;
+       u32 crb_win;
+
+       rwlock_t crb_lock;
+       spinlock_t mem_lock;
 
        u8 cut_through;
        u8 revision_id;
@@ -581,11 +619,11 @@ struct netxen_adapter_stats {
  */
 struct nx_host_rds_ring {
        u32 producer;
-       u32 crb_rcv_producer;
        u32 num_desc;
        u32 dma_size;
        u32 skb_size;
        u32 flags;
+       void __iomem *crb_rcv_producer;
        struct rcv_desc *desc_head;
        struct netxen_rx_buffer *rx_buf_arr;
        struct list_head free_list;
@@ -595,9 +633,9 @@ struct nx_host_rds_ring {
 
 struct nx_host_sds_ring {
        u32 consumer;
-       u32 crb_sts_consumer;
-       u32 crb_intr_mask;
        u32 num_desc;
+       void __iomem *crb_sts_consumer;
+       void __iomem *crb_intr_mask;
 
        struct status_desc *desc_head;
        struct netxen_adapter *adapter;
@@ -614,8 +652,8 @@ struct nx_host_tx_ring {
        u32 producer;
        __le32 *hw_consumer;
        u32 sw_consumer;
-       u32 crb_cmd_producer;
-       u32 crb_cmd_consumer;
+       void __iomem *crb_cmd_producer;
+       void __iomem *crb_cmd_consumer;
        u32 num_desc;
 
        struct netdev_queue *txq;
@@ -964,6 +1002,7 @@ typedef struct {
 #define NX_NIC_H2C_OPCODE_PROXY_STOP_DONE              20
 #define NX_NIC_H2C_OPCODE_GET_LINKEVENT                        21
 #define NX_NIC_C2C_OPCODE                              22
+#define NX_NIC_H2C_OPCODE_CONFIG_BRIDGING               23
 #define NX_NIC_H2C_OPCODE_CONFIG_HW_LRO                        24
 #define NX_NIC_H2C_OPCODE_LAST                         25
 
@@ -1039,6 +1078,9 @@ typedef struct {
 #define LINKEVENT_LINKSPEED_MBPS       0
 #define LINKEVENT_LINKSPEED_ENCODED    1
 
+#define AUTO_FW_RESET_ENABLED  0xEF10AF12
+#define AUTO_FW_RESET_DISABLED 0xDCBAAF12
+
 /* firmware response header:
  *     63:58 - message type
  *     57:56 - owner
@@ -1085,6 +1127,8 @@ typedef struct {
 #define NETXEN_NIC_MSI_ENABLED         0x02
 #define NETXEN_NIC_MSIX_ENABLED                0x04
 #define NETXEN_NIC_LRO_ENABLED         0x08
+#define NETXEN_NIC_BRIDGE_ENABLED       0X10
+#define NETXEN_NIC_DIAG_ENABLED                0x20
 #define NETXEN_IS_MSI_FAMILY(adapter) \
        ((adapter)->flags & (NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED))
 
@@ -1098,6 +1142,10 @@ typedef struct {
 #define NETXEN_ADAPTER_UP_MAGIC 777
 #define NETXEN_NIC_PEG_TUNE 0
 
+#define __NX_FW_ATTACHED               0
+#define __NX_DEV_UP                    1
+#define __NX_RESETTING                 2
+
 struct netxen_dummy_dma {
        void *addr;
        dma_addr_t phys_addr;
@@ -1110,10 +1158,6 @@ struct netxen_adapter {
        struct pci_dev *pdev;
        struct list_head mac_list;
 
-       u32 curr_window;
-       u32 crb_win;
-       rwlock_t adapter_lock;
-
        spinlock_t tx_clean_lock;
 
        u16 num_txd;
@@ -1134,7 +1178,10 @@ struct netxen_adapter {
        u8 max_mc_count;
        u8 rss_supported;
        u8 link_changed;
-       u32 resv3;
+       u8 fw_wait_cnt;
+       u8 fw_fail_cnt;
+       u8 tx_timeo_cnt;
+       u8 need_fw_reset;
 
        u8 has_link_events;
        u8 fw_type;
@@ -1152,8 +1199,10 @@ struct netxen_adapter {
        u32 irq;
        u32 temp;
 
-       u32 msi_tgt_status;
-       u32 resv4;
+       u32 int_vec_bit;
+       u32 heartbit;
+
+       u8 mac_addr[ETH_ALEN];
 
        struct netxen_adapter_stats stats;
 
@@ -1169,30 +1218,35 @@ struct netxen_adapter {
        int (*init_port) (struct netxen_adapter *, int);
        int (*stop_port) (struct netxen_adapter *);
 
-       u32 (*hw_read_wx)(struct netxen_adapter *, ulong);
-       int (*hw_write_wx)(struct netxen_adapter *, ulong, u32);
-       int (*pci_mem_read)(struct netxen_adapter *, u64, void *, int);
-       int (*pci_mem_write)(struct netxen_adapter *, u64, void *, int);
-       int (*pci_write_immediate)(struct netxen_adapter *, u64, u32);
-       u32 (*pci_read_immediate)(struct netxen_adapter *, u64);
-       unsigned long (*pci_set_window)(struct netxen_adapter *,
-                       unsigned long long);
+       u32 (*crb_read)(struct netxen_adapter *, ulong);
+       int (*crb_write)(struct netxen_adapter *, ulong, u32);
 
-       struct netxen_legacy_intr_set legacy_intr;
+       int (*pci_mem_read)(struct netxen_adapter *, u64, u64 *);
+       int (*pci_mem_write)(struct netxen_adapter *, u64, u64);
+
+       int (*pci_set_window)(struct netxen_adapter *, u64, u32 *);
+
+       u32 (*io_read)(struct netxen_adapter *, void __iomem *);
+       void (*io_write)(struct netxen_adapter *, void __iomem *, u32);
+
+       void __iomem    *tgt_mask_reg;
+       void __iomem    *pci_int_reg;
+       void __iomem    *tgt_status_reg;
+       void __iomem    *crb_int_state_reg;
+       void __iomem    *isr_int_vec;
 
        struct msix_entry msix_entries[MSIX_ENTRIES_PER_ADAPTER];
 
        struct netxen_dummy_dma dummy_dma;
 
-       struct work_struct watchdog_task;
-       struct timer_list watchdog_timer;
-       struct work_struct  tx_timeout_task;
+       struct delayed_work fw_work;
 
-       struct net_device_stats net_stats;
+       struct work_struct  tx_timeout_task;
 
        nx_nic_intr_coalesce_t coal;
 
-       u32 resv5;
+       unsigned long state;
+       __le32 file_prd_off;    /*File fw product offset*/
        u32 fw_version;
        const struct firmware *fw;
 };
@@ -1211,9 +1265,13 @@ int netxen_p2_nic_set_mac_addr(struct netxen_adapter *adapter, u8 *addr);
 int netxen_p3_nic_set_mac_addr(struct netxen_adapter *adapter, u8 *addr);
 
 #define NXRD32(adapter, off) \
-       (adapter->hw_read_wx(adapter, off))
+       (adapter->crb_read(adapter, off))
 #define NXWR32(adapter, off, val) \
-       (adapter->hw_write_wx(adapter, off, val))
+       (adapter->crb_write(adapter, off, val))
+#define NXRDIO(adapter, addr) \
+       (adapter->io_read(adapter, addr))
+#define NXWRIO(adapter, addr, val) \
+       (adapter->io_write(adapter, addr, val))
 
 int netxen_pcie_sem_lock(struct netxen_adapter *, int, u32);
 void netxen_pcie_sem_unlock(struct netxen_adapter *, int);
@@ -1240,43 +1298,8 @@ void netxen_pcie_sem_unlock(struct netxen_adapter *, int);
        netxen_pcie_sem_unlock((a), 7)
 
 int netxen_nic_get_board_info(struct netxen_adapter *adapter);
-void netxen_nic_get_firmware_info(struct netxen_adapter *adapter);
 int netxen_nic_wol_supported(struct netxen_adapter *adapter);
 
-u32 netxen_nic_hw_read_wx_128M(struct netxen_adapter *adapter, ulong off);
-int netxen_nic_hw_write_wx_128M(struct netxen_adapter *adapter,
-               ulong off, u32 data);
-int netxen_nic_pci_mem_read_128M(struct netxen_adapter *adapter,
-               u64 off, void *data, int size);
-int netxen_nic_pci_mem_write_128M(struct netxen_adapter *adapter,
-               u64 off, void *data, int size);
-int netxen_nic_pci_write_immediate_128M(struct netxen_adapter *adapter,
-               u64 off, u32 data);
-u32 netxen_nic_pci_read_immediate_128M(struct netxen_adapter *adapter, u64 off);
-void netxen_nic_pci_write_normalize_128M(struct netxen_adapter *adapter,
-               u64 off, u32 data);
-u32 netxen_nic_pci_read_normalize_128M(struct netxen_adapter *adapter, u64 off);
-unsigned long netxen_nic_pci_set_window_128M(struct netxen_adapter *adapter,
-               unsigned long long addr);
-void netxen_nic_pci_change_crbwindow_128M(struct netxen_adapter *adapter,
-               u32 wndw);
-
-u32 netxen_nic_hw_read_wx_2M(struct netxen_adapter *adapter, ulong off);
-int netxen_nic_hw_write_wx_2M(struct netxen_adapter *adapter,
-               ulong off, u32 data);
-int netxen_nic_pci_mem_read_2M(struct netxen_adapter *adapter,
-               u64 off, void *data, int size);
-int netxen_nic_pci_mem_write_2M(struct netxen_adapter *adapter,
-               u64 off, void *data, int size);
-int netxen_nic_pci_write_immediate_2M(struct netxen_adapter *adapter,
-               u64 off, u32 data);
-u32 netxen_nic_pci_read_immediate_2M(struct netxen_adapter *adapter, u64 off);
-void netxen_nic_pci_write_normalize_2M(struct netxen_adapter *adapter,
-               u64 off, u32 data);
-u32 netxen_nic_pci_read_normalize_2M(struct netxen_adapter *adapter, u64 off);
-unsigned long netxen_nic_pci_set_window_2M(struct netxen_adapter *adapter,
-               unsigned long long addr);
-
 /* Functions from netxen_nic_init.c */
 int netxen_init_dummy_dma(struct netxen_adapter *adapter);
 void netxen_free_dummy_dma(struct netxen_adapter *adapter);
@@ -1286,7 +1309,7 @@ int netxen_load_firmware(struct netxen_adapter *adapter);
 int netxen_need_fw_reset(struct netxen_adapter *adapter);
 void netxen_request_firmware(struct netxen_adapter *adapter);
 void netxen_release_firmware(struct netxen_adapter *adapter);
-int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose);
+int netxen_pinit_from_rom(struct netxen_adapter *adapter);
 
 int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr, int *valp);
 int netxen_rom_fast_read_words(struct netxen_adapter *adapter, int addr,
@@ -1304,13 +1327,15 @@ int netxen_rom_se(struct netxen_adapter *adapter, int addr);
 int netxen_alloc_sw_resources(struct netxen_adapter *adapter);
 void netxen_free_sw_resources(struct netxen_adapter *adapter);
 
+void netxen_setup_hwops(struct netxen_adapter *adapter);
+void __iomem *netxen_get_ioaddr(struct netxen_adapter *, u32);
+
 int netxen_alloc_hw_resources(struct netxen_adapter *adapter);
 void netxen_free_hw_resources(struct netxen_adapter *adapter);
 
 void netxen_release_rx_buffers(struct netxen_adapter *adapter);
 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_nic_clear_stats(struct netxen_adapter *adapter);
 void netxen_watchdog_task(struct work_struct *work);
@@ -1332,6 +1357,7 @@ void netxen_advert_link_change(struct netxen_adapter *adapter, int linkup);
 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_config_hw_lro(struct netxen_adapter *adapter, int enable);
+int netxen_config_bridged_mode(struct netxen_adapter *adapter, int enable);
 int netxen_send_lro_cleanup(struct netxen_adapter *adapter);
 
 int netxen_nic_set_mac(struct net_device *netdev, void *p);
@@ -1401,12 +1427,12 @@ static inline u32 netxen_tx_avail(struct nx_host_tx_ring *tx_ring)
 
 }
 
-int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, __le64 *mac);
-int netxen_p3_get_mac_addr(struct netxen_adapter *adapter, __le64 *mac);
+int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, u64 *mac);
+int netxen_p3_get_mac_addr(struct netxen_adapter *adapter, u64 *mac);
 extern void netxen_change_ringparam(struct netxen_adapter *adapter);
 extern int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr,
                                int *valp);
 
-extern struct ethtool_ops netxen_nic_ethtool_ops;
+extern const struct ethtool_ops netxen_nic_ethtool_ops;
 
 #endif                         /* __NETXEN_NIC_H_ */