net/qede/base: add UDP ports in bulletin board message
[dpdk.git] / drivers / net / qede / base / bcm_osal.c
index ae5a8bc..28be958 100644 (file)
@@ -6,8 +6,6 @@
  * See LICENSE.qede_pmd for copyright and licensing details.
  */
 
-#include <zlib.h>
-
 #include <rte_memzone.h>
 #include <rte_errno.h>
 
@@ -15,6 +13,9 @@
 #include "ecore.h"
 #include "ecore_hw.h"
 #include "ecore_iov_api.h"
+#include "ecore_mcp_api.h"
+#include "ecore_l2_api.h"
+
 
 unsigned long qede_log2_align(unsigned long n)
 {
@@ -62,6 +63,27 @@ inline bool qede_test_bit(u32 nr, unsigned long *addr)
        return res;
 }
 
+static inline u32 qede_ffb(unsigned long word)
+{
+       unsigned long first_bit;
+
+       first_bit = __builtin_ffsl(word);
+       return first_bit ? (first_bit - 1) : OSAL_BITS_PER_UL;
+}
+
+inline u32 qede_find_first_bit(unsigned long *addr, u32 limit)
+{
+       u32 i;
+       u32 nwords = 0;
+       OSAL_BUILD_BUG_ON(!limit);
+       nwords = (limit - 1) / OSAL_BITS_PER_UL + 1;
+       for (i = 0; i < nwords; i++)
+               if (addr[i] != 0)
+                       break;
+
+       return (i == nwords) ? limit : i * OSAL_BITS_PER_UL + qede_ffb(addr[i]);
+}
+
 static inline u32 qede_ffz(unsigned long word)
 {
        unsigned long first_zero;
@@ -149,6 +171,7 @@ void *osal_dma_alloc_coherent_aligned(struct ecore_dev *p_dev,
        return mz->addr;
 }
 
+#ifdef CONFIG_ECORE_ZIPPED_FW
 u32 qede_unzip_data(struct ecore_hwfn *p_hwfn, u32 input_len,
                    u8 *input_buf, u32 max_size, u8 *unzip_buf)
 {
@@ -179,3 +202,22 @@ u32 qede_unzip_data(struct ecore_hwfn *p_hwfn, u32 input_len,
 
        return p_hwfn->stream->total_out / 4;
 }
+#endif
+
+void
+qede_get_mcp_proto_stats(struct ecore_dev *edev,
+                        enum ecore_mcp_protocol_type type,
+                        union ecore_mcp_protocol_stats *stats)
+{
+       struct ecore_eth_stats lan_stats;
+
+       if (type == ECORE_MCP_LAN_STATS) {
+               ecore_get_vport_stats(edev, &lan_stats);
+               stats->lan_stats.ucast_rx_pkts = lan_stats.rx_ucast_pkts;
+               stats->lan_stats.ucast_tx_pkts = lan_stats.tx_ucast_pkts;
+               stats->lan_stats.fcs_err = -1;
+       } else {
+               DP_INFO(edev, "Statistics request type %d not supported\n",
+                      type);
+       }
+}