net/ice: complete device configure in DCF
[dpdk.git] / drivers / net / qede / base / ecore_spq.h
index 31d8a3e..0958e5a 100644 (file)
@@ -1,9 +1,7 @@
-/*
- * Copyright (c) 2016 QLogic Corporation.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2016 - 2018 Cavium Inc.
  * All rights reserved.
- * www.qlogic.com
- *
- * See LICENSE.qede_pmd for copyright and licensing details.
+ * www.cavium.com
  */
 
 #ifndef __ECORE_SPQ_H__
@@ -86,6 +84,22 @@ struct ecore_consq {
        struct ecore_chain      chain;
 };
 
+typedef enum _ecore_status_t
+(*ecore_spq_async_comp_cb)(struct ecore_hwfn *p_hwfn,
+                          u8 opcode,
+                          u16 echo,
+                          union event_ring_data *data,
+                          u8 fw_return_code);
+
+enum _ecore_status_t
+ecore_spq_register_async_cb(struct ecore_hwfn *p_hwfn,
+                           enum protocol_type protocol_id,
+                           ecore_spq_async_comp_cb cb);
+
+void
+ecore_spq_unregister_async_cb(struct ecore_hwfn *p_hwfn,
+                             enum protocol_type protocol_id);
+
 struct ecore_spq {
        osal_spinlock_t                 lock;
 
@@ -100,21 +114,24 @@ struct ecore_spq {
        dma_addr_t                      p_phys;
        struct ecore_spq_entry          *p_virt;
 
+       /* SPQ max sleep iterations used in __ecore_spq_block() */
+       u32                             block_sleep_max_iter;
+
        /* Bitmap for handling out-of-order completions */
 #define SPQ_RING_SIZE          \
        (CORE_SPQE_PAGE_SIZE_BYTES / sizeof(struct slow_path_element))
 /* BITS_PER_LONG */
-#define SPQ_COMP_BMAP_SIZE     (SPQ_RING_SIZE / (sizeof(unsigned long) * 8))
-       unsigned long                   p_comp_bitmap[SPQ_COMP_BMAP_SIZE];
-       u8                              comp_bitmap_idx;
+#define SPQ_COMP_BMAP_SIZE     (SPQ_RING_SIZE / (sizeof(u32) * 8))
+       u32                     p_comp_bitmap[SPQ_COMP_BMAP_SIZE];
+       u8                      comp_bitmap_idx;
 #define SPQ_COMP_BMAP_SET_BIT(p_spq, idx)                              \
        (OSAL_SET_BIT(((idx) % SPQ_RING_SIZE), (p_spq)->p_comp_bitmap))
 
 #define SPQ_COMP_BMAP_CLEAR_BIT(p_spq, idx)                            \
        (OSAL_CLEAR_BIT(((idx) % SPQ_RING_SIZE), (p_spq)->p_comp_bitmap))
 
-#define SPQ_COMP_BMAP_TEST_BIT(p_spq, idx)     \
-       (OSAL_TEST_BIT(((idx) % SPQ_RING_SIZE), (p_spq)->p_comp_bitmap))
+#define SPQ_COMP_BMAP_GET_BIT(p_spq, idx)      \
+       (OSAL_GET_BIT(((idx) % SPQ_RING_SIZE), (p_spq)->p_comp_bitmap))
 
        /* Statistics */
        u32                             unlimited_pending_count;
@@ -127,11 +144,22 @@ struct ecore_spq {
 
        u32                             db_addr_offset;
        struct core_db_data             db_data;
+       ecore_spq_async_comp_cb         async_comp_cb[MAX_PROTOCOL_TYPE];
 };
 
 struct ecore_port;
 struct ecore_hwfn;
 
+/**
+ * @brief ecore_set_spq_block_timeout - calculates the maximum sleep
+ * iterations used in __ecore_spq_block();
+ *
+ * @param p_hwfn
+ * @param spq_timeout_ms
+ */
+void ecore_set_spq_block_timeout(struct ecore_hwfn *p_hwfn,
+                                u32 spq_timeout_ms);
+
 /**
  * @brief ecore_spq_post - Posts a Slow hwfn request to FW, or lacking that
  *        Pends it to the future list.