be2net: Add support for setting and getting rx flow hash options
[cascardo/linux.git] / drivers / net / ethernet / emulex / benet / be_cmds.h
index 9697086..4d03789 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005 - 2011 Emulex
+ * Copyright (C) 2005 - 2013 Emulex
  * All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
@@ -188,6 +188,7 @@ struct be_mcc_mailbox {
 #define OPCODE_COMMON_GET_BEACON_STATE                 70
 #define OPCODE_COMMON_READ_TRANSRECV_DATA              73
 #define OPCODE_COMMON_GET_PORT_NAME                    77
+#define OPCODE_COMMON_SET_INTERRUPT_ENABLE             89
 #define OPCODE_COMMON_GET_PHY_DETAILS                  102
 #define OPCODE_COMMON_SET_DRIVER_FUNCTION_CAP          103
 #define OPCODE_COMMON_GET_CNTL_ADDITIONAL_ATTRIBUTES   121
@@ -473,46 +474,27 @@ struct be_cmd_resp_mcc_create {
 #define BE_ETH_TX_RING_TYPE_STANDARD           2
 #define BE_ULP1_NUM                            1
 
-/* Pseudo amap definition in which each bit of the actual structure is defined
- * as a byte: used to calculate offset/shift/mask of each field */
-struct amap_tx_context {
-       u8 if_id[16];           /* dword 0 */
-       u8 tx_ring_size[4];     /* dword 0 */
-       u8 rsvd1[26];           /* dword 0 */
-       u8 pci_func_id[8];      /* dword 1 */
-       u8 rsvd2[9];            /* dword 1 */
-       u8 ctx_valid;           /* dword 1 */
-       u8 cq_id_send[16];      /* dword 2 */
-       u8 rsvd3[16];           /* dword 2 */
-       u8 rsvd4[32];           /* dword 3 */
-       u8 rsvd5[32];           /* dword 4 */
-       u8 rsvd6[32];           /* dword 5 */
-       u8 rsvd7[32];           /* dword 6 */
-       u8 rsvd8[32];           /* dword 7 */
-       u8 rsvd9[32];           /* dword 8 */
-       u8 rsvd10[32];          /* dword 9 */
-       u8 rsvd11[32];          /* dword 10 */
-       u8 rsvd12[32];          /* dword 11 */
-       u8 rsvd13[32];          /* dword 12 */
-       u8 rsvd14[32];          /* dword 13 */
-       u8 rsvd15[32];          /* dword 14 */
-       u8 rsvd16[32];          /* dword 15 */
-} __packed;
-
 struct be_cmd_req_eth_tx_create {
        struct be_cmd_req_hdr hdr;
        u8 num_pages;
        u8 ulp_num;
-       u8 type;
-       u8 bound_port;
-       u8 context[sizeof(struct amap_tx_context) / 8];
+       u16 type;
+       u16 if_id;
+       u8 queue_size;
+       u8 rsvd0;
+       u32 rsvd1;
+       u16 cq_id;
+       u16 rsvd2;
+       u32 rsvd3[13];
        struct phys_addr pages[8];
 } __packed;
 
 struct be_cmd_resp_eth_tx_create {
        struct be_cmd_resp_hdr hdr;
        u16 cid;
-       u16 rsvd0;
+       u16 rid;
+       u32 db_offset;
+       u32 rsvd0[4];
 } __packed;
 
 /******************** Create RxQ ***************************/
@@ -1066,7 +1048,6 @@ struct be_cmd_resp_modify_eq_delay {
 } __packed;
 
 /******************** Get FW Config *******************/
-#define BE_FUNCTION_CAPS_RSS                   0x2
 /* The HW can come up in either of the following multi-channel modes
  * based on the skew/IPL.
  */
@@ -1109,6 +1090,9 @@ struct be_cmd_resp_query_fw_cfg {
 #define RSS_ENABLE_UDP_IPV4                    0x10
 #define RSS_ENABLE_UDP_IPV6                    0x20
 
+#define L3_RSS_FLAGS                           (RXH_IP_DST | RXH_IP_SRC)
+#define L4_RSS_FLAGS                           (RXH_L4_B_0_1 | RXH_L4_B_2_3)
+
 struct be_cmd_req_rss_config {
        struct be_cmd_req_hdr hdr;
        u32 if_id;
@@ -1706,9 +1690,11 @@ struct be_cmd_req_set_ext_fat_caps {
        struct be_fat_conf_params set_params;
 };
 
-#define RESOURCE_DESC_SIZE                     72
-#define NIC_RESOURCE_DESC_TYPE_ID              0x41
+#define RESOURCE_DESC_SIZE                     88
+#define NIC_RESOURCE_DESC_TYPE_V0              0x41
+#define NIC_RESOURCE_DESC_TYPE_V1              0x51
 #define MAX_RESOURCE_DESC                      4
+#define MAX_RESOURCE_DESC_V1                   32
 
 /* QOS unit number */
 #define QUN                                    4
@@ -1774,6 +1760,12 @@ struct be_cmd_resp_get_profile_config {
        u8 func_param[MAX_RESOURCE_DESC * RESOURCE_DESC_SIZE];
 };
 
+struct be_cmd_resp_get_profile_config_v1 {
+       struct be_cmd_req_hdr hdr;
+       u32 desc_count;
+       u8 func_param[MAX_RESOURCE_DESC_V1 * RESOURCE_DESC_SIZE];
+};
+
 struct be_cmd_req_set_profile_config {
        struct be_cmd_req_hdr hdr;
        u32 rsvd;
@@ -1791,6 +1783,12 @@ struct be_cmd_enable_disable_vf {
        u8 rsvd[3];
 };
 
+struct be_cmd_req_intr_set {
+       struct be_cmd_req_hdr hdr;
+       u8 intr_enabled;
+       u8 rsvd[3];
+};
+
 static inline bool check_privilege(struct be_adapter *adapter, u32 flags)
 {
        return flags & adapter->cmd_privileges ? true : false;
@@ -1834,8 +1832,7 @@ extern int be_cmd_mccq_create(struct be_adapter *adapter,
                        struct be_queue_info *mccq,
                        struct be_queue_info *cq);
 extern int be_cmd_txq_create(struct be_adapter *adapter,
-                       struct be_queue_info *txq,
-                       struct be_queue_info *cq);
+                       struct be_tx_obj *txo);
 extern int be_cmd_rxq_create(struct be_adapter *adapter,
                        struct be_queue_info *rxq, u16 cq_id,
                        u16 frag_size, u32 if_id, u32 rss, u8 *rss_id);
@@ -1862,11 +1859,11 @@ extern int be_cmd_set_flow_control(struct be_adapter *adapter,
                        u32 tx_fc, u32 rx_fc);
 extern int be_cmd_get_flow_control(struct be_adapter *adapter,
                        u32 *tx_fc, u32 *rx_fc);
-extern int be_cmd_query_fw_cfg(struct be_adapter *adapter,
-                       u32 *port_num, u32 *function_mode, u32 *function_caps);
+extern int be_cmd_query_fw_cfg(struct be_adapter *adapter, u32 *port_num,
+                       u32 *function_mode, u32 *function_caps, u16 *asic_rev);
 extern int be_cmd_reset_function(struct be_adapter *adapter);
 extern int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable,
-                       u16 table_size);
+                            u32 rss_hash_opts, u16 table_size);
 extern int be_process_mcc(struct be_adapter *adapter);
 extern int be_cmd_set_beacon_state(struct be_adapter *adapter,
                        u8 port_num, u8 beacon, u8 status, u8 state);
@@ -1931,10 +1928,11 @@ extern int lancer_test_and_set_rdy_state(struct be_adapter *adapter);
 extern int be_cmd_query_port_name(struct be_adapter *adapter, u8 *port_name);
 extern int be_cmd_get_func_config(struct be_adapter *adapter);
 extern int be_cmd_get_profile_config(struct be_adapter *adapter, u32 *cap_flags,
-                                    u8 domain);
+                                    u16 *txq_count, u8 domain);
 
 extern int be_cmd_set_profile_config(struct be_adapter *adapter, u32 bps,
                                     u8 domain);
 extern int be_cmd_get_if_id(struct be_adapter *adapter,
                            struct be_vf_cfg *vf_cfg, int vf_num);
 extern int be_cmd_enable_vf(struct be_adapter *adapter, u8 domain);
+extern int be_cmd_intr_set(struct be_adapter *adapter, bool intr_enable);