]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/net/vxge/vxge-config.h
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / net / vxge / vxge-config.h
index 5c00861b6c2c08351f1f52023f4037dfaad45236..e249e288d160af59634a0c60c7b55319ab8b7469 100644 (file)
 #define VXGE_CACHE_LINE_SIZE 128
 #endif
 
-#define vxge_os_vaprintf(level, mask, fmt, ...) { \
-       char buff[255]; \
-               snprintf(buff, 255, fmt, __VA_ARGS__); \
-               printk(buff); \
-               printk("\n"); \
-}
-
 #ifndef VXGE_ALIGN
 #define VXGE_ALIGN(adrs, size) \
        (((size) - (((u64)adrs) & ((size)-1))) & ((size)-1))
 #define VXGE_HW_MAX_MTU                                9600
 #define VXGE_HW_DEFAULT_MTU                    1500
 
-#ifdef VXGE_DEBUG_ASSERT
+#define VXGE_HW_MAX_ROM_IMAGES                 8
 
+struct eprom_image {
+       u8 is_valid:1;
+       u8 index;
+       u8 type;
+       u16 version;
+};
+
+#ifdef VXGE_DEBUG_ASSERT
 /**
  * vxge_assert
  * @test: C-condition to check
  * compilation
  * time.
  */
-#define vxge_assert(test) { \
-       if (!(test)) \
-               vxge_os_bug("bad cond: "#test" at %s:%d\n", \
-                               __FILE__, __LINE__); }
+#define vxge_assert(test) BUG_ON(!(test))
 #else
 #define vxge_assert(test)
 #endif /* end of VXGE_DEBUG_ASSERT */
 
 /**
- * enum enum vxge_debug_level
+ * enum vxge_debug_level
  * @VXGE_NONE: debug disabled
  * @VXGE_ERR: all errors going to be logged out
  * @VXGE_TRACE: all errors plus all kind of verbose tracing print outs
@@ -158,6 +156,47 @@ enum vxge_hw_device_link_state {
        VXGE_HW_LINK_UP
 };
 
+/**
+ * enum enum vxge_hw_fw_upgrade_code - FW upgrade return codes.
+ * @VXGE_HW_FW_UPGRADE_OK: All OK send next 16 bytes
+ * @VXGE_HW_FW_UPGRADE_DONE:  upload completed
+ * @VXGE_HW_FW_UPGRADE_ERR:  upload error
+ * @VXGE_FW_UPGRADE_BYTES2SKIP:  skip bytes in the stream
+ *
+ */
+enum vxge_hw_fw_upgrade_code {
+       VXGE_HW_FW_UPGRADE_OK           = 0,
+       VXGE_HW_FW_UPGRADE_DONE         = 1,
+       VXGE_HW_FW_UPGRADE_ERR          = 2,
+       VXGE_FW_UPGRADE_BYTES2SKIP      = 3
+};
+
+/**
+ * enum enum vxge_hw_fw_upgrade_err_code - FW upgrade error codes.
+ * @VXGE_HW_FW_UPGRADE_ERR_CORRUPT_DATA_1: corrupt data
+ * @VXGE_HW_FW_UPGRADE_ERR_BUFFER_OVERFLOW: buffer overflow
+ * @VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_3: invalid .ncf file
+ * @VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_4: invalid .ncf file
+ * @VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_5: invalid .ncf file
+ * @VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_6: invalid .ncf file
+ * @VXGE_HW_FW_UPGRADE_ERR_CORRUPT_DATA_7: corrupt data
+ * @VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_8: invalid .ncf file
+ * @VXGE_HW_FW_UPGRADE_ERR_GENERIC_ERROR_UNKNOWN: generic error unknown type
+ * @VXGE_HW_FW_UPGRADE_ERR_FAILED_TO_FLASH: failed to flash image check failed
+ */
+enum vxge_hw_fw_upgrade_err_code {
+       VXGE_HW_FW_UPGRADE_ERR_CORRUPT_DATA_1           = 1,
+       VXGE_HW_FW_UPGRADE_ERR_BUFFER_OVERFLOW          = 2,
+       VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_3           = 3,
+       VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_4           = 4,
+       VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_5           = 5,
+       VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_6           = 6,
+       VXGE_HW_FW_UPGRADE_ERR_CORRUPT_DATA_7           = 7,
+       VXGE_HW_FW_UPGRADE_ERR_INV_NCF_FILE_8           = 8,
+       VXGE_HW_FW_UPGRADE_ERR_GENERIC_ERROR_UNKNOWN    = 9,
+       VXGE_HW_FW_UPGRADE_ERR_FAILED_TO_FLASH          = 10
+};
+
 /**
  * struct vxge_hw_device_date - Date Format
  * @day: Day
@@ -275,9 +314,9 @@ struct vxge_hw_ring_config {
 #define VXGE_HW_RING_DEFAULT                                   1
 
        u32                             ring_blocks;
-#define VXGE_HW_MIN_RING_BLOCKS                                1
-#define VXGE_HW_MAX_RING_BLOCKS                                128
-#define VXGE_HW_DEF_RING_BLOCKS                                2
+#define VXGE_HW_MIN_RING_BLOCKS                                        1
+#define VXGE_HW_MAX_RING_BLOCKS                                        128
+#define VXGE_HW_DEF_RING_BLOCKS                                        2
 
        u32                             buffer_mode;
 #define VXGE_HW_RING_RXD_BUFFER_MODE_1                         1
@@ -465,7 +504,6 @@ struct vxge_hw_device_config {
  * See also: vxge_hw_driver_initialize().
  */
 struct vxge_hw_uld_cbs {
-
        void (*link_up)(struct __vxge_hw_device *devh);
        void (*link_down)(struct __vxge_hw_device *devh);
        void (*crit_err)(struct __vxge_hw_device *devh,
@@ -652,6 +690,7 @@ struct __vxge_hw_virtualpath {
        struct vxge_hw_vpath_stats_hw_info      *hw_stats;
        struct vxge_hw_vpath_stats_hw_info      *hw_stats_sav;
        struct vxge_hw_vpath_stats_sw_info      *sw_stats;
+       spinlock_t lock;
 };
 
 /*
@@ -661,7 +700,7 @@ struct __vxge_hw_virtualpath {
  *
  * This structure is used to store the callback information.
  */
-struct __vxge_hw_vpath_handle{
+struct __vxge_hw_vpath_handle {
        struct list_head        item;
        struct __vxge_hw_virtualpath    *vpath;
 };
@@ -674,9 +713,6 @@ struct __vxge_hw_vpath_handle{
 /**
  * struct __vxge_hw_device  - Hal device object
  * @magic: Magic Number
- * @device_id: PCI Device Id of the adapter
- * @major_revision: PCI Device major revision
- * @minor_revision: PCI Device minor revision
  * @bar0: BAR0 virtual address.
  * @pdev: Physical device handle
  * @config: Confguration passed by the LL driver at initialization
@@ -688,9 +724,6 @@ struct __vxge_hw_device {
        u32                             magic;
 #define VXGE_HW_DEVICE_MAGIC           0x12345678
 #define VXGE_HW_DEVICE_DEAD            0xDEADDEAD
-       u16                             device_id;
-       u8                              major_revision;
-       u8                              minor_revision;
        void __iomem                    *bar0;
        struct pci_dev                  *pdev;
        struct net_device               *ndev;
@@ -731,6 +764,7 @@ struct __vxge_hw_device {
        u32                             debug_level;
        u32                             level_err;
        u32                             level_trace;
+       u16 eprom_versions[VXGE_HW_MAX_ROM_IMAGES];
 };
 
 #define VXGE_HW_INFO_LEN       64
@@ -781,8 +815,8 @@ struct vxge_hw_device_hw_info {
        u8              serial_number[VXGE_HW_INFO_LEN];
        u8              part_number[VXGE_HW_INFO_LEN];
        u8              product_desc[VXGE_HW_INFO_LEN];
-       u8 (mac_addrs)[VXGE_HW_MAX_VIRTUAL_PATHS][ETH_ALEN];
-       u8 (mac_addr_masks)[VXGE_HW_MAX_VIRTUAL_PATHS][ETH_ALEN];
+       u8 mac_addrs[VXGE_HW_MAX_VIRTUAL_PATHS][ETH_ALEN];
+       u8 mac_addr_masks[VXGE_HW_MAX_VIRTUAL_PATHS][ETH_ALEN];
 };
 
 /**
@@ -829,20 +863,10 @@ struct vxge_hw_device_attr {
                                loc, \
                                offset, \
                                &val64);                        \
-                                                               \
        if (status != VXGE_HW_OK)                               \
                return status;                                          \
 }
 
-#define VXGE_HW_VPATH_STATS_PIO_READ(offset) {                         \
-       status = __vxge_hw_vpath_stats_access(vpath, \
-                       VXGE_HW_STATS_OP_READ, \
-                       offset, \
-                       &val64);                                        \
-       if (status != VXGE_HW_OK)                                       \
-               return status;                                          \
-}
-
 /*
  * struct __vxge_hw_ring - Ring channel.
  * @channel: Channel "base" of this ring, the common part of all HW
@@ -1114,7 +1138,7 @@ struct __vxge_hw_non_offload_db_wrapper {
  *             lookup to determine the transmit port.
  *             01: Send on physical Port1.
  *             10: Send on physical Port0.
      *              11: Send on both ports.
*            11: Send on both ports.
  *             Bits 18 to 21 - Reserved
  *             Bits 22 to 23 - Gather_Code. This field is set by the host and
  *             is used to describe how individual buffers comprise a frame.
@@ -1413,12 +1437,12 @@ enum vxge_hw_rth_algoritms {
  * See also: vxge_hw_vpath_rts_rth_set(), vxge_hw_vpath_rts_rth_get().
  */
 struct vxge_hw_rth_hash_types {
-       u8 hash_type_tcpipv4_en;
-       u8 hash_type_ipv4_en;
-       u8 hash_type_tcpipv6_en;
-       u8 hash_type_ipv6_en;
-       u8 hash_type_tcpipv6ex_en;
-       u8 hash_type_ipv6ex_en;
+       u8 hash_type_tcpipv4_en:1,
+          hash_type_ipv4_en:1,
+          hash_type_tcpipv6_en:1,
+          hash_type_ipv6_en:1,
+          hash_type_tcpipv6ex_en:1,
+          hash_type_ipv6ex_en:1;
 };
 
 void vxge_hw_device_debug_set(
@@ -1893,6 +1917,15 @@ out:
        return vaddr;
 }
 
+static inline void vxge_os_dma_free(struct pci_dev *pdev, const void *vaddr,
+                       struct pci_dev **p_dma_acch)
+{
+       unsigned long misaligned = *(unsigned long *)p_dma_acch;
+       u8 *tmp = (u8 *)vaddr;
+       tmp -= misaligned;
+       kfree((void *)tmp);
+}
+
 /*
  * __vxge_hw_mempool_item_priv - will return pointer on per item private space
  */
@@ -1962,7 +1995,6 @@ enum vxge_hw_status vxge_hw_vpath_mtu_set(
 void
 vxge_hw_vpath_rx_doorbell_init(struct __vxge_hw_vpath_handle *vp);
 
-
 #ifndef readq
 static inline u64 readq(void __iomem *addr)
 {
@@ -2000,7 +2032,7 @@ enum vxge_hw_status
 vxge_hw_vpath_strip_fcs_check(struct __vxge_hw_device *hldev, u64 vpath_mask);
 
 /**
- * vxge_debug
+ * vxge_debug_ll
  * @level: level of debug verbosity.
  * @mask: mask for the debug
  * @buf: Circular buffer for tracing
@@ -2012,26 +2044,13 @@ vxge_hw_vpath_strip_fcs_check(struct __vxge_hw_device *hldev, u64 vpath_mask);
  * may be compiled out if DEBUG macro was never defined.
  * See also: enum vxge_debug_level{}.
  */
-
-#define vxge_trace_aux(level, mask, fmt, ...) \
-{\
-               vxge_os_vaprintf(level, mask, fmt, __VA_ARGS__);\
-}
-
-#define vxge_debug(module, level, mask, fmt, ...) { \
-if ((level >= VXGE_TRACE && ((module & VXGE_DEBUG_TRACE_MASK) == module)) || \
-       (level >= VXGE_ERR && ((module & VXGE_DEBUG_ERR_MASK) == module))) {\
-       if ((mask & VXGE_DEBUG_MASK) == mask)\
-               vxge_trace_aux(level, mask, fmt, __VA_ARGS__); \
-} \
-}
-
 #if (VXGE_COMPONENT_LL & VXGE_DEBUG_MODULE_MASK)
-#define vxge_debug_ll(level, mask, fmt, ...) \
-{\
-       vxge_debug(VXGE_COMPONENT_LL, level, mask, fmt, __VA_ARGS__);\
-}
-
+#define vxge_debug_ll(level, mask, fmt, ...) do {                             \
+       if ((level >= VXGE_ERR && VXGE_COMPONENT_LL & VXGE_DEBUG_ERR_MASK) ||  \
+           (level >= VXGE_TRACE && VXGE_COMPONENT_LL & VXGE_DEBUG_TRACE_MASK))\
+               if ((mask & VXGE_DEBUG_MASK) == mask)                          \
+                       printk(fmt "\n", __VA_ARGS__);                         \
+} while (0)
 #else
 #define vxge_debug_ll(level, mask, fmt, ...)
 #endif
@@ -2051,4 +2070,26 @@ enum vxge_hw_status vxge_hw_vpath_rts_rth_set(
 
 enum vxge_hw_status
 __vxge_hw_device_is_privilaged(u32 host_type, u32 func_id);
+
+#define VXGE_HW_MIN_SUCCESSIVE_IDLE_COUNT 5
+#define VXGE_HW_MAX_POLLING_COUNT 100
+
+void
+vxge_hw_device_wait_receive_idle(struct __vxge_hw_device *hldev);
+
+enum vxge_hw_status
+vxge_hw_upgrade_read_version(struct __vxge_hw_device *hldev, u32 *major,
+                            u32 *minor, u32 *build);
+
+enum vxge_hw_status vxge_hw_flash_fw(struct __vxge_hw_device *hldev);
+
+enum vxge_hw_status
+vxge_update_fw_image(struct __vxge_hw_device *hldev, const u8 *filebuf,
+                    int size);
+
+enum vxge_hw_status
+vxge_hw_vpath_eprom_img_ver_get(struct __vxge_hw_device *hldev,
+                               struct eprom_image *eprom_image_data);
+
+int vxge_hw_vpath_wait_receive_idle(struct __vxge_hw_device *hldev, u32 vp_id);
 #endif