]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/net/ethernet/mellanox/mlx4/mlx4.h
mlx4_core: updated driver version to 1.1
[mv-sheeva.git] / drivers / net / ethernet / mellanox / mlx4 / mlx4.h
index 2488be8bb02a38942a909925a44cf14dcf054ffd..a80121a2b5195cf245bd16842f3755c822646781 100644 (file)
@@ -49,8 +49,9 @@
 #include <linux/mlx4/cmd.h>
 
 #define DRV_NAME       "mlx4_core"
-#define DRV_VERSION    "1.0"
-#define DRV_RELDATE    "July 14, 2011"
+#define PFX            DRV_NAME ": "
+#define DRV_VERSION    "1.1"
+#define DRV_RELDATE    "Dec, 2011"
 
 enum {
        MLX4_HCR_BASE           = 0x80680,
@@ -61,9 +62,9 @@ enum {
 };
 
 enum {
-       MLX4_MGM_ENTRY_SIZE     =  0x100,
-       MLX4_QP_PER_MGM         = 4 * (MLX4_MGM_ENTRY_SIZE / 16 - 2),
-       MLX4_MTT_ENTRY_PER_SEG  = 8
+       MLX4_MAX_MGM_ENTRY_SIZE = 0x1000,
+       MLX4_MAX_QP_PER_MGM     = 4 * (MLX4_MAX_MGM_ENTRY_SIZE / 16 - 2),
+       MLX4_MTT_ENTRY_PER_SEG  = 8,
 };
 
 enum {
@@ -190,6 +191,9 @@ do {                                                                        \
 #define mlx4_warn(mdev, format, arg...) \
        dev_warn(&mdev->pdev->dev, format, ##arg)
 
+extern int mlx4_log_num_mgm_entry_size;
+extern int log_mtts_per_seg;
+
 #define MLX4_MAX_NUM_SLAVES    (MLX4_MAX_NUM_PF + MLX4_MAX_NUM_VF)
 #define ALL_SLAVES 0xff
 
@@ -238,7 +242,7 @@ struct mlx4_mpt_entry {
        __be32 win_cnt;
        u8      reserved1[3];
        u8      mtt_rep;
-       __be64 mtt_seg;
+       __be64 mtt_addr;
        __be32 mtt_sz;
        __be32 entity_size;
        __be32 first_byte_offset;
@@ -417,8 +421,11 @@ struct mlx4_comm {
        u32                     slave_read;
 };
 
-#define MGM_QPN_MASK       0x00FFFFFF
-#define MGM_BLCK_LB_BIT    30
+enum {
+       MLX4_MCAST_CONFIG       = 0,
+       MLX4_MCAST_DISABLE      = 1,
+       MLX4_MCAST_ENABLE       = 2,
+};
 
 #define VLAN_FLTR_SIZE 128
 
@@ -426,6 +433,11 @@ struct mlx4_vlan_fltr {
        __be32 entry[VLAN_FLTR_SIZE];
 };
 
+struct mlx4_mcast_entry {
+       struct list_head list;
+       u64 addr;
+};
+
 struct mlx4_promisc_qp {
        struct list_head list;
        u32 qpn;
@@ -437,14 +449,6 @@ struct mlx4_steer_index {
        struct list_head duplicates;
 };
 
-struct mlx4_mgm {
-       __be32                  next_gid_index;
-       __be32                  members_count;
-       u32                     reserved[2];
-       u8                      gid[16];
-       __be32                  qp[MLX4_QP_PER_MGM];
-};
-
 struct mlx4_slave_state {
        u8 comm_toggle;
        u8 last_cmd;
@@ -624,6 +628,48 @@ struct mlx4_vlan_table {
        int                     max;
 };
 
+#define SET_PORT_GEN_ALL_VALID         0x7
+#define SET_PORT_PROMISC_SHIFT         31
+#define SET_PORT_MC_PROMISC_SHIFT      30
+
+enum {
+       MCAST_DIRECT_ONLY       = 0,
+       MCAST_DIRECT            = 1,
+       MCAST_DEFAULT           = 2
+};
+
+
+struct mlx4_set_port_general_context {
+       u8 reserved[3];
+       u8 flags;
+       u16 reserved2;
+       __be16 mtu;
+       u8 pptx;
+       u8 pfctx;
+       u16 reserved3;
+       u8 pprx;
+       u8 pfcrx;
+       u16 reserved4;
+};
+
+struct mlx4_set_port_rqp_calc_context {
+       __be32 base_qpn;
+       u8 rererved;
+       u8 n_mac;
+       u8 n_vlan;
+       u8 n_prio;
+       u8 reserved2[3];
+       u8 mac_miss;
+       u8 intra_no_vlan;
+       u8 no_vlan;
+       u8 intra_vlan_miss;
+       u8 vlan_miss;
+       u8 reserved3[3];
+       u8 no_vlan_prio;
+       __be32 promisc;
+       __be32 mcast;
+};
+
 struct mlx4_mac_entry {
        u64 mac;
 };
@@ -912,10 +958,15 @@ int mlx4_GEN_EQE(struct mlx4_dev *dev, int slave, struct mlx4_eqe *eqe);
 
 int mlx4_cmd_init(struct mlx4_dev *dev);
 void mlx4_cmd_cleanup(struct mlx4_dev *dev);
+int mlx4_multi_func_init(struct mlx4_dev *dev);
+void mlx4_multi_func_cleanup(struct mlx4_dev *dev);
 void mlx4_cmd_event(struct mlx4_dev *dev, u16 token, u8 status, u64 out_param);
 int mlx4_cmd_use_events(struct mlx4_dev *dev);
 void mlx4_cmd_use_polling(struct mlx4_dev *dev);
 
+int mlx4_comm_cmd(struct mlx4_dev *dev, u8 cmd, u16 param,
+                 unsigned long timeout);
+
 void mlx4_cq_completion(struct mlx4_dev *dev, u32 cqn);
 void mlx4_cq_event(struct mlx4_dev *dev, u32 cqn, int event_type);
 
@@ -1021,6 +1072,9 @@ int mlx4_QUERY_IF_STAT_wrapper(struct mlx4_dev *dev, int slave,
                               struct mlx4_cmd_mailbox *outbox,
                               struct mlx4_cmd_info *cmd);
 
+int mlx4_get_mgm_entry_size(struct mlx4_dev *dev);
+int mlx4_get_qp_per_mgm(struct mlx4_dev *dev);
+
 static inline void set_param_l(u64 *arg, u32 val)
 {
        *((u32 *)arg) = val;