net/sfc/base: import MAC statistics
[dpdk.git] / drivers / net / sfc / base / efx.h
index 794ba4b..abd264a 100644 (file)
@@ -326,6 +326,98 @@ efx_intr_fini(
 
 /* MAC */
 
+#if EFSYS_OPT_MAC_STATS
+
+/* START MKCONFIG GENERATED EfxHeaderMacBlock e323546097fd7c65 */
+typedef enum efx_mac_stat_e {
+       EFX_MAC_RX_OCTETS,
+       EFX_MAC_RX_PKTS,
+       EFX_MAC_RX_UNICST_PKTS,
+       EFX_MAC_RX_MULTICST_PKTS,
+       EFX_MAC_RX_BRDCST_PKTS,
+       EFX_MAC_RX_PAUSE_PKTS,
+       EFX_MAC_RX_LE_64_PKTS,
+       EFX_MAC_RX_65_TO_127_PKTS,
+       EFX_MAC_RX_128_TO_255_PKTS,
+       EFX_MAC_RX_256_TO_511_PKTS,
+       EFX_MAC_RX_512_TO_1023_PKTS,
+       EFX_MAC_RX_1024_TO_15XX_PKTS,
+       EFX_MAC_RX_GE_15XX_PKTS,
+       EFX_MAC_RX_ERRORS,
+       EFX_MAC_RX_FCS_ERRORS,
+       EFX_MAC_RX_DROP_EVENTS,
+       EFX_MAC_RX_FALSE_CARRIER_ERRORS,
+       EFX_MAC_RX_SYMBOL_ERRORS,
+       EFX_MAC_RX_ALIGN_ERRORS,
+       EFX_MAC_RX_INTERNAL_ERRORS,
+       EFX_MAC_RX_JABBER_PKTS,
+       EFX_MAC_RX_LANE0_CHAR_ERR,
+       EFX_MAC_RX_LANE1_CHAR_ERR,
+       EFX_MAC_RX_LANE2_CHAR_ERR,
+       EFX_MAC_RX_LANE3_CHAR_ERR,
+       EFX_MAC_RX_LANE0_DISP_ERR,
+       EFX_MAC_RX_LANE1_DISP_ERR,
+       EFX_MAC_RX_LANE2_DISP_ERR,
+       EFX_MAC_RX_LANE3_DISP_ERR,
+       EFX_MAC_RX_MATCH_FAULT,
+       EFX_MAC_RX_NODESC_DROP_CNT,
+       EFX_MAC_TX_OCTETS,
+       EFX_MAC_TX_PKTS,
+       EFX_MAC_TX_UNICST_PKTS,
+       EFX_MAC_TX_MULTICST_PKTS,
+       EFX_MAC_TX_BRDCST_PKTS,
+       EFX_MAC_TX_PAUSE_PKTS,
+       EFX_MAC_TX_LE_64_PKTS,
+       EFX_MAC_TX_65_TO_127_PKTS,
+       EFX_MAC_TX_128_TO_255_PKTS,
+       EFX_MAC_TX_256_TO_511_PKTS,
+       EFX_MAC_TX_512_TO_1023_PKTS,
+       EFX_MAC_TX_1024_TO_15XX_PKTS,
+       EFX_MAC_TX_GE_15XX_PKTS,
+       EFX_MAC_TX_ERRORS,
+       EFX_MAC_TX_SGL_COL_PKTS,
+       EFX_MAC_TX_MULT_COL_PKTS,
+       EFX_MAC_TX_EX_COL_PKTS,
+       EFX_MAC_TX_LATE_COL_PKTS,
+       EFX_MAC_TX_DEF_PKTS,
+       EFX_MAC_TX_EX_DEF_PKTS,
+       EFX_MAC_PM_TRUNC_BB_OVERFLOW,
+       EFX_MAC_PM_DISCARD_BB_OVERFLOW,
+       EFX_MAC_PM_TRUNC_VFIFO_FULL,
+       EFX_MAC_PM_DISCARD_VFIFO_FULL,
+       EFX_MAC_PM_TRUNC_QBB,
+       EFX_MAC_PM_DISCARD_QBB,
+       EFX_MAC_PM_DISCARD_MAPPING,
+       EFX_MAC_RXDP_Q_DISABLED_PKTS,
+       EFX_MAC_RXDP_DI_DROPPED_PKTS,
+       EFX_MAC_RXDP_STREAMING_PKTS,
+       EFX_MAC_RXDP_HLB_FETCH,
+       EFX_MAC_RXDP_HLB_WAIT,
+       EFX_MAC_VADAPTER_RX_UNICAST_PACKETS,
+       EFX_MAC_VADAPTER_RX_UNICAST_BYTES,
+       EFX_MAC_VADAPTER_RX_MULTICAST_PACKETS,
+       EFX_MAC_VADAPTER_RX_MULTICAST_BYTES,
+       EFX_MAC_VADAPTER_RX_BROADCAST_PACKETS,
+       EFX_MAC_VADAPTER_RX_BROADCAST_BYTES,
+       EFX_MAC_VADAPTER_RX_BAD_PACKETS,
+       EFX_MAC_VADAPTER_RX_BAD_BYTES,
+       EFX_MAC_VADAPTER_RX_OVERFLOW,
+       EFX_MAC_VADAPTER_TX_UNICAST_PACKETS,
+       EFX_MAC_VADAPTER_TX_UNICAST_BYTES,
+       EFX_MAC_VADAPTER_TX_MULTICAST_PACKETS,
+       EFX_MAC_VADAPTER_TX_MULTICAST_BYTES,
+       EFX_MAC_VADAPTER_TX_BROADCAST_PACKETS,
+       EFX_MAC_VADAPTER_TX_BROADCAST_BYTES,
+       EFX_MAC_VADAPTER_TX_BAD_PACKETS,
+       EFX_MAC_VADAPTER_TX_BAD_BYTES,
+       EFX_MAC_VADAPTER_TX_OVERFLOW,
+       EFX_MAC_NSTATS
+} efx_mac_stat_t;
+
+/* END MKCONFIG GENERATED EfxHeaderMacBlock */
+
+#endif /* EFSYS_OPT_MAC_STATS */
+
 typedef enum efx_link_mode_e {
        EFX_LINK_UNKNOWN = 0,
        EFX_LINK_DOWN,
@@ -431,6 +523,76 @@ efx_mac_fcntl_get(
        __out           unsigned int *fcntl_linkp);
 
 
+#if EFSYS_OPT_MAC_STATS
+
+#if EFSYS_OPT_NAMES
+
+extern __checkReturn                   const char *
+efx_mac_stat_name(
+       __in                            efx_nic_t *enp,
+       __in                            unsigned int id);
+
+#endif /* EFSYS_OPT_NAMES */
+
+#define        EFX_MAC_STATS_MASK_BITS_PER_PAGE        (8 * sizeof (uint32_t))
+
+#define        EFX_MAC_STATS_MASK_NPAGES       \
+       (P2ROUNDUP(EFX_MAC_NSTATS, EFX_MAC_STATS_MASK_BITS_PER_PAGE) / \
+           EFX_MAC_STATS_MASK_BITS_PER_PAGE)
+
+/*
+ * Get mask of MAC statistics supported by the hardware.
+ *
+ * If mask_size is insufficient to return the mask, EINVAL error is
+ * returned. EFX_MAC_STATS_MASK_NPAGES multiplied by size of the page
+ * (which is sizeof (uint32_t)) is sufficient.
+ */
+extern __checkReturn                   efx_rc_t
+efx_mac_stats_get_mask(
+       __in                            efx_nic_t *enp,
+       __out_bcount(mask_size)         uint32_t *maskp,
+       __in                            size_t mask_size);
+
+#define        EFX_MAC_STAT_SUPPORTED(_mask, _stat)    \
+       ((_mask)[(_stat) / EFX_MAC_STATS_MASK_BITS_PER_PAGE] &  \
+        (1ULL << ((_stat) & (EFX_MAC_STATS_MASK_BITS_PER_PAGE - 1))))
+
+#define        EFX_MAC_STATS_SIZE 0x400
+
+/*
+ * Upload mac statistics supported by the hardware into the given buffer.
+ *
+ * The reference buffer must be at least %EFX_MAC_STATS_SIZE bytes,
+ * and page aligned.
+ *
+ * The hardware will only DMA statistics that it understands (of course).
+ * Drivers should not make any assumptions about which statistics are
+ * supported, especially when the statistics are generated by firmware.
+ *
+ * Thus, drivers should zero this buffer before use, so that not-understood
+ * statistics read back as zero.
+ */
+extern __checkReturn                   efx_rc_t
+efx_mac_stats_upload(
+       __in                            efx_nic_t *enp,
+       __in                            efsys_mem_t *esmp);
+
+extern __checkReturn                   efx_rc_t
+efx_mac_stats_periodic(
+       __in                            efx_nic_t *enp,
+       __in                            efsys_mem_t *esmp,
+       __in                            uint16_t period_ms,
+       __in                            boolean_t events);
+
+extern __checkReturn                   efx_rc_t
+efx_mac_stats_update(
+       __in                            efx_nic_t *enp,
+       __in                            efsys_mem_t *esmp,
+       __inout_ecount(EFX_MAC_NSTATS)  efsys_stat_t *stat,
+       __inout_opt                     uint32_t *generationp);
+
+#endif /* EFSYS_OPT_MAC_STATS */
+
 /* MON */
 
 typedef enum efx_mon_type_e {
@@ -1122,6 +1284,16 @@ typedef __checkReturn    boolean_t
        __in_opt        void *arg,
        __in            efx_link_mode_t link_mode);
 
+#if EFSYS_OPT_MAC_STATS
+
+typedef __checkReturn  boolean_t
+(*efx_mac_stats_ev_t)(
+       __in_opt        void *arg,
+       __in            uint32_t generation
+       );
+
+#endif /* EFSYS_OPT_MAC_STATS */
+
 typedef struct efx_ev_callbacks_s {
        efx_initialized_ev_t            eec_initialized;
        efx_rx_ev_t                     eec_rx;
@@ -1135,6 +1307,9 @@ typedef struct efx_ev_callbacks_s {
        efx_wake_up_ev_t                eec_wake_up;
        efx_timer_ev_t                  eec_timer;
        efx_link_change_ev_t            eec_link_change;
+#if EFSYS_OPT_MAC_STATS
+       efx_mac_stats_ev_t              eec_mac_stats;
+#endif /* EFSYS_OPT_MAC_STATS */
 } efx_ev_callbacks_t;
 
 extern __checkReturn   boolean_t