net/qede/base: semantic changes
[dpdk.git] / drivers / net / qede / base / ecore_dev_api.h
index 77f4869..e64a768 100644 (file)
@@ -13,8 +13,6 @@
 #include "ecore_chain.h"
 #include "ecore_int_api.h"
 
-struct ecore_tunn_start_params;
-
 /**
  * @brief ecore_init_dp - initialize the debug level
  *
@@ -59,26 +57,51 @@ enum _ecore_status_t ecore_resc_alloc(struct ecore_dev *p_dev);
  */
 void ecore_resc_setup(struct ecore_dev *p_dev);
 
+struct ecore_hw_init_params {
+       /* Tunnelling parameters */
+       struct ecore_tunnel_info *p_tunn;
+
+       bool b_hw_start;
+
+       /* Interrupt mode [msix, inta, etc.] to use */
+       enum ecore_int_mode int_mode;
+
+       /* NPAR tx switching to be used for vports configured for tx-switching
+        */
+       bool allow_npar_tx_switch;
+
+       /* Binary fw data pointer in binary fw file */
+       const u8 *bin_fw_data;
+
+       /* Indicates whether the driver is running over a crash kernel.
+        * As part of the load request, this will be used for providing the
+        * driver role to the MFW.
+        * In case of a crash kernel over PDA - this should be set to false.
+        */
+       bool is_crash_kernel;
+
+       /* The timeout value that the MFW should use when locking the engine for
+        * the driver load process.
+        * A value of '0' means the default value, and '255' means no timeout.
+        */
+       u8 mfw_timeout_val;
+#define ECORE_LOAD_REQ_LOCK_TO_DEFAULT 0
+#define ECORE_LOAD_REQ_LOCK_TO_NONE    255
+
+       /* Avoid engine reset when first PF loads on it */
+       bool avoid_eng_reset;
+};
+
 /**
  * @brief ecore_hw_init -
  *
  * @param p_dev
- * @param p_tunn - tunneling parameters
- * @param b_hw_start
- * @param int_mode - interrupt mode [msix, inta, etc.] to use.
- * @param allow_npar_tx_switch - npar tx switching to be used
- *       for vports configured for tx-switching.
- * @param bin_fw_data - binary fw data pointer in binary fw file.
- *                     Pass NULL if not using binary fw file.
+ * @param p_params
  *
  * @return enum _ecore_status_t
  */
 enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev,
-                                  struct ecore_tunn_start_params *p_tunn,
-                                  bool b_hw_start,
-                                  enum ecore_int_mode int_mode,
-                                  bool allow_npar_tx_switch,
-                                  const u8 *bin_fw_data);
+                                  struct ecore_hw_init_params *p_params);
 
 /**
  * @brief ecore_hw_timers_stop_all -
@@ -100,14 +123,15 @@ enum _ecore_status_t ecore_hw_stop(struct ecore_dev *p_dev);
 
 /**
  * @brief ecore_hw_stop_fastpath -should be called incase
- *        slowpath is still required for the device, but
- *        fastpath is not.
+ *        slowpath is still required for the device,
+ *        but fastpath is not.
  *
  * @param p_dev
  *
  */
 void ecore_hw_stop_fastpath(struct ecore_dev *p_dev);
 
+#ifndef LINUX_REMOVE
 /**
  * @brief ecore_prepare_hibernate -should be called when
  *        the system is going into the hibernate state
@@ -116,6 +140,7 @@ void ecore_hw_stop_fastpath(struct ecore_dev *p_dev);
  *
  */
 void ecore_prepare_hibernate(struct ecore_dev *p_dev);
+#endif
 
 /**
  * @brief ecore_hw_start_fastpath -restart fastpath traffic,
@@ -126,24 +151,59 @@ void ecore_prepare_hibernate(struct ecore_dev *p_dev);
  */
 void ecore_hw_start_fastpath(struct ecore_hwfn *p_hwfn);
 
-/**
- * @brief ecore_hw_reset -
- *
- * @param p_dev
- *
- * @return enum _ecore_status_t
- */
-enum _ecore_status_t ecore_hw_reset(struct ecore_dev *p_dev);
+enum ecore_hw_prepare_result {
+       ECORE_HW_PREPARE_SUCCESS,
+
+       /* FAILED results indicate probe has failed & cleaned up */
+       ECORE_HW_PREPARE_FAILED_ENG2,
+       ECORE_HW_PREPARE_FAILED_ME,
+       ECORE_HW_PREPARE_FAILED_MEM,
+       ECORE_HW_PREPARE_FAILED_DEV,
+       ECORE_HW_PREPARE_FAILED_NVM,
+
+       /* BAD results indicate probe is passed even though some wrongness
+        * has occurred; Trying to actually use [I.e., hw_init()] might have
+        * dire reprecautions.
+        */
+       ECORE_HW_PREPARE_BAD_IOV,
+       ECORE_HW_PREPARE_BAD_MCP,
+       ECORE_HW_PREPARE_BAD_IGU,
+};
+
+struct ecore_hw_prepare_params {
+       /* Personality to initialize */
+       int personality;
+
+       /* Force the driver's default resource allocation */
+       bool drv_resc_alloc;
+
+       /* Check the reg_fifo after any register access */
+       bool chk_reg_fifo;
+
+       /* Request the MFW to initiate PF FLR */
+       bool initiate_pf_flr;
+
+       /* The OS Epoch time in seconds */
+       u32 epoch;
+
+       /* Allow prepare to pass even if some initializations are failing.
+        * If set, the `p_prepare_res' field would be set with the return,
+        * and might allow probe to pass even if there are certain issues.
+        */
+       bool b_relaxed_probe;
+       enum ecore_hw_prepare_result p_relaxed_res;
+};
 
 /**
  * @brief ecore_hw_prepare -
  *
  * @param p_dev
- * @param personality - personality to initialize
+ * @param p_params
  *
  * @return enum _ecore_status_t
  */
-enum _ecore_status_t ecore_hw_prepare(struct ecore_dev *p_dev, int personality);
+enum _ecore_status_t ecore_hw_prepare(struct ecore_dev *p_dev,
+                                     struct ecore_hw_prepare_params *p_params);
 
 /**
  * @brief ecore_hw_remove -
@@ -353,7 +413,8 @@ ecore_chain_alloc(struct ecore_dev *p_dev,
                  enum ecore_chain_cnt_type cnt_type,
                  u32 num_elems,
                  osal_size_t elem_size,
-                 struct ecore_chain *p_chain);
+                 struct ecore_chain *p_chain,
+                 struct ecore_chain_ext_pbl *ext_pbl);
 
 /**
  * @brief ecore_chain_free - Free chain DMA memory
@@ -422,28 +483,50 @@ enum _ecore_status_t ecore_llh_add_mac_filter(struct ecore_hwfn *p_hwfn,
  * @param p_filter - MAC to remove
  */
 void ecore_llh_remove_mac_filter(struct ecore_hwfn *p_hwfn,
-                                struct ecore_ptt *p_ptt, u8 *p_filter);
+                            struct ecore_ptt *p_ptt,
+                            u8 *p_filter);
+
+enum ecore_llh_port_filter_type_t {
+       ECORE_LLH_FILTER_ETHERTYPE,
+       ECORE_LLH_FILTER_TCP_SRC_PORT,
+       ECORE_LLH_FILTER_TCP_DEST_PORT,
+       ECORE_LLH_FILTER_TCP_SRC_AND_DEST_PORT,
+       ECORE_LLH_FILTER_UDP_SRC_PORT,
+       ECORE_LLH_FILTER_UDP_DEST_PORT,
+       ECORE_LLH_FILTER_UDP_SRC_AND_DEST_PORT
+};
 
 /**
- * @brief ecore_llh_add_ethertype_filter - configures a ethertype filter in llh
+ * @brief ecore_llh_add_protocol_filter - configures a protocol filter in llh
  *
  * @param p_hwfn
  * @param p_ptt
- * @param filter - ethertype to add
+ * @param source_port_or_eth_type - source port or ethertype to add
+ * @param dest_port - destination port to add
+ * @param type - type of filters and comparing
  */
-enum _ecore_status_t ecore_llh_add_ethertype_filter(struct ecore_hwfn *p_hwfn,
+enum _ecore_status_t
+ecore_llh_add_protocol_filter(struct ecore_hwfn *p_hwfn,
                              struct ecore_ptt *p_ptt,
-                                                   u16 filter);
+                             u16 source_port_or_eth_type,
+                             u16 dest_port,
+                             enum ecore_llh_port_filter_type_t type);
 
 /**
- * @brief ecore_llh_remove_ethertype_filter - removes a ethertype llh filter
+ * @brief ecore_llh_remove_protocol_filter - remove a protocol filter in llh
  *
  * @param p_hwfn
  * @param p_ptt
- * @param filter - ethertype to remove
+ * @param source_port_or_eth_type - source port or ethertype to add
+ * @param dest_port - destination port to add
+ * @param type - type of filters and comparing
  */
-void ecore_llh_remove_ethertype_filter(struct ecore_hwfn *p_hwfn,
-                                      struct ecore_ptt *p_ptt, u16 filter);
+void
+ecore_llh_remove_protocol_filter(struct ecore_hwfn *p_hwfn,
+                                struct ecore_ptt *p_ptt,
+                                u16 source_port_or_eth_type,
+                                u16 dest_port,
+                                enum ecore_llh_port_filter_type_t type);
 
 /**
  * @brief ecore_llh_clear_all_filters - removes all MAC filters from llh
@@ -455,56 +538,47 @@ void ecore_llh_clear_all_filters(struct ecore_hwfn *p_hwfn,
                             struct ecore_ptt *p_ptt);
 
 /**
-*@brief Cleanup of previous driver remains prior to load
+ * @brief ecore_llh_set_function_as_default - set function as default per port
  *
  * @param p_hwfn
  * @param p_ptt
- * @param id - For PF, engine-relative. For VF, PF-relative.
- * @param is_vf - true iff cleanup is made for a VF.
- *
- * @return enum _ecore_status_t
  */
-enum _ecore_status_t ecore_final_cleanup(struct ecore_hwfn *p_hwfn,
-                                        struct ecore_ptt *p_ptt,
-                                        u16 id, bool is_vf);
-
-/**
- * @brief ecore_test_registers - Perform register tests
- *
- * @param p_hwfn
- * @param p_ptt
- *
- * @return enum _ecore_status_t
- */
-enum _ecore_status_t ecore_test_registers(struct ecore_hwfn *p_hwfn,
-                                         struct ecore_ptt *p_ptt);
+enum _ecore_status_t
+ecore_llh_set_function_as_default(struct ecore_hwfn *p_hwfn,
+                                 struct ecore_ptt *p_ptt);
 
 /**
- * @brief ecore_set_rxq_coalesce - Configure coalesce parameters for an Rx queue
+ *@brief Cleanup of previous driver remains prior to load
  *
  * @param p_hwfn
  * @param p_ptt
- * @param coalesce - Coalesce value in micro seconds.
- * @param qid - Queue index.
+ * @param id - For PF, engine-relative. For VF, PF-relative.
+ * @param is_vf - true iff cleanup is made for a VF.
  *
  * @return enum _ecore_status_t
  */
-enum _ecore_status_t ecore_set_rxq_coalesce(struct ecore_hwfn *p_hwfn,
-                                           struct ecore_ptt *p_ptt,
-                                           u8 coalesce, u8 qid);
-
+enum _ecore_status_t ecore_final_cleanup(struct ecore_hwfn     *p_hwfn,
+                                        struct ecore_ptt       *p_ptt,
+                                        u16                    id,
+                                        bool                   is_vf);
 /**
- * @brief ecore_set_txq_coalesce - Configure coalesce parameters for a Tx queue
+ * @brief ecore_set_queue_coalesce - Configure coalesce parameters for Rx and
+ *    Tx queue. The fact that we can configure coalescing to up to 511, but on
+ *    varying accuracy [the bigger the value the less accurate] up to a mistake
+ *    of 3usec for the highest values.
+ *    While the API allows setting coalescing per-qid, all queues sharing a SB
+ *    should be in same range [i.e., either 0-0x7f, 0x80-0xff or 0x100-0x1ff]
+ *    otherwise configuration would break.
  *
  * @param p_hwfn
- * @param p_ptt
- * @param coalesce - Coalesce value in micro seconds.
- * @param qid - Queue index.
+ * @param rx_coal - Rx Coalesce value in micro seconds.
+ * @param tx_coal - TX Coalesce value in micro seconds.
+ * @param p_handle
  *
  * @return enum _ecore_status_t
- */
-enum _ecore_status_t ecore_set_txq_coalesce(struct ecore_hwfn *p_hwfn,
-                                           struct ecore_ptt *p_ptt,
-                                           u8 coalesce, u8 qid);
+ **/
+enum _ecore_status_t
+ecore_set_queue_coalesce(struct ecore_hwfn *p_hwfn, u16 rx_coal,
+                        u16 tx_coal, void *p_handle);
 
 #endif